1. 程式人生 > >Nginx簡單使用與詳解

Nginx簡單使用與詳解

nginx

一、定義

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進程中處理

本文出自 “項以奇的博客” 博客,請務必保留此出處http://12854546.blog.51cto.com/12844546/1929724

Nginx簡單使用與詳解