https nginx tomcat web服務(wù)器的搭建
http
??提供的默認(rèn)配置
–?Listen:監(jiān)聽(tīng)地址:端口(80)
–?ServerName:本站點(diǎn)注冊(cè)的DNS名稱(空缺)
–?DocumentRoot:網(wǎng)頁(yè)根目錄(/var/www/html)
–?DirectoryIndex:起始頁(yè)/首頁(yè)文件名(index.html)
?主配置文件:/etc/httpd/conf/httpd.conf
?<Directory ???/>
????Require all denied?????#拒絕所有人訪問(wèn)
</Directory>
?<Directory????"/var/www">
????Require all granted??????#允許所有人訪問(wèn)
??配置文件路徑
–?/etc/httpd/conf/httpd.conf ?#主配置文件
–?/etc/httpd/conf.d/*.conf ??#調(diào)用配置文件
???為每個(gè)虛擬站點(diǎn)添加配置
<VirtualHost ??IP地址:端口>
???????ServerName ?此站點(diǎn)的DNS名稱
???????DocumentRoot ?此站點(diǎn)的網(wǎng)頁(yè)根目錄
</VirtualHost>
?<VirtualHost ??IP地址:端口>
???????ServerName ?此站點(diǎn)的DNS名稱
???????DocumentRoot ?此站點(diǎn)的網(wǎng)頁(yè)根目錄
</VirtualHost>
nginx
yum -y install bash-completion ??//安裝支持tab鍵的軟件包
裝好之后,使用exit退出,重新登錄才生效
Yum -y install net-tools ?//安裝網(wǎng)絡(luò)相關(guān)軟件包
yum?-y?install ?psmisc ??//安裝支持killall命令的軟件
yum -y install bash-completion ??//安裝支持tab鍵的軟件包
裝好之后,使用exit退出,重新登錄才生效
Yum -y install net-tools ?//安裝網(wǎng)絡(luò)相關(guān)軟件包
yum?-y?install ?psmisc ??//安裝支持killall命令的軟件
yum -y install ?gcc??make??//安裝編譯工具
yum -y install ?pcre-devel ?//安裝可以讓nginx支持正則的軟件包
yum -y install ?openssl-devel ?//安裝可以讓nginx支持安裝加密網(wǎng)站
./configure ?--prefix=/usr/local/nginx ?--user=nginx ?--with-http_ssl_module
//配置,--prefix是指定安裝路徑,--user是指定用戶 ?
--with-http_ssl_module是安全網(wǎng)站模塊
ls ?/usr/local/nginx/ ???//安裝好之后查看目錄
conf?存放配置文件 ????sbin??存放主程序
html?存放網(wǎng)站頁(yè)面 ????logs??存放日志
sbin/nginx ?-V?
nginx增加網(wǎng)站認(rèn)證功能
修改nginx配置文件,在40、41行添加兩句 ????
vim ?conf/nginx.conf
auth_basic??"password"; ?//網(wǎng)頁(yè)彈出的提示信息,此信息可能會(huì)根據(jù)
不同瀏覽器顯示效果不一,有的瀏覽器甚至不顯示,但不影響認(rèn)證功能
auth_basic_user_file??"/usr/local/nginx/pass"; ??//存放網(wǎng)站賬戶的文件
?sbin/nginx ?-s reload ??//重加載配置,檢驗(yàn)之前配置,沒(méi)有任何信息即可
yum -y install httpd-tools ??//之后安裝軟件包
htpasswd -c ?pass ?tom ??//創(chuàng)建pass文件,里面創(chuàng)建tom賬戶,之后
會(huì)要求輸入兩次密碼
然后用火狐瀏覽器訪問(wèn)192.168.2.5,可以看到輸入用戶名密碼的對(duì)話框、
輸入用戶名tom以及密碼即可
?htpasswd ?pass ?jerry???//追加一個(gè)賬戶,名字是jerry??
nginx配置虛擬主機(jī)
?http {
server?{ ???//第1個(gè)虛擬主機(jī)
listen 80;
server_name www.a.com;
root html;
index ?index.html;
}
server { ???//第2個(gè)虛擬主機(jī)
。。。。
。。。。
}
}
autoindex on; 表示自動(dòng)在index.html的索引打開(kāi)
autoindex_exact_size on; 表示如果有文件則顯示文件大小
autoindex_localtime on; 表示顯示更改時(shí)間,以當(dāng)前系統(tǒng)時(shí)間為準(zhǔn)
打開(kāi)nginx主配置文件在34~39行添加:
server {
listen 80; ????//監(jiān)聽(tīng)端口號(hào)
server_name www.b.com; ????//域名,默認(rèn)的虛擬主機(jī)改成www.a.com
root html_b; ????//存放網(wǎng)頁(yè)的目錄
index index.html; ????//默認(rèn)頁(yè)名字
}
?sbin/nginx ?-s ?reload ??//之后重新加載配置文件,服務(wù)必須是開(kāi)啟狀態(tài)
搭建安全網(wǎng)站
?vim conf/nginx.conf ???//修改大概103~120行,如果配置恢復(fù)了,就找98~115行
????server { ? //此處的虛擬主機(jī)自帶ssl安全加密功能,將其范圍的注釋取消即可
????????listen ??????443 ssl;
????????server_name ?www.c.com; ?????//這里修改域名
????????ssl_certificate ?????cert.pem; ???//證書(shū),包含公鑰
????????ssl_certificate_key ?cert.key; ????//私鑰
????????ssl_session_cache ???shared:SSL:1m;
????????ssl_session_timeout ?5m;
????????ssl_ciphers ?HIGH:!aNULL:!MD5;
????????ssl_prefer_server_ciphers ?on;
????????location / {
????????????root ??html_c; ????//這里修改頁(yè)面存儲(chǔ)目錄
????????????index ?index.html index.htm;
????????}
}
openssl genrsa > conf/cert.key ??//創(chuàng)建私鑰
?openssl req -x509 -key conf/cert.key > conf/cert.pem ??
//創(chuàng)建證書(shū),證書(shū)中包含公鑰,生成過(guò)程會(huì)詢問(wèn)諸如你在哪個(gè)國(guó)家之類
的問(wèn)題,可以隨意回答,但要走完全過(guò)程
Country Name (2 letter code) [XX]:dc ???國(guó)家名
State or Province Name (full name) []:dc ???省份
Locality Name (eg, city) [Default City]:dc ????城市
Organization Name (eg, company) [Default Company Ltd]:dc ???公司
Organizational Unit Name (eg, section) []:dc ???部門(mén)
Common Name (eg, your name or your server's hostname) []:dc ???服務(wù)器名稱
Email Address []:dc@dc.com ????電子郵件
LNMP
yum -y install ?mariadb ?mariadb-server? ?mariadb-deve? //安裝數(shù)據(jù)庫(kù)客戶端與服務(wù)端
php ?//安裝php,相當(dāng)于解釋器
yum?-y?install ?php-fpm??php ?安裝php,相當(dāng)于解釋器 ?//安裝可以幫助nginx解析php語(yǔ)言編寫(xiě)的動(dòng)
態(tài)網(wǎng)站的服務(wù)
yum?-y?install??php-mysql???//安裝php與mysql關(guān)聯(lián)的軟件包
systemctl?start??php-fpm
nginx配置文件,第65到71行去掉注釋(可以用:65,71s/#//),69行不用去
????????location ~ \.php$ { ??//~是使用正則表達(dá)式,匹配以.php結(jié)尾
????????????root ??????????html; ????//網(wǎng)站頁(yè)面位置,不用改,保持默認(rèn)
????????????fastcgi_pass ??127.0.0.1:9000; ?//一旦用戶訪問(wèn)了.php結(jié)尾的文
件,就讓nginx找后臺(tái)的php-fpm(端口號(hào)9000)
????????????fastcgi_index ?index.php; ???//動(dòng)態(tài)網(wǎng)站的默認(rèn)頁(yè)面,無(wú)需修改
????????# ??fastcgi_param ?SCRIPT_FILENAME ?/scripts$fastcgi_script_name; ??
?//無(wú)用行,保持注釋狀態(tài)
????????????include ???????fastcgi.conf; ?//這里是另外一個(gè)配置文件,需要改擴(kuò)展名
????????}
?fastCGI????快速公共網(wǎng)關(guān)接口,可以連接如nginx等網(wǎng)站程序到網(wǎng)站
地址重寫(xiě)
可以定義用戶的訪問(wèn)路徑可以看到的實(shí)際內(nèi)容
rewrite ?匹配路徑 ??實(shí)際看到的頁(yè)面 ???選項(xiàng)
打開(kāi)配置文件,在38行添加
rewrite ?/a.html ?/b.html; ???//用戶訪問(wèn)的路徑中包含a.html的話
就跳轉(zhuǎn)到b.html頁(yè)面
地址重寫(xiě)測(cè)試3:不同網(wǎng)站間跳轉(zhuǎn)
rewrite / http://www.tmooc.cn; ???//訪問(wèn)192.168.2.5的網(wǎng)站可以
地址重寫(xiě)測(cè)試2:相同網(wǎng)站不同頁(yè)面
rewrite ^/a\.html$ /b.html redirect; ??//在剛剛的配置中添加redirect
地址重寫(xiě)測(cè)試4:不同網(wǎng)站間跳轉(zhuǎn)
rewrite /(.*) http://www.tmooc.cn/$1; ???//訪問(wèn)老網(wǎng)站會(huì)跳到新
網(wǎng)站,同時(shí)會(huì)攜帶所訪問(wèn)的頁(yè)面,()是正則,代表保留(復(fù)制) ?$1表示
粘貼之前第一個(gè)小括號(hào)保留的內(nèi)容
sbin/nginx -s reload??
地址重寫(xiě)測(cè)試5:不同瀏覽器跳轉(zhuǎn)到不同頁(yè)面
修改配置文件,刪除原有地址重寫(xiě),原地添加
if??($http_user_agent ?~* ?firefox){ ??//如果用戶使用了火狐瀏覽器
rewrite ?/(.*) ?/firefox/$1; ?//就進(jìn)行地址重寫(xiě)操作,讓用戶看到火狐專屬頁(yè)面
} ?????????
//$http_user_agent是nginx的內(nèi)置變量,存儲(chǔ)了用戶的信息,比如用的什么瀏覽器
~匹配正則 ?*忽略大小寫(xiě)
選項(xiàng)
redirect????臨時(shí)重定向 ??狀態(tài)碼 ?302 ??爬蟲(chóng)不感興趣
permanent??永久重定向 ?狀態(tài)碼 ?301 ??爬蟲(chóng)感興趣
?以下兩種寫(xiě)法對(duì)于用戶來(lái)說(shuō)效果一樣,但是對(duì)百度這樣的網(wǎng)站不同
rewrite ?^/a.html$ ?/b.html ?permanent;
rewrite ?^/a.html$ ?/b.html ?redirect;
last??不再讀其他rewrite
rewrite ?/a.html ?/b.html ?last;???//不加last的話nginx會(huì)把多個(gè)rewrite語(yǔ)句綜合處理
結(jié)果就是看a頁(yè)面結(jié)果跳到c頁(yè)面了,加了last的話可以避免這個(gè)情況
break??不再讀其他語(yǔ)句
????????location / { ????//此處為默認(rèn)的location
rewrite /a.html /b.html break; ???//將last改為break可以阻止后面的語(yǔ)句,此處
如果是last則無(wú)法阻止后面location語(yǔ)句中的rewrite語(yǔ)句
????????????root ??html;
????????????index ?index.html index.htm;
????????}
location /b.html { ???//這里是新添加的location
rewrite /b.html /c.html;
}
nginx配置文件實(shí)現(xiàn)集群功能
?vim conf/nginx.conf
upstream web { ???????//首先是34~37行,創(chuàng)建集群,集群名稱叫web
server ?192.168.2.100:80; ??//這里是集群中的服務(wù)器ip與端口
server ?192.168.2.200:80; ??//第二臺(tái)集群主機(jī)
}
server {
????????listen ??????80;
????????。。。。
????????location / {
proxy_pass ?http://web; ????//在第47行,調(diào)用集群
????????????root ??html;
????????????index ?index.html index.htm;
????????}
之后開(kāi)啟nginx或者重加載nginx配置,用curl 192.168.2.5可以看到 web1
或web2頁(yè)面輪詢出現(xiàn)
?優(yōu)化
server 192.168.2.200:80 weight=2; ??//為性能較強(qiáng)的集群主機(jī)配置權(quán)重
,權(quán)重越大任務(wù)的分配量就越大
1,?配置健康檢查
server 192.168.2.200:80 max_fails=2 fail_timeout=30;?//檢測(cè)兩次如果失敗
,則認(rèn)為集群中的主機(jī)故障,之后等待30秒再次測(cè)試
相同客戶機(jī)訪問(wèn)相同服務(wù)器
upstream web {
ip_hash; ??//相同客戶機(jī)訪問(wèn)相同服務(wù)器,讓一個(gè)客戶機(jī)訪問(wèn)集群時(shí)鎖定
一個(gè)后臺(tái)服務(wù)器,避免重復(fù)登陸的問(wèn)題
server 192.168.2.100:80;
server 192.168.2.200:80;
server 192.168.2.200:80 down; ?//down標(biāo)記可以讓集群主機(jī)暫時(shí)不參與集群活動(dòng)
四層代理
./configure ?--with-stream ?--with-http_stub_status_module
//這里的--with-stream 是添加四層代理模塊,可以用來(lái)創(chuàng)建其
他業(yè)務(wù)集群,--with-http_stub_status_module是后面實(shí)驗(yàn)所需模塊
另外,如果更新模塊,但不想刪除之前nginx數(shù)據(jù),可以將nginx源碼目錄下的objs目錄中的nginx文件拷貝到nginx的sbin目錄下替代現(xiàn)有主程序,然后killall ?nginx 再重啟即可
打開(kāi)nginx主配置文件,在16行左右(http上面),添加以下內(nèi)容
stream { ????????//創(chuàng)建新業(yè)務(wù)
upstream backend { ???//創(chuàng)建名叫backend的集群
server 192.168.2.100:22; ???//集群中的主機(jī)使用22端口對(duì)外提供服務(wù)
server 192.168.2.200:22;
}
server {
listen 12345; ???//監(jiān)聽(tīng)端口號(hào)
proxy_pass backend; ???//調(diào)用集群
}
}
?sbin/nginx ??//配置寫(xiě)好之后開(kāi)啟服務(wù)或者重加載配置文件
ssh ?192.168.2.5 -p 12345 ???//嘗試遠(yuǎn)程登錄,第一次可能會(huì)連接集群的某一臺(tái)主機(jī)比如web1
exit ???//退出
ss命令可以查看系統(tǒng)中啟動(dòng)的端口信息,該命令常用選項(xiàng)如下:
-a顯示所有端口的信息
-n以數(shù)字格式顯示端口號(hào)
-t顯示TCP連接的端口
-u顯示UDP連接的端口
-l顯示服務(wù)正在監(jiān)聽(tīng)的端口信息,如httpd啟動(dòng)后,會(huì)一直監(jiān)聽(tīng)80端口
-p顯示監(jiān)聽(tīng)端口的服務(wù)名稱是什么(也就是程序名稱)
注意:在RHEL7系統(tǒng)中可以使用ss命令替代netstat命令,功能一樣,選
404報(bào)錯(cuò)
打開(kāi)配置文件,在默認(rèn)的虛擬主機(jī)里面的location下面修改
error_page ?404 ?????/test.jpg; ?//這里把#注釋去掉,后面改成test.jpg
查看網(wǎng)站后臺(tái)數(shù)據(jù)
--with-http_stub_status_module ??//該功能利用的模塊,之前配置nginx已經(jīng)安裝
打開(kāi)配置文件
location /status ?{ ??//在error_page行上面添加此內(nèi)容
stub_status on;????//顯示后臺(tái)的數(shù)據(jù)
allow 192.168.2.5; ???//只允許2.5查看
deny all; ??//拒絕其他
}
curl ?192.168.2.5/status???查看
Active connections:當(dāng)前活動(dòng)的連接數(shù)量(當(dāng)前有多少用戶訪問(wèn)該網(wǎng)站)。
Accepts:已經(jīng)接受客戶端的連接總數(shù)量。
Handled:已經(jīng)處理客戶端的連接總數(shù)量。
Requests:客戶端發(fā)送的請(qǐng)求數(shù)量。
Reading:當(dāng)前服務(wù)器正在讀取客戶端請(qǐng)求頭的數(shù)量。
Writing:當(dāng)前服務(wù)器正在寫(xiě)響應(yīng)信息的數(shù)量。
Waiting:當(dāng)前多少客戶端在等待服務(wù)器的響應(yīng)。
?
nginx問(wèn)題處理
1,?緩存文件在客戶端
用戶如果反復(fù)訪問(wèn)服務(wù)器的相同文件可以緩存到客戶機(jī),避免
服務(wù)器反復(fù)傳送相同文件,節(jié)約時(shí)間
打開(kāi)配置文件,在默認(rèn)的location下面添加一個(gè)location
location ~* \.(jpg|html|txt|mp3)$ { ????//當(dāng)發(fā)現(xiàn)用戶訪問(wèn)的是
以.jpg或者.html等等結(jié)尾的頁(yè)面時(shí)
expires 30d; ??//就把上述訪問(wèn)的文件在客戶機(jī)緩存30天
}
支持超長(zhǎng)地址欄
默認(rèn)情況下nginx無(wú)法支持長(zhǎng)地址欄,會(huì)報(bào)414錯(cuò)誤
?打開(kāi)配置文件,在默認(rèn)的虛擬主機(jī)上方添加兩行
client_header_buffer_size 200k; ??//第一行表示,用戶訪問(wèn)網(wǎng)站的頭部信
息(包含地址欄)長(zhǎng)度支持200k大小
large_client_header_buffers 4 200k; ?//第二行表示,如果200k不夠,再
給4個(gè)200k
優(yōu)化nginx并發(fā)
??隱藏版本信息
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
?17 http {
?18 ????server_tokens off;
??防止DOS、DDOS攻擊
??DDOS:分布式拒絕服務(wù)
# 壓力測(cè)試,每批次發(fā)送100個(gè)請(qǐng)求給web服務(wù)器,一共發(fā)200個(gè)
[root@zzgrhel8 ~]# yum install -y httpd-tools
[root@zzgrhel8 ~]# ab -c 100 -n 200 http://192.168.4.11/
... ...
Benchmarking 192.168.4.11 (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests ???# 發(fā)送200個(gè)請(qǐng)求完成
... ...
Complete requests: ?????200 ??# 完成了200個(gè)請(qǐng)求
Failed requests: ???????0 ????# 0個(gè)失敗
... ...
??配置nginx連接共享內(nèi)存為10M,每秒鐘只接收一個(gè)請(qǐng)求,最多有5個(gè)請(qǐng)求排隊(duì),多余的拒絕
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf
?17 http {
?18 ????limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ??# 添加
... ...
?37 ????server {
?38 ????????listen ??????80;
?39 ????????server_name ?localhost;
?40 ????????limit_req zone=one burst=5; ?# 添加
[root@node1 ~]# /usr/local/nginx/sbin/nginx -s reload
# 再次測(cè)試
[root@zzgrhel8 ~]# ab -c 100 -n 200 http://192.168.4.11/
... ...
Benchmarking 192.168.4.11 (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
... ...
Complete requests: ?????200
Failed requests: ???????194 ??# 失敗了194個(gè)
... ...
拒絕某些類型的請(qǐng)求
??用戶使用HTTP協(xié)議訪問(wèn)服務(wù)器,一定是通過(guò)某種方法訪問(wèn)的。
??最常用的HTTP方法
–?GET:在瀏覽器中輸入網(wǎng)址、在頁(yè)面中點(diǎn)擊超鏈接、搜索表單。
–?POST:常用于登陸、提交數(shù)據(jù)的表單
??其他HTTP方法不常用,如:
–?HEAD:獲得報(bào)文首部。HEAD 方法和 GET 方法一樣,只是不返回報(bào)文主體部分。
–?PUT:傳輸文件。要求在請(qǐng)求報(bào)文的主體中包含文件內(nèi)容,然后保存到請(qǐng)求 URI 指定的位置。
–?DELETE:刪除文件。DELETE 方法按請(qǐng)求 URI 刪除指定的資源。
# 使用GET和HEAD方法訪問(wèn)nginx。兩種方法都可以訪問(wèn)
[root@zzgrhel8 ~]# curl -i -X GET http://192.168.4.11/
[root@zzgrhel8 ~]# curl -i -X HEAD http://192.168.4.11/
# 配置nginx只接受GET和POST方法
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
?37 ????server {
?38 ????????listen ??????80;
?39 ????????if ($request_method !~ ^(GET|POST)$ ) {
?40 ????????????return 444;
?41 ????????}
... ...
# $request_method是內(nèi)置變量,表示請(qǐng)求方法。~表示正則匹配,!表示取反。^表示開(kāi)頭,$表示結(jié)尾,|表示或
[root@node1 ~]# /usr/local/nginx/sbin/nginx -s reload
# 使用GET和HEAD方法訪問(wèn)nginx。只有GET可以工作
[root@zzgrhel8 ~]# curl -i -X GET http://192.168.4.11/
[root@zzgrhel8 ~]# curl -i -X HEAD http://192.168.4.11/
附:取出nginx.conf中注釋和空行以外的行
# -v是取反。^ *#表示開(kāi)頭有0到多個(gè)空格,然后是#。^$表示空行
[root@node1 ~]# egrep -v '^ *#|^$' /usr/local/nginx/conf/nginx.conf
防止緩沖區(qū)溢出
??緩沖區(qū)溢出定義:程序企圖在預(yù)分配的緩沖區(qū)之外寫(xiě)數(shù)據(jù)。
??漏洞危害:用于更改程序執(zhí)行流,控制函數(shù)返回值,執(zhí)行任意代碼。
# 配置nginx緩沖區(qū)大小,防止緩沖區(qū)溢出
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
?17 http {
?18 ????client_body_buffer_size ????1k;
?19 ????client_header_buffer_size ??1k;
?20 ????client_max_body_size ???????1k;
?21 ????large_client_header_buffers 2 1k;
... ...
[root@node1 ~]# /usr/local/nginx/sbin/nginx -s reload
nginx配置文件修改第3行,第13行-
? ?worker_processes ?2; ??//開(kāi)啟的nginx進(jìn)程數(shù)量,通常是隨cpu的核心數(shù)一致
?????worker_connections ?50000; ??//每個(gè)nginx進(jìn)程支持的并發(fā)訪問(wèn)量
ulimit -n ????//查詢系統(tǒng)打開(kāi)文件數(shù)量的大小
ulimit -n 100000 ??//臨時(shí)定義文件可以同時(shí)被打開(kāi)的次數(shù)為10萬(wàn)
vim /etc/security/limits.conf ??//打開(kāi)配置文件實(shí)現(xiàn)永久修改
修改第53、54行
* ??????????????soft ???nofile ?????????100000
* ??????????????hard ???nofile ????????100000
解決集群主機(jī)過(guò)多而導(dǎo)致用戶重復(fù)登陸網(wǎng)站的問(wèn)題
然后在proxy主機(jī)配置集群,注意該主機(jī)不能有動(dòng)靜分離的配置
upstream web { ????//在默認(rèn)的虛擬主機(jī)上面添加集群
????????server 192.168.2.100:80;
????????server 192.168.2.200:80;
}
?location ?/ ?{
?????proxy_pass http://web; ?//然后在默認(rèn)的虛擬主機(jī)中的location里調(diào)用集群
?
sbin/nginx -s reload ?//重新加載配置文件
memcache??可以利用內(nèi)存讀寫(xiě)數(shù)據(jù)的數(shù)據(jù)庫(kù)服務(wù)? 端口?11211?
主機(jī)修改存儲(chǔ)session文件的位置
vim ?/etc/php-fpm.d/www.conf ??//到最后一頁(yè)
php_value[session.save_handler] = memcache ?//這里改成memcache,表示session
的存儲(chǔ)不在是本地的普通文件,而是去找memcache
php_value[session.save_path] = tcp://192.168.2.5:11211 ??//這里的路徑修改為
安裝了memcache服務(wù)的服務(wù)器地址與端口
yum -y install php-pecl-memcache ??//安裝php與memcached服務(wù)關(guān)聯(lián)的軟件包
systemctl restart php-fpm
tomcat
yum -y install java-1.8.0-openjdk ???//安裝java程序運(yùn)行環(huán)境包
?tomcat目錄:
bin??存放主程序
logs??存放日志
conf??配置文件
webapps ?存放網(wǎng)站頁(yè)面 ?
lib??存放庫(kù)文件
work??存放編譯后頁(yè)面文件
bin/startup.sh ??//開(kāi)啟服務(wù)
bin/shutdown.sh ????//然后重啟tomcat
檢查如果有8005、8009、8080端口則正常
由于tomcat服務(wù)開(kāi)啟時(shí)需要大量隨機(jī)字符,但系統(tǒng)中隨機(jī)字符
不夠多的話會(huì)導(dǎo)致tomcat服務(wù)啟動(dòng)失敗
解決方案1:
mv ?/dev/random ?/dev/random.bak ???//將random改名
ln ?-s ?/dev/urandom ?/dev/random ??//用urandom替換random
解決方案2:
yum -y ?install ?rng-tools
systemctl ?start ?rngd
?tomcat搭建虛擬主機(jī)
<Host ?name=域名 appBase=網(wǎng)站頁(yè)面位置 ?>
</Host>
?vim conf/server.xml ?//打開(kāi)配置文件在122行添加虛擬主機(jī)配置
<Host ?name="www.b.com" ?appBase="web_b"> ?????//這里順便把下面的默認(rèn)的
虛擬主機(jī)的name="localhost"改成 name="www.a.com"
</Host>
<Host name="www.b.com" appBase="web_b"
unpackWARs="true" autoDeploy="true"> ?????//添加unpackWARs自動(dòng)
解war包,和autoDeploy可以自動(dòng)更新開(kāi)發(fā)工程師編寫(xiě)的網(wǎng)站功能代碼
</Host>
tomcat訪問(wèn)路徑與頁(yè)面位置
Context??path??匹配用戶訪問(wèn)路徑 ?
docBase 定義頁(yè)面位置
?測(cè)試 1:
<Host name="www.b.com" appBase="web_b"
unpackWARs="true" autoDeploy="true">
<Context ?path="" ?docBase="" ?/> ???????
</Host>
?echo "web_b/ROOT/index.html" > web_b/ROOT/index.html ??//默認(rèn)頁(yè)面路徑
echo "web_b/index.html" > web_b/index.html ??//創(chuàng)建素材,定義新路徑
curl ?www.b.com:8080???//測(cè)試可以看到的是默認(rèn)的頁(yè)面路徑
web_b/ROOT/index.html
之后重啟tomcat
curl ?www.b.com:8080????//重啟后測(cè)試可以看到新路徑
web_b/index.html
?測(cè)試 2:
<Host name="www.b.com" appBase="web_b"
unpackWARs="true" autoDeploy="true">
<Context ?path="" ?docBase="abc" ?/> ??//修改成abc
</Host>
?mkdir ?web_b/abc ???//創(chuàng)建測(cè)試目錄
echo "web_b/abc/index.html" ?> ?web_b/abc/index.html ?//測(cè)試頁(yè)面
重啟tomcat
[root@proxy tomcat]# curl www.b.com:8080???//查看,見(jiàn)到新路徑
web_b/abc/index.html
?測(cè)試 3:
<Host name="www.b.com" appBase="web_b"
unpackWARs="true" autoDeploy="true">
<Context ?path="" ?docBase="/abc" ?/> ??//修改成/abc
</Host>
?mkdir ?/abc ?//創(chuàng)建測(cè)試目錄
echo ?"/abc/index.html" ?> /abc/index.html ???//創(chuàng)建測(cè)試文件
重啟tomcat
[root@proxy tomcat]# curl www.b.com:8080????//得到新路徑
/abc/index.html
?測(cè)試 4:
<Host name="www.b.com" appBase="web_b"
unpackWARs="true" autoDeploy="true">
<Context ?path="/test" ?docBase="/abc" ?/> ??//path后面添加內(nèi)容可以匹配
用戶訪問(wèn)路徑,當(dāng)用戶訪問(wèn)www.b.com:8080/test/時(shí),看到的是/abc的內(nèi)容,如果
訪問(wèn)www.b.com:8080就看到web_b/ROOT的內(nèi)容
</Host>
?重啟tomcat
[root@proxy tomcat]# curl www.b.com:8080/test/
/abc/index.html
[root@proxy tomcat]# curl www.b.com:8080
web_b/ROOT/index.html
?測(cè)試 5:
<Host name="www.b.com" appBase="web_b"
unpackWARs="true" autoDeploy="true">
<Context ?path="/test" ?docBase="abc" ?/> ????//將/abc改成abc
當(dāng)用戶訪問(wèn)www.b.com:8080/test/時(shí),可以看到web_b/abc里的內(nèi)容
當(dāng)用戶訪問(wèn)www.b.com:8080時(shí)就看到web_b/ROOT的內(nèi)容
重啟tomcat
[root@proxy tomcat]# curl www.b.com:8080/test/ ?
web_b/abc/index.html
[root@proxy tomcat]# curl www.b.com:8080
web_b/ROOT/index.html
給新創(chuàng)建的虛擬主機(jī)添加日志功能
vim conf/server.xml ??//修改配置文件,復(fù)制最后一頁(yè)默認(rèn)虛擬主機(jī)的日志配置
其中prefix是日志名稱,suffix是日志后綴名
<Host name="www.b.com" appBase="test01"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="abc" />
?????<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
???????????????prefix="www_b_com" suffix=".log"
???????????????pattern="%h %l %u %t "%r" %s %b" />
</Host>
使用tomcat搭建https網(wǎng)站
vim conf/server.xml ??//修改配置文件,打開(kāi)找到85行,將前后的注釋刪除 <!-- ??-->
????<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
???????????????maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
???????????????clientAuth="false" sslProtocol="TLS"
keystoreFile="/usr/local/tomcat/keystore"
keystorePass="123456"??/> ??//這里
添加keystoreFile(指定公鑰私鑰文件)和keystorePass(公鑰私鑰文件密碼)
?
keytool ?-genkeypair ?-alias ?tomcat ?-keyalg RSA ?
-keystore ?/usr/local/tomcat/keystore ?//創(chuàng)建密鑰對(duì),別名是tomcat,加
密算法是RSA,最后是存儲(chǔ)位置
輸入密鑰庫(kù)口令:?輸入123456
再次輸入新口令:?再次輸入123456
您的名字與姓氏是什么?
??[Unknown]: ?dc
。。。。。
CN=dc, OU=dc, O=dc, L=dc, ST=dc, C=dc是否正確?
??[否]: ?y
輸入 <tomcat> 的密鑰口令
????????(如果和密鑰庫(kù)口令相同, 按回車):???直接回車
Warning:
ls??//檢查下/usr/local/tomcat下面會(huì)產(chǎn)生keystore則成功
yum?-y install ?rpm-build ???//安裝制作rpm包的工具
[root@proxy ~]# rpmbuild ?-ba ?nginx.spec ?//制作rpm包,但是沒(méi)有配
置文件會(huì)報(bào)錯(cuò),報(bào)錯(cuò)也需要敲,會(huì)產(chǎn)生所需的目錄
[root@proxy ~]# ls????//可以看到一個(gè)rpmbuild目錄
[root@proxy ~]# cp ?~/lnmp_soft/nginx-1.17.6.tar.gz ?rpmbuild/SOURCES/ ?
//拷貝源碼包到rpmbuild的工作目錄
[root@proxy ~]# yum -y install ?gcc ?make ?pcre-devel ?openssl-devel
vim ?rpmbuild/SPECS/nginx.spec ?//編寫(xiě)將nginx轉(zhuǎn)換為rpm包的配置文件
Name:nginx ????//軟件名
Version:1.17.6 ???//版本
Release:1 ??????//發(fā)布的rpm包的版本
Summary:test~ ???//簡(jiǎn)單描述
#Group:
License:GPL ???//授權(quán)協(xié)議 ,GPL表示自由軟件
URL:www.abc.com ???//網(wǎng)址
Source0:nginx-1.17.6.tar.gz ????//源碼包
#BuildRequires: ??
#Requires:
%description ???//詳細(xì)描述
test~ test~
%post ?????//可以添加安裝rpm包之后執(zhí)行的命令,不是必須
useradd ?nginx
%prep
%setup -q
%build
./configure ?//配置,如果要添加選項(xiàng)或者模塊可以繼續(xù)寫(xiě)
make %{?_smp_mflags} ????//編譯
%install
make install DESTDIR=%{buildroot} ???//安裝
%files
%doc
/usr/local/nginx/* ????//將改路徑下文件打包成rpm
%changelog
rpmbuild ?-ba ?rpmbuild/SPECS/nginx.spec ?//根據(jù)上述文件制作rpm包
ls ?rpmbuild/RPMS/x86_64/nginx-1.17.6-1.x86_64.rpm ?//查看最終結(jié)果,
已經(jīng)產(chǎn)生nginx的rpm包則成功
?