目錄
1 大概思路... 1
2 了解Nginx及文檔資源... 1
3 Nginx命令模塊及進程結構... 2
4 解讀Nginx配置... 3
5 讓“百度”成為自己的“搬運工”. 5
6 服務器負載均衡集群... 7
7 域名解析實現負載均衡... 8
8 總結... 10
1 大概思路
l 了解Nginx及文檔資源
l Nginx命令模塊及進程結構
l 解讀Nginx配置
l 讓“百度”成為自己的“搬運工”
l 服務器負載均衡集群
l 域名解析實現負載均衡
l 總結
2 了解Nginx及文檔資源
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特點是占有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
中文文檔官網:
中文文檔官網上,擁有了一些示例:
安裝
配置示例和方法
X-Sendfile (=> X-Accel-Redirect) in Nginx
Disable the errorlog entries caused by the HW-Loadbalancer
3 Nginx命令模塊及進程結構
基本命令
| 命令 |
描述 |
| nginx –s stop |
立即停止守護進程(使用TERM信號) |
| nginx –s quit |
溫和地停止守護進程(使用QUIT信號) |
| nginx –s reopen |
重新打開日志文件 |
| nginx –s reload |
重新載入配置文件 |
| nginx -t |
測試配置文件 |
| kill/killall nginx |
配置服務無法停止,可用該命令終止該進程 |
高級的配置,一般有5個文件
| 標准名稱 |
描述 |
| nginx.conf |
應用程序的基本配置文件 |
| mime.types |
一個文件擴展列表文件,與MIME類型關聯 |
| fastcgi.conf |
與FastCGI相關的配置文件 |
| proxy.conf |
與Proxy相關的配置文件 |
| sites.conf |
配置Nginx提供的網站,最好每個域建文件 |
基本模塊
| 名稱 |
描述 |
| 核心模塊(Core module) |
基本特征和指令,例如進程管理和安全 |
| 事件模塊(Events module) |
讓你在Nginx內部機制配置網絡使用能力 |
| 配置模塊(Configuration module) |
提供包含機制 |
啟動Nginx,一個獨一無二的進程存在於內存——master進程,如果該服務在系統啟動時有init腳本啟動,它會使用當前的用戶和用戶組來運行——通常為root/root,master進程本身不處理任何客戶端的請求,它是用來產生進程——worker進程,這些worker進程在配置文件中指定的用戶和用戶組來運行,定義大量worker進程以及每個worker進程的最大連接數。
硬件選擇
| 低流量的配置 |
標准配置 |
高流量配置 |
| CPU:雙核 RAM:2GB 請求:~1/s |
CPU:四核 RAM:4GB 請求:~50/s |
CPU:八核 RAM:12GB 請求:~1000/s |
| 推薦值 |
|
|
| worker_processes 2; worker_rlimit_nofile 1024; worker_priority -5; worker_cpu_affinity 01 10; events{ multi_accept on; worker_connections 128; } |
worker_processes 4; worker_rlimit_nofile 8192; worker_priority 0; worker_cpu_affinity 0001 0010 0100 1000; events{ multi_accept off; worker_connections 1024; } |
worker_processes 8; worker_priority 0; events{ multi_accept off; worker_connections 8192; } |
4 解讀Nginx配置
核心模塊(Core module)指令
| 指令和使用環境 |
描述 |
| master_process |
語法:on或off 若為on,Nginx將開啟多個進程,一個主進程(即master進程)和worker進程;若為off,Nginx會以獨一無二的進程來運行。該指令僅被用於測試。 |
| worker_processes |
語法:數字 定義worker進程的數量,Nginx可將請求分到多個worker進程 |
| error_log |
語法:error_log /file/path level 能夠提供不同的錯誤日志級別:應用程序、HTPP服務、虛擬主機和虛擬主機目錄 |
| pid |
語法:文件路徑 用於存放Nginx守護進程的pid文件路徑。默認值為編譯時配置的路徑 |
事件模塊(Event Module)指令
| 指令和使用環境 |
描述 |
| worker_connections |
語法:數字 定義一個woker進程能夠同時連接的數量 |
| multi_accept |
語法:on或off 定義Nginx是否立刻從所有監聽隊列進入的連接 |
配置模塊(Configuration module)指令(涉及的主要是HTTP核心模塊,下面再補充)
Nginx.conf解讀:
#user nobody; #定義worker進程的數量,Nginx可將請求分到多個worker進程 worker_processes 1; #能夠提供不同的錯誤日志級別:應用程序、HTPP服務、虛擬主機和虛擬主機目錄 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #用於存放Nginx守護進程的pid文件路徑。默認值為編譯時配置的路徑 #pid logs/nginx.pid; #定義一個woker進程能夠同時連接的數量 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以上面配置為基礎,提供Web服務
l 通過80監聽tcp套接字
l 訪問地址http://localhost/
l 主頁為index.html
在windows的cmd下,進入nginx目錄,輸入:
D:\DTLDownLoads\nginx-1.10.2>start nginx D:\DTLDownLoads\nginx-1.10.2>nginx -t nginx: the configuration file D:\DTLDownLoads\nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file D:\DTLDownLoads\nginx-1.10.2/conf/nginx.conf test is successful D:\DTLDownLoads\nginx-1.10.2>
運行效果如下:

5 讓“百度”成為自己的“搬運工”
如何使用Nginx代理,使“百度”成為搬運工,主要設置server_name和proxy_pass屬性。這里涉及了配置模塊,主要是HTTP核心模塊。
HTTP核心模塊包含HTTP服務器所有基本的區段(block)、指令和變量。主要有http,server和location這三個主要的區段結構。
l http 該區段嵌入配置文件的根部。
l server 這個區段允許你聲明一個站點,能夠設定網站(通過主機名)。這樣通過Nginx實現公認的服務器。該區段只能用在http區段。
l location 定義一組設置,應用於網站的一個特定位置。該區段能夠用於server區段,也能嵌套在其它location中。
| 指令和使用環境 |
描述 |
| server_name |
語法:server_name hostname1[hostname2…] 在server區段定義一個或者多個主機名 |
| sendfile |
語法:on或off Nginx將使用sendfile內核來調用處理文件傳遞。 |
| root |
語法:目錄路徑 定義文檔根目錄 |
| keepalive_timeout |
語法:keepalive_timeout time1[time2...] keep-alive能夠使用客戶端服務器的連接在一定時間內持續有效 |
Nginx.conf配置如下:
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 zhyongfeng; location / { proxy_pass https://www.baidu.com; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
運行效果:


6 服務器負載均衡集群
不同主機端口,通過localhost:80端口進行負載均衡集群訪問,使用localhost對WEB API配置如下:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream zhyongfeng.com { #可進行down測試; server 10.92.202.56:5600; server 10.92.202.57:5700; server 10.92.202.58:5800; } server { listen 80; server_name localhost; location / { proxy_pass http://zhyongfeng.com; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
運行CMD:
D:\DTLDownLoads\nginx-1.10.2>start nginx
D:\DTLDownLoads\nginx-1.10.2>nginx -s reload
訪問:http://localhost/,運行結果:



7 域名解析實現負載均衡
不同主機端口,通過自主義域名zhyongfeng.com:80端口進行負載均衡集群訪問,則訪問C:\Windows\System32\drivers\etc\hosts,添加下列“本機IP 自定義的域名”:
10.93.85.66 zhyongfeng.com
使用zhyongfeng.com對WEB API配置如下:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream zhyongfeng.com { server 10.92.202.56:5600; server 10.92.202.57:5700; server 10.92.202.58:5800; } server { listen 80; server_name zhyongfeng.com; location / { proxy_pass http://zhyongfeng.com; } } }
運行CMD,重新reload加載配置,停止后重新啟動:
D:\DTLDownLoads\nginx-1.10.2>nginx -s reload D:\DTLDownLoads\nginx-1.10.2>nginx -s stop D:\DTLDownLoads\nginx-1.10.2>start nginx
訪問:http://zhyongfeng.com/,http://localhost/,http://10.93.85.66/的運行結果:



8 總結
Nginx可以使用Rewrite模塊建立高級重寫規則,可以和PHP、Python結合,也可以替換Apache,或者作用於現有HTTP服務器前端,能夠輕松建立虛擬主機配置,既能反向代理又可以是電子郵件(IMAP/POP3)代理服務器,功能強大,可以深入學習。
Windows的Nginx資源下載:
http://download.csdn.net/download/ruby_matlab/10117702
PDF下載:
