擴充:
#在http{}中添加
include vhost/*.conf;
作用:将多個server配置檔案的資訊單獨存放,不過于集中在nginx.conf配置中,這樣有用助于故障排查
一、反向代理
正向代理:代理伺服器代替系統内部來通路外部網絡的過程(系統通路外網)
反向代理:外部請求通路系統時通過代理伺服器轉發到内部伺服器的過程(外網通路系統)
1、反向代理執行個體1
需求:
使用nginx反向代理,通路www.test.com直接跳轉到127.0.0.1:8080【tomcat首頁】
準備:
1)、安裝tomcat
cd /usr/local/
#下載下傳
wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.40/bin/apache-tomcat-9.0.40.tar.gz
#解壓
tar -zxvf apache-tomcat-9.0.40.tar.gz
#重命名
mv apache-tomcat-9.0.40 tomcat
2)、安裝java
#查找java相關清單
yum -y list java*
#安裝jdk
yum install java-1.8.0 -y
#檢視版本
java -version
3)、啟動tomcat
cd /usr/local/tomcat/bin/
./startup.sh
#檢視日志
cd /usr/local/tomcat/logs/
tail -f catalina.out
4)、對外開放8080端口
#增加端口
firewall-cmd --add-port=8080/tcp --permanent
#重新開機防火牆服務
firewall-cmd --reload
#檢視開放的端口号
firewall-cmd --list-all
5)、win下浏覽器裡通路tomcat頁面
配置:
1)、修改win本地host檔案,将www.test.com 映射到192.168.157.10
#打開檔案
C:\Windows\System32\drivers\etc\hosts
#hosts檔案内增加
192.168.157.10 www.test.com
2)、配置nginx
vim /usr/local/nginx/conf/vhost/demo1.conf
server {
listen 80;
server_name 192.168.157.10;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#重新開機nginx服務,讓配置生效
nginx -s reload
效果:
2、反向代理執行個體2
需求:
根據通路路徑跳轉到不同端口的服務中。nginx監聽端口為9001,通路http://127.0.0.1:9100/aa 跳轉到8080端口;通路http://127.0.0.1:9100/bb 跳轉到8081端口
準備:
1)、重複執行個體1 并把端口改為8081
vim /usr/local/tomcat8081/conf/server.xml
#更改的内容
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
2)、建立測試頁面
cd /usr/local/tomcat/webapps/
mkdir aa
vim index.html
#内容
<h1>8080</h1>
cd /usr/local/tomcat8081/webapps/
mkdir bb
vim index.html
#内容
<h1>8081</h1>
3)、開放9001、8080、8081端口号
#增加端口
firewall-cmd --add-port=9001/tcp --permanent
firewall-cmd --add-port=8081/tcp --permanen
#重新開機防火牆服務
firewall-cmd --reload
#檢視開放的端口号
firewall-cmd --list-all
配置:
vim /usr/local/nginx/conf/vhost/demo2.conf
server {
listen 9001;
server_name 192.168.157.10;
location ~ /aa/ {
proxy_pass http://127.0.0.1:8081;
}
location ~ /bb/ {
proxy_pass http://127.0.0.1:8080;
}
}
效果:
擴充:
location指令說明
文法:location [=|~|~*|^~] /uri/ {}
- = 表示精确比對
- ^~ 表示uri以某個正常字元串開頭,了解為比對url路徑即可
- ~ 表示區分大小寫的正則比對
- ~* 表示不區分大小寫的正則比對
- / 通用比對,任何請求都會比對到
二、負載均衡
負載均衡:通過某些方式把請求均勻分發到多個節點上,使系統中每個節點能夠均勻的處理請求負載
需求:
在浏覽器中輸入一個位址,負載均衡效果,平均到8080和8081端口中
準備:
1)、準備兩台tomcat伺服器,一台8080,一台8081。參考反向代理執行個體
2)、在兩台tomcat--webapps目錄中,建立名稱為demo3檔案夾和index.html頁面用于測試
配置:
vim /usr/local/nginx/conf/vhost/demo3.conf
upstream myserver{
server 192.168.157.10:8080;
server 192.168.157.10:8081;
}
server {
listen 80;
server_name 192.168.157.10;
location / {
proxy_pass http://myserver;
root html;
index index.html index.htm;
}
}
效果:
擴充:
nginx配置設定伺服器政策
1)、輪詢【預設】
每個請求按時間順序逐一配置設定到不同的後端伺服器,如果後端伺服器down掉,能自動剔除
2)、weight
指定輪詢機率,weight和通路比率成正比,用于後端伺服器性能不均的情況。權重越高配置設定的用戶端越多。例:
upstream myserver{
server 192.168.157.10:8080 weight=5;
server 192.168.157.10:8081 weight=10;
}
3)、ip_hash
每個請求按通路ip的hash結果配置設定,這樣每個訪客固定通路一個後端伺服器,可以解決session問題。例:
upstream myserver{
ip_hash;
server 192.168.157.10:8080;
server 192.168.157.10:8081;
}
4)、fair(第三方)
按後端伺服器的響應時間來配置設定請求,響應時間短的優先配置設定。例:
upstream myserver{
server 192.168.157.10:8080;
server 192.168.157.10:8081;
fair;
}
三、動靜分離
動靜分離:把動态資源和靜态資源部署到不同的伺服器上
準備:
1)、建立靜态資源
cd /var/www
mkdir html.demo4.ga
cd html.demo4.ga/
mkdir html
mkdir image
vim html/index.html
<h1>test html</h1>
在images裡上傳個圖檔
配置:
為了防止80端口重複,我這裡就用的域名。然後在win下的host裡添加 192.168.157.10 html.demo4.ga
vim /usr/local/nginx/conf/vhost/demo4.conf
server {
listen 80;
server_name html.demo4.ga;
location /html/ {
root /var/www/html.demo4.ga/;
index index.html index.htm;
}
location /image/ {
root /var/www/html.demo4.ga/;
autoindex on;
}
}
效果:
四、配置高可用的叢集
高可用:系統中部分節點失效時,其它節點能夠接替它繼續提供服務
叢集:一個特定領域的軟體部署在多台伺服器上并作為一個整體提供一類服務
需求:
主nginx挂掉後,備nginx開始提供服務,不影響通路
準備:
1)、準備兩台伺服器(master10,master15)
2)、安裝nginx、keepalived
#安裝keepalived
yum install keepalived -y
#檢視版本
rpm -q -a keepalived
#安裝位置
/etc/keepalived/
配置:
配置keepalived,這裡隻展示了一個主機的配置
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.157.10 #192.168.157.15
smtp_connect_timeout 30
router_id LVS_DEVEL #通路到主機
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # (檢測腳本執行的間隔)
weight 2 #權重
}
vrrp_instance VI_1 {
state MASTER #備份 伺服器上将 MASTER 改為 BACKUP
interface ens33 #網卡
virtual_router_id 51 #主、備機的 virtual_router_id 必須相同
priority 120 #主、備機取不同的優先級,主機值較大,備份機值較小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual _ipaddress {
192.168.157.100 #虛拟位址
}
}
檢測nginx腳本
vim /usr/local/src/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
啟動nginx、keepalived
#啟動nginx
nginx
#啟動keepalived
systemctl start keepalived.service
效果:
當master10停掉服務後也可以檢視