最近在騰訊雲租了個小霸王服務器,本來想把自己寫的博客傳上去,奈何我太菜搞不了,所以爲了不讓服務器發黴 ,正好學一下Nginx
一、簡介
1、反向代理
(1)正向代理
在客戶端(瀏覽器)配置代理服務器,通過代理服務器進行互聯網訪問。
(2)反向代理
2、負載均衡
(1)單一服務器
缺點:隨着信息增長、訪問量和數據量的提升以及系統業務的複雜度增加,會造成服務器響應客戶端的請求緩慢,併發量大時可能會造成服務器直接崩潰
(2)負載均衡
增加服務器的數量,將請求分發到各個服務器上,將原來請求集中到單個服務器上的情況改爲分發到多個服務器上,將負載分發到不同的服務器
3、動靜分離
二、Nginx的常用命令
使用nginx操作命令前提條件:必須進入nginx的目錄中==(/usr/local/nginx/sbin)==
命令:
-
查看nginx版本號
./nginx -v -
啓動nginx
./nginx -
關閉nginx
./nginx -s stop -
重新加載nginx
./nginx -s reload
修改nginx.conf文件後,需要重新加載nginx,配置文件纔會生效
三、Nginx的配置文件
1、配置文件位置:/usr/local/nginx/conf/nginx.conf
2、nginx配置文件組成
#去掉註釋的精簡版本,原版中有許多註釋
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx配置文件由三部分組成
-
第一部分:全局塊
從配置文件開始到events塊之間的內容,主要會設置一些影響nginx服務器真題運行的配置指令,主要包括配置運行Nginx服務器的用戶(組)、允許生成的worker process數、進程PID存放路徑、日誌存放路徑和類型以及配置文件的引入等,大部分默認被註釋掉
#這是Nginx服務器併發處理服務的關鍵,worker process的值越大,可以支持的併發數量也越多,但是會受到硬件、軟件等設備的制約
worker_processes 1;
-
第二部分:events塊
涉及的指令主要影響Nginx服務器與用戶的網絡連接,常用的設置包括是否開啓對多worker press下的網絡連接進行序列化,是否允許同時接受多個網絡連接,選取哪種事件驅動模型來處理連接請求,每個worker press可以同時支持的最大連接數等
這部分配置對Nginx的性能影響較大,應根據不同情況採取不同配置
#這個例子表示每個worker press支持的最大連接數爲1024
events {
worker_connections 1024;
}
-
第三部分:HTTP塊
這算是Nginx服務器配置中最頻繁的部分,代理、緩存和日誌定義等絕大多數功能和第三方模塊的配置都在這裏
需要注意:http塊也可以包括http全局塊、server塊
①http全局塊
http全局塊配置的指令包括文件引入、MIME-TYPE的定義、日誌自定義、連接超時時間、單鏈接請求數上限等
②server塊
這塊和虛擬主機有密切關係每個http塊可以包括多個server塊,每個server塊相當於一個虛擬主機
每個server塊也可以分爲全局server塊,以及可以同時包含多個的location塊
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80; #監聽端口號
server_name localhost; #主機名稱
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
四、配置反向代理
實例一
實現效果:代開瀏覽器,在地址欄中輸入www.123.com,跳轉到Linux系統tomcat主頁面
1、準備工作
(1)安裝tomcat,使用默認端口8080
(2)對外開放訪問端口
firewall-cmd --add-port=8080/tcp --permanent
重新加載防火牆設置
firewall-cmd -reload
查看已經開放的端口號
firewall-cmd --list-all
(3)地址欄輸入 ip地址:8080 測試是否能進入tomcat主頁
訪問過程分析:
2、具體配置
-
在Windows系統的host文件進行域名和ip對應關係的配置(不要問我爲什麼是Windows,因爲我買不起別的系統的電腦)
在host文件中添加一行:ip地址 域名
例如:129.204.18.121 www.123.com -
在nginx進行請求轉發的配置(反向代理配置)
注:進入之後按先按a,之後才能進行編輯,退出時先按esc,之後使用 :wq 命令保存並退出 -
最終測試
啓動nginx,輸出www.123.com,正常情況下跳轉到tomcat主頁面
實例二
實現效果:使用nginx反向代理,根據訪問的路徑跳轉到不同端口的服務中
nginx監聽端口爲9001
訪問http://129.204.18.121:9001/edu/直接跳轉到127.0.0.1:8080
訪問http://129.204.18.121:9001/vod/直接跳轉到127.0.0.1:8081
1、準備工作
-
準備兩個tomcat服務器,端口爲8080、8081
在端口爲8081的tomcat中修改默認端口爲8081 -
創建文件夾和測試頁面
8080同理
2、具體配置
-
找到nginx的配置文件,在裏面進行反向代理的配置
注:修改完配置文件不要忘記重啓或者重新加載nginx服務器 -
開放對外端口號9001,8080,8081
-
最終測試
location指令說明
注:如果uri包含正則表達式,則必須要有
五、配置負載均衡
實現效果:
(1)瀏覽器地址欄輸入地址http://129.204.18.121/due/a.html,將請求平均分配到8080和8081端口,負載均衡效果
1、準備工作
(1)準備兩臺tomcat服務器,一臺8080,一臺8081
(2)在兩臺tomcat裏面的webapps目錄中,創建名稱是edu文件夾,在edu文件夾中創建頁面a.html,用於測試
2、具體配置
-
在nginx.conf配置文件中進行修改
-
重啓nginx
-
最終測試
將我們的請求平均分配到了每個頁面
注:第一次進入時,隨機進入這兩個頁面中的一個,之後每次刷新都會進入另一個頁面
3、Nginx中的負載均衡分配方式(策略)
- 輪詢(默認配置)
每次請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除 - weight
weight代表權重,默認爲1,權重越高分配的客戶越多
- ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題(比如保存到session的用戶名密碼)
如果你第一次訪問到8080,那麼以後都會訪問8080,8081同
- fair(第三方)
按照後端服務器的響應時間來分配請求,響應時間短的優先分配
六、配置動靜分離
1、準備工作
在Linux系統中準備靜態資源,用於進行訪問
在www放一個html頁面,在image中放一張圖片
2、具體配置
-
在nginx.conf文件中進行配置
-
重啓nginx
-
最終測試
七、配置高可用的集羣
1、什麼是Nginx的高可用
問題:nginx服務器宕機導致請求無法轉發
高可用:準備兩個nginx服務器,當主服務器宕機時,切換到備份nginx服務器作爲主服務器繼續工作。還需要對外設置一個虛擬ip,同時將虛擬ip綁定到兩臺nginx服務器中,通過keepalived進行檢測,訪問時都是通過虛擬ip進行訪問
keepalived:相當於一個路由,裏面會有腳本檢測當前nginx服務器是否還活着,如果活着就進行訪問,如果宕機了就切換到備份服務器
2、配置高可用的準備工作
(1)需要兩個nginx服務器
(2)在兩臺服務器上安裝keepalived,可使用yum命令進行安裝
yum install keepalived -y
3、配置高可用
- 修改主服務器和備份服務器的keepalived.conf配置文件
#全局配置
global_defs {
notification_email { #指定keepalived在發生切換時需要發送email到的對象,一行一個
[email protected]
}
notification_email_from [email protected] #指定發件人
#smtp_server XXX.smtp.com #指定smtp服務器地址
#smtp_connect_timeout 30 #指定smtp連接超時時間
router_id LVS_DEVEL #運行keepalived機器的一個標識
}
vrrp_script check_nginx {
script "/usr/local/src/nginx_check.sh" ##監控腳本,需要自己配置
interval 2 ##檢測腳本執行的時間間隔,2秒
weight 2 ##權重+2,腳本執行成功後,使備份服務器權重大於主服務器權重
}
vrrp_instance VI_1 {
state MASTER #標示狀態 主機爲爲MASTER 備份機爲BACKUP
interface docker0 #設置實例綁定的網卡
virtual_router_id 51 #同一實例下virtual_router_id必須相同
priority 100 #優先級,MASTER權重要高於BACKUP 比如BACKUP爲99
advert_int 1 #MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
authentication { #設置認證
auth_type PASS #主從服務器驗證方式
auth_pass 8888
}
track_script {
check_nginx #監控腳本
}
virtual_ipaddress { #設置vip
192.168.17.50 #可以多個虛擬IP,換行即可
}
}
- 在/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 # 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 -
最終測試
(1)瀏覽器地址欄輸入虛擬ip地址 192.168.17.50 進行訪問
(2)把主服務器的nginx和keepalived停止,再輸入虛擬ip地址 192.168.17.50 進行訪問
停止keepalived:stop keepalived.service