nginx 長連線配置

破棉襖發表於2015-01-19

nginx upstream keepalive connections
Nginx從 1.1.4 開始,實現了對後端機器的長連線支援,這是一個激動人心的改進,這意味著 Nginx 與後端機器的通訊效率更高,後端機器的負擔更低。
例如,對一個沒有長連線支援的後端機器,會出現大量TIME_WAIT 狀態的連線,使用以下命令驗證之:
netstat -n | grep TIME_WAIT
經過查閱官方文件,其目前已經實現了http, fastcgi, memcache 協議的長連線支援。而之前的版本中僅支援 memcache 協議。
1. 啟用到 memcache 伺服器的長連線
在upstream 配置段中增加 keepalive N 指令即可:
upstream memcached_backend {
server 127.0.0.1:11211;
server 10.0.0.2:11211;
keepalive 32;
}
server {
...
location /memcached/ {
set $memcached_key $uri;
memcached_pass memcached_backend;
}
}
2. 啟用fastcgi 長連線支援
除了需要在upstream 中配置 keepalive N 外,還需要在 location 中增加 fastcgi_keep_conn on;
upstream fastcgi_backend {
server 127.0.0.1:9000;
keepalive 8;
}
server {
...
location /fastcgi/ {
fastcgi_pass fastcgi_backend;
fastcgi_keep_conn on;
...
}
}
3. 啟用對後端機器HTTP 長連線支援
upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
...
location /http/ {
proxy_pass
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}
注意:需要設定nginx 代理請求的 http 協議版本號為 1.1, 以及清除掉 Connection 請求 header, 官方文件描述:
For HTTP, the proxy_http_version directive should be set to “ 1.1 ” and the “ Connection ” header field should be cleared .
The connections parameter should be set low enough to allow upstream servers to process additional new incoming connections as well.
即是說:keepalive N 指令中 , N 的值應該儘可能設定小一些,以便後端機器可以同時接受新的連線。
在我負責的生產環境中,前端是nginx, 靜態檔案快取使用 varnish, 使用長連線之後, varnish 機器的連線數從 8000 多下降至 200 多,負載值也有明顯降低。
但是針對fastcgi, 即後端機器是 php-fpm 服務時,在 nginx 日誌中出現以下錯誤:
upstream sent unsupported FastCGI protocol version: 0 while reading upstream 。    

出處:
http://zhangxugg-163-com.iteye.com/blog/1551269


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1406479/,如需轉載,請註明出處,否則將追究法律責任。

相關文章