Nginx负载均衡请求转发
目錄
一、Nginx相關概念
1.1、Nginx概述
1.2、正向代理
1.3、反向代理
1.4、負載均衡
1.5、動靜分離
二、Linux中Nginx安裝
2.1、安裝Nginx
2.2、防火墻設置
2.3、添加端口
2.4、重啟防火墻
三、Nginx常用命令
3.1、Linux中常用命令
3.2、windows中常用命令
四、Nginx請求轉發配置
4.1、如果你的后臺是多個服務,有課程管理服務、文件上傳服務,前端請求地址更換為nginx的地址
4.2、打開nginx配置文件nginx.cong,添加如下配置
4.3、總結:
五、負載均衡
5.1、負載均衡概念
1、輪詢(默認)
2、weight
3、ip hash
4、fair(第三方)
5.2、nginx.config配置開始
1、打開nginx.conf配置文件、添加集群配置,這是兩臺服務器地址
2、監聽端口8888,前端請求的地址為nginx的地址和端口:127.0.0.1:8888
3、總結:
六、Nginx配置文件
6.1、全局塊
6.2、events塊
6.3、http塊?
server塊
location 塊
七、Nginx原理
7.1、Nginx底層的流程
7.2、當master接收到重新加載的信號會怎么處理(./nginx -s reload)
7.3、worker進程是如何處理用戶的請求呢?
八、問題
8.1、前端上傳文件出現問題 413 Request Entity Too Large
一、Nginx相關概念
1.1、Nginx概述
Nginx 是一個高性能的HTTP和反向代理web服務器,特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好。
Nginx專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率﹐能經受高負載的考驗,有報告表明能支持高達50,000個并發連接數。
1.2、正向代理
正向代理:如果把局域網外的 Internet想象成一個巨大的資源庫,則局域網中的客戶端要訪問Internet,則需要通過代理服務器來訪問,這種代理服務就稱為正向代理。
在客戶端(瀏覽器)配置代理服務器,通過代理服務器進行互聯網訪問。
1.3、反向代理
反向代理,其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據后,在返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器IP地址。
1.4、負載均衡
單個服務器解決不了,我們增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們所說的負載均衡。
1.5、動靜分離
為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的服務器來解析,加快解析速度。降低原來單個服務器的壓力。
二、Linux中Nginx安裝
2.1、安裝Nginx
nginx有兩種安裝方式的,我們選擇一種安裝方式
1、解壓縮nginx-1.18.0.tar.gz包
? ? ? 解壓命令:tar –zxvf nginx-1.18.0.tar.gz
2、進入解壓縮目錄,執行./configure
3、make && make install
安裝完成之后在/usr/local 下面會生成nginx文件夾
4、安裝完畢啟動nginx
? ? 進入/usr/local/nginx/sbin? ? ? ?輸入? ? ? ./nginx? ?便可啟動
2.2、防火墻設置
啟動了nginx,瀏覽器輸入ip:80沒訪問到
查看防火墻中開放的端口,使用命令:firewall-cmd --list-all
nginx監聽端口80
2.3、添加端口
? ? 命令:firewall-cmd --zone=public --add-port=80/tcp --permanent
2.4、重啟防火墻
? ?命令:firewall-cmd --reload
再次訪問192.168.0.104,成功訪問,因為端口是80,可以不寫。
?
三、Nginx常用命令
3.1、Linux中常用命令
使用Nginx操作命令前提是必須進入nginx的目錄 /usr/local/nginx/sbin
查看ngixn版本號:./nginx -v
啟動nginx? ?????./nginx
關閉nginx? ?????./nginx -s stop
安全退出??? ????./nginx -s quit
重新加載nginx?? ./nginx -s reload
查看啟動進程
ps –ef|grep nginx?
ps -aux|grep nginx
3.2、windows中常用命令
打開nginx路徑輸入cmd,所有的操作都在里面操作
1、啟動nginx:nginx.exe
2、停止nginx:nginx.exe -s stop 或者 ? nginx.exe -s quit?
注:stop是快速停止nginx,可能并不保存相關信息;quit是完整有序的停止nginx,并保存相關信息。
?3、重啟nginx:nginx.exe -s reload
?4、查看Nginx版本:nginx -v
四、Nginx請求轉發配置
4.1、如果你的后臺是多個服務,有課程管理服務、文件上傳服務,前端請求地址更換為nginx的地址
4.2、打開nginx配置文件nginx.cong,添加如下配置
4.3、總結:
配置了兩個location,一個是eduservice 一個是eduoss ,這兩個是后端接口訪問地址,如果前端請求的路徑包含eduservice,他就會把請求轉發到?http://localhost:8001?服務上
如果前端請求的路徑中包含eduoss,會把請求轉發到?http://localhost:8002服務上
五、負載均衡
5.1、負載均衡概念
隨著互聯網信息的爆炸性增長,負載均衡(load balance)已經不再是一個很陌生的話題,顧名思義,負載均衡即是將負載分攤到不同的服務單元,既保證服務的可用性,又保證響應足夠快,給用戶很好的體驗。快速增長的訪問量和數據流量催生了各式各樣的負載均衡產品,很多專業的負載均衡硬件提供了很好的功能,但卻價格不菲,這使得負載均衡軟件大受歡迎,nginx.就是其中的一個,在linux.下有Nginx、LVS、Haproxy.等等服務可以提供負載均衡服務,而且 Nginx,提供了幾種分配方式(策略):
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
2、weight
weight:代表權,重默認為1,權重越高被分配的客戶端越多
3、ip hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。例如:
4、fair(第三方)
按后端服務器的響應時間來分配請求,響應時間短的優先分配。
5.2、nginx.config配置開始
1、打開nginx.conf配置文件、添加集群配置,這是兩臺服務器地址
upstream card-rest-server{
? ? ? ? server 12.33.22.147:8080;
? ? ? ? ?server 12.33.22.144:8080;
keepalive 200; }
2、監聽端口8888,前端請求的地址為nginx的地址和端口:127.0.0.1:8888
server {
listen 8888;
? ? ? ? server_name 127.0.0.1;
? ? ? ? charset utf-8;
? ? ? ? location ^~/dynamic/ {
? ? ? ? ? ? ? ?proxy_pass http://card-rest-server;
? ? ? ?}
? ? ? error_page 500 502 503 504 /50x.html;
? ? ? location = /50x.html {
? ? ? ? ? ? root html;
? ? ? ?}
}
3、總結:
六、Nginx配置文件
nginx配置文件有三部分組成
6.1、全局塊
從配置文件開始到 events 塊之間的內容,主要會設置一些影響nginx 服務器整體運行的配置指令,主要包括配置運行Nginx服務器的用戶(組)、允許生成的worker process 數,進程PID存放路徑、日志存放路徑和類型以及配置文件的引入等。
worker_processes? 1;
這是Nginx服務器并發處理服務的關鍵配置,worker_processes值越大,可以支持的并發處理量也越多,但是會受到硬件、軟件等設備的制約。
6.2、events塊
events 模塊涉及的指令主要影響Nginx服務器與用戶的網絡連接,常用的設置包括是否開啟對多 work process下的網絡連接進行序列化,是否允許同時接收多個網絡連接,選取哪種事件驅動模型來處理連接請求,每個 wordprocess可以同時支持的最大連接數等。
上述例子就表示每個work process支持的最大連接數為1024.
這部分的配置對Nginx的性能影響較大,在實際中應該靈活配置。
6.3、http塊?
這算是Nginx服務器配置中最頻繁的部分,代理、緩存和日志定義等絕大多數功能和第三方模塊的配置都在這里
server塊
http塊可以有多個server塊,每個server 塊可以同時包含多個 locaton塊。
location 塊
這塊的主要作用是基于Nginx服務器接收到的請求字符串(例如server_name/uri-string ),對虛擬主機名稱(也可以是IP別名)之外的字符串(例如前面的/uri-string)進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。
總體配置如:
七、Nginx原理
7.1、Nginx底層的流程
? ? ? 在nginx啟動后,會有一個master進程和多個worker進程,master進程主要用來管理worker進程,包括:接受信號,將信號分發給worker進程,監聽worker進程工作狀態,當worker進程退出時(非正常),啟動新的worker進程。基本的網絡事件會交給worker進程處理。多個worker進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的?。一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。?worker進程的個數是可以設置的,一般我們會設置與機器cpu核數一致,這里面的原因與nginx的進程模型以及事件處理模型是分不開的?。
7.2、當master接收到重新加載的信號會怎么處理(./nginx -s reload)
? ? ? master會重新加載配置文件,然后啟動新的進程,使用的新的worker進程來接受請求,并告訴老的worker進程他們可以退休了,老的worker進程將不會接受新的,老的worker進程處理完手中正在處理的請求就會退出。
7.3、worker進程是如何處理用戶的請求呢?
? ? ? 首先master會根據配置文件生成一個監聽相應端口的socket,然后再faster出多個worker進程,這樣每個worker就可以接受從socket過來的消息(其實這個時候應該是每一個worker都有一個socket,只是這些socket監聽的地址是一樣的)。當一個連接過來的時候,每一個worker都能接收到通知,但是只有一個worker能和這個連接建立關系,其他的worker都會連接失敗,這就是所謂的驚群現在,為了解決這個問題,nginx提供一個共享鎖accept_mutex,有了這個共享鎖后,就會只有一個worker去接收這個連接。當一個worker進程在accept這個連接之后,就開始讀取請求,解析請求,處理請求,產生數據后,再返回給客戶端,最后才斷開連接,這樣一個完整的請求就是這樣的了。
八、問題
8.1、前端上傳文件出現問題 413 Request Entity Too Large
如果你前端請求的是nginx代理地址,Nginx默認的request body為1M
解決方案
打開nginx的配置文件nginx.conf,加入 client_max_body_size 100m,然后重啟nginx
總結
以上是生活随笔為你收集整理的Nginx负载均衡请求转发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery 版坦克大战游戏
- 下一篇: Gluon新机器学习库,学习库中的富二代