您好,登錄后才能下訂單哦!
一、定義
Nginx是一個反向代理服務器,所謂反向代理服務器就是當客戶端要請求服務器時,在他們之間加一個代理服務器,當客戶端請求時,先請求代理服務器,代理服務器通過防火墻連接到服務器
代理服務器介于客戶端與服務器之間,相當于一個中間人或中介人
下圖為關系圖:
用戶A始終認為它訪問的是原始服務器B而不是代理服務器Z,但實際上反向代理服務器接受用戶A的應答,
從原始資源服務器B中取得用戶A的需求資源,然后發送給用戶A。由于防火墻的作用,只允許代理服務器Z訪問原始資源服務器B。盡管在這個虛擬的環境下,防火墻和反向代理的共同作用保護了原始資源服務器B,但用戶A并不知情。
簡單的說:
正向代理:客戶端知道服務器端,通過代理端連接服務器端。代理端代理的是服務器端。
反向代理:所謂反向,是對正向而言的。服務器端知道客戶端,客戶端不知道服務器端,通過代理端連接服務器端。代理端代理的是客戶端。代理對象剛好相反,所以叫反向代理。
二、簡單使用Nginx
Nginx的安裝步驟我就不寫了,在我的另一篇博客中有提交,這篇簡單介紹使用
服務器A
代理服務器B
首先要開啟、關閉防火墻:
Ubuntu:sudo ufw enable | disable
沒安裝的:
sudo apt-get install ufw
在服務器A中開啟防火墻,禁用除了代理服務器B之外的所有訪問
在代理服務器B上安裝Nginx,修改nginx.conf配置文件:
在http層下添加:
upstream server1 {
server 192.168.0.134:8080; # 被代理的服務器地址
}
server層修改:
location / {
proxy_pass http://server1;
}
修改完成之后,重啟nginx
瀏覽器中輸入:http://代理服務器IP:端口/ 進行訪問,會自動訪問到http://192.168.0.134:8080 處
負載均衡配置:
upstream server1 {
server 192.168.0.134:8080; # 被代理的服務器地址
server 192.168.0.125:8081; # 被代理的服務器地址
}
當其中一個宕機之后,會連接其中到另一個地址
三、nginx的進程模式
nginx啟動后,會在Unix系統中以后臺的方式運行,后臺進程包括一個master進程和多個worker進程,當然你也可以手動的調整為前臺運行,但nginx默認支持的是多進程模式運行,同時也支持多線程模式運行
上面說到nginx啟動后有一個master進程和多個worker進程,master進程是用來管理worker進程的,當有來自外界的請求時,發放給各個worker,監控worker的狀態,當一個worker宕機之后,會重新啟動一個新的worker進程,每個worker之間是對等的,與請求之間的關系也是一對一的,nginx進程模型如下:
要操作nginx讓它從容的重啟,發送./nginx -s reload命令,當master進程接收到此命令之后,它會取加載配置文件,建立新的worker進程,并發送信號給老的worker進程,告訴他們可以退出了,當新worker進程啟動成功開始接收請求時,老worker處理完當前所有的請求之后就退出,這樣就可以讓服務不中斷的進行重新啟動了
worker處理請求的方式:
先讓master建立好需要listen的socket之后,再讓master進程fork多個worker進程,所有worker進程的listenfd會在新連接到來時變得可讀,為保證只有一個進程處理該連接,所有worker進程在注冊listenfd讀事件前搶accept_mutex,搶到互斥鎖的那個進程注冊listenfd讀事件,在讀事件里調用accept接受該連接。當一個worker進程在accept這個連接之后,就開始讀取請求,解析請求,處理請求,產生數據后,再返回給客戶端,最后才斷開連接,這樣一個完整的請求就是這樣的了。我們可以看到,一個請求,完全由worker進程來處理,而且只在一個worker進程中處理
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。