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; ## 允許訪問的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`: 開啟 `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 的訪問代理到
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;
}
}
/* 配置完成之后在還需要在訪問日志中記錄該值(各個(gè)服務(wù)器記錄的方法都不一樣) */
```
Nginx 負(fù)載均衡
----
Nginx 的反向代理功能主要是由 `HttpUpstreamModule` 模塊提供的社证。
> 該模塊通過 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)行健康狀況檢查
1. 主要使用 server 配置項(xiàng)的兩個(gè)參數(shù): `max_fails` , `fail_timeout`
1. 如果所有的后端服務(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`
通過 `ip_hash` 將同一個(gè)客戶端始終定義到同一臺(tái)服務(wù)器上谬返, `ip_hash` 在 `upstream` 塊中定義之斯。但是使用了 `ip_hash` 以后就不能使用 `sorry server` 了
Nginx 緩存后端服務(wù)器資源
----
- Nginx 的緩存需要提供內(nèi)存空間(存放鍵和對(duì)象的元數(shù)據(jù))以及磁盤空間(用來存放真實(shí)數(shù)據(jù))
- 使用指令 `proxy_cache_path` 來創(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;
}
}
```