Nginx 配置文件的各個(gè)層次
- main: 主要配置滨彻,如
error log
,workprosses
等等 - events: 事件驅(qū)動(dòng)相關(guān)內(nèi)容术徊,比如工作方式(
poll
,epoll
等等) - httpd: 關(guān)于
http
相關(guān)的配置 - server: 虛擬主機(jī)的配置
- location: 是最靈活的配置
Nginx 啟用運(yùn)維信息( status )
server {
.... ## 其他配置項(xiàng)
location /status {
stub_status on;
access_log off;
allow 192.168.0.1; ## 允許訪問(wèn)的IP
allow 192.168.0.0/24;
allow 127.0.0.1;
deny all;
}
}
狀態(tài)頁(yè)面各項(xiàng)數(shù)據(jù)的意義:
active connections
: 當(dāng)前 Nginx
正在處理的活動(dòng)連接數(shù)
serveraccepts handled request
: 總共處理的鏈接, 成功處理的握手次數(shù), 總共處理了多少請(qǐng)求
reading
: Nginx
讀取到客戶端的 Header
信息數(shù)
writing
: Nginx
返回給客戶端的 Header
信息數(shù)
waiting
: 開(kāi)啟 keep-alive
的情況下, 這個(gè)值 等于 active - (reading + writing)
, 就是 Nginx
已經(jīng)處理完成正在等候下一次請(qǐng)求指令的駐留鏈接.
Nginx 反向代理
-
使用反向代理的指令是
proxy_pass
.server { listen 80; sever_name www.sucem.com location /{ 后端服務(wù)器 } location /forum/ { /* 將 http://www.sucem.com/forum 的訪問(wèn)代理到 http://www.sucem.com:8080/bbs 應(yīng)用上 */ proxy_pass: http://www.sucem.com:8080/bbs/ } }
*注意: 如果在 Location 中專用了模式匹配(~, ~ , ^~, = 等符號(hào))本刽,這不能在方向代理中寫 URI。 比如 不能寫 http://www.sucem.com:8080/bbs/ 只能到 http://www.sucen.com:8080 為止赠涮。Nginx會(huì)自動(dòng)根據(jù)匹配到的URI附加在網(wǎng)址最后 **
-
在反向代理中添加真實(shí)的客戶端地址
需要用到的模塊參數(shù):
- $request_uri: 請(qǐng)求的 URI
- $schema: 請(qǐng)求的模式(http, https 等)
- $server_addr: 請(qǐng)求的服務(wù)器地址
- $remote_addr:客戶端的地址
/* 在配置文件中配置 location子寓,在請(qǐng)求中添加首部 */ server { .... location / { proxy_pass: http://192.168.100.101:8080; proxy_set_header X-Real-IP $remote_addr; } } /* 配置完成之后在還需要在訪問(wèn)日志中記錄該值(各個(gè)服務(wù)器記錄的方法都不一樣) */
Nginx 負(fù)載均衡
Nginx 的反向代理功能主要是由 HttpUpstreamModule
模塊提供的。
該模塊通過(guò) upstream 配置塊提供簡(jiǎn)單的負(fù)載均衡功能(輪詢笋除,最少鏈接斜友,客戶端IP)。--官方文檔
如:
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
server {
location / {
proxy_pass http://backend;
}
}
參數(shù)都比較簡(jiǎn)單垃它。不做解釋了鲜屏,需要注意的是烹看,在 server 配置項(xiàng)中,一定不能加上http
!
-
Nginx 對(duì)后端服務(wù)器進(jìn)行健康狀況檢查
主要使用 server 配置項(xiàng)的兩個(gè)參數(shù):
max_fails
,fail_timeout
-
如果所有的后端服務(wù)器都 down 了洛史,這可以使用 sorry server
server { listen 8080; servername localhost; root /web/errorpages; index index.html; } upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server localhost:8080 down // down 表示這是一個(gè) sorry server }
-
Nginx 的
ip_hash
通過(guò)
ip_hash
將同一個(gè)客戶端始終定義到同一臺(tái)服務(wù)器上惯殊,ip_hash
在upstream
塊中定義。但是使用了ip_hash
以后就不能使用sorry server
了
Nginx 緩存后端服務(wù)器資源
Nginx 的緩存需要提供內(nèi)存空間(存放鍵和對(duì)象的元數(shù)據(jù))以及磁盤空間(用來(lái)存放真實(shí)數(shù)據(jù))
-
使用指令
proxy_cache_path
來(lái)創(chuàng)建緩存也殖。可以使用的參數(shù):
- levels:levels: 定義緩存子目錄的級(jí)別土思。如: 2:1 表示有2級(jí)緩存子目錄。第一層子目錄2個(gè)字符毕源。2級(jí)子目錄1個(gè)字符浪漠。(最多有3級(jí)子目錄,每個(gè)子目錄最多3個(gè)字符)
- keys_zone: 給共享內(nèi)存命名霎褐。 如 keys_zone=first:20m 表示有一個(gè)名為 first 的內(nèi)存空間, 20m址愿。
- max_size: 最大的緩存空間。 如: max_size=1g
example
proxy_cache_path /nginx/cache/first levels=2:1 keys_zone=first:20m max_size=1g;
proxy_cache_valid 200 10m //緩存200響應(yīng)結(jié)果 10分鐘
server {
...
/* 添加一個(gè)響應(yīng)首部冻璃,響應(yīng)服務(wù)器地址 */
add_header X-via $server_addr;
/* 添加首部記錄緩存狀態(tài) */
add_header x_Cache $upstream_cache_status
location / {
...
proxy_cache first;
}
}