-
Nginx是什麼?
Ngnix是高性能的HTTP和反向代理服務器,處理高併發能力是十分強大的,能經受高負載的考驗,有報告表明能支持高達50000個併發連接數 -
Nginx的內容:
正向代理:需要在客戶端配置代理服務器進行指定網站的訪問
反向代理:暴露的是代理服務器的地址,隱藏了正式服務器的IP地址
負載均衡:增加了服務器的數量,然後將請求分發到各臺服務器上,將原先請求集中到的單個服務器上的情況改爲將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們所說的負載均衡
動靜分離:可以將靜態資源的請求和動態資源的請求分別轉發處理 -
Nginx的常用命令:
#查看Nginx版本號
nginx -v
#啓動Nginx
nginx
#停止Nginx
nginx -s stop
#重新加載Nginx
nginx -s reload
-
Nginx的配置文件:
配置文件位置爲:/usr/local/nginx/conf/nginx.conf
配置文件的內容:
(1)全局塊:配置服務器整體運行的配置命令,比如worker_process 4,處理併發數爲4
(2)events塊:影響Nginx服務器與用戶的網絡連接,比如worker_connections 1024,支持的最大連接數爲1024
(3)http塊:這裏還包括兩個部分,http全局塊和server塊 -
Nginx配置反向代理:
#1、假設Nginx服務器IP地址爲192.168.27.220,Nginx監聽端口9001,
#然後將請求反向代理轉發到本地Tomcat(127.0.0.1:8080)。效果就是瀏覽器訪問
#http://192.168.27.220:9001,Nginx會將請求轉發到本地8080端口的服務,
#即實際訪問到的是http://192.168.27.220:8080
server {
#Nginx的當前server監聽9001端口
listen: 9001;
#Nginx的server_name爲本機的IP地址
server_name: 192.168.27.220
location / {
#location裏面配置反向代理的服務器地址
proxy_pass http://127.0.0.1:8080;
#location其他配置
root html;
index index.html index.htm;
}
}
#2、Nginx實現根據不同的路徑,轉發請求到不同的服務器:
#訪問http://192.168.27.220:9001/html/,直接跳轉到127.0.0.1:8080
#訪問http://192.168.27.220:9001/css/,直接跳轉到127.0.0.1:8081
#訪問http://192.168.27.220:9001/js/,直接跳轉到127.0.0.1:8082
#訪問http://192.168.27.220:9001/image/,直接跳轉到127.0.0.1:8083
server {
#Nginx的當前server監聽9001端口
listen 9001;
#Nginx的server_name爲本機的IP地址
server_name 192.168.27.220;
#html路徑下的請求發送到8080端口的Tomcat服務器
location ~ /html/ {
proxy_pass http://127.0.0.1:8080;
}
#css路徑下的請求發送到8081端口的Tomcat服務器
location ~ /css/ {
proxy_pass http://127.0.0.1:8081;
}
#js路徑下的請求發送到8082端口的Tomcat服務器
location ~ /js/ {
proxy_pass http://127.0.0.1:8082;
}
#image路徑下的請求發送到8083端口的Tomcat服務器
location ~ /image/ {
proxy_pass http://127.0.0.1:8083;
}
}
- Nginx配置負載均衡
#1、訪問http://192.168.27.220/html/a.html,將請求負載均衡到本地8080端口Tomcat和本地8081Tomcat兩個服務中
#用戶自定義負載均衡服務器列表,myserver是自定義名字
upstream myserver {
#一共有兩臺服務器進行負載均衡,下面是服務器列表
server 192.168.27.220:8080;
server 192.168.27.220:8081;
}
server {
#Nginx的當前server監聽80端口(http訪問不用輸入端口號)
listen 80;
#Nginx的server_name爲本機的IP地址
server_name: 192.168.27.220;
location / {
#將請求反向代理到用戶自命名的myserver負載均衡服務器列表中
proxy_pass http://myserver;
#location其他配置
root html;
index index.html index.htm;
}
}
7、負載均衡服務器分配策略
#1、輪詢(Nginx默認),每個請求按時間順序逐一分配到不同的後端服務器,
#如果服務器宕機,能自動剔除
upstream myserver {
#這兩個服務器輪流被分配請求:12121212……
server 192.168.27.220:8080;
server 192.168.27.220:8081;
}
#2、weight,代表權重值,默認爲1,權重越高則被分配的客戶端就會正比增多
upstream myserver {
#30%的請求由下面的8080服務器處理
server 192.168.27.220:8080 weight=3;
#70%的請求由下的的8081服務器處理
server 192.168.27.220:8081 weight=7;
}
#3、ip_hash:每個請求按照訪問ip的hash結果分配,這樣每一個訪客就可以
#固定訪問一個後端服務器,你這臺設備一直都是由同一個服務器處理
upstream myserver {
#以下兩個服務,由訪客ip的hash值決定誰來負載
ip_hash;
server 192.168.27.220:8080;
server 192.168.27.220:8081;
}
#4、fair(第三方),按後端服務器的響應時間來分配請求,響應時間短的優先分配
upstream myserver {
#以下兩個服務,響應時間短的優先分配
fair;
server 192.168.27.220:8080;
server 192.168.27.220:8081;
}
#5、負載均衡的其他設置
upstream myserver {
#正常參與負載均衡的服務器
server 192.168.27.220:8080;
#後面加了down,表示該服務器不參與負載均衡
server 192.168.27.220:8081 down;
#該服務器允許請求失敗的次數爲3,經歷了3次請求失敗後,暫停服務20秒
server 192.168.27.220:8082 max_fails=3 fail_timeout=20s;
}
8、Nginx配置動靜分離
#在Linux中,/data/front/www/目錄下放着html文件,/data/static/image/目錄下放着圖片文件,
#Linux服務器IP爲192.168.27.220,Nginx監聽80端口。現在需要實現:
#1、訪問http://192.168.27.220/www/a.html,訪問到/data/front/www/a.html文件
#2、訪問http://192.168.27.220/image/1.jpg,訪問到/data/static/image/1.jpg文件
server {
#Nginx的當前server監聽80端口(http訪問不用輸入端口號)
listen 80;
#Nginx的server_name爲本機的IP地址
server_name: 192.168.27.220;
#http://……/www/xxx.html的url,訪問/data/front/www/xxx.html
location /www/ {
root /data/front/;
#其他的location配置
index index.html index.htm;
}
#http://……/image/xxx.jpg的utl,訪問/data/static/image/xxx.jpg
location /image/ {
root /data/static/;
#配置開啓autoindex爲on,則瀏覽器訪問文件夾會有文件列表
autoindex on;
}
}
- Nginx的一些底層原理
(1)分爲master和worker,master負責分配進來的請求,worker負責接收master的請求並進行相關操作
(2)master監控和管理請求,有請求進來,master通知worker,worker爭搶請求並處理
(3)一個master多個worker:可以使用命令 nginx -s reload 熱部署,利用Nginx進行熱部署操作。且每個worker都是獨立的進程,如果有其中的一個worker出現問題,其他worker都是獨立的,會繼續進行爭搶,實現請求的過程,不會造成服務的中斷
(4)設置多少個worker合適:worker數和服務器的CPU數相等是最爲適宜的
(5)連接數worker_connection:發送請求,佔用了worker的2個或者4個連接數
(6)Nginx有一個master,有4個worker,每個worker支持最大的連接數1024,支持的最大併發數是:普通的靜態訪問最大併發數是:worker_connections * worker_processes / 2;而如果是http作爲反向代理來說,最大併發數量應該是worker_connections * worker_processes / 4
10、Nginx學習資源:https://www.bilibili.com/video/av68136734