nginx 長連線配置
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Nginx上游伺服器長連線配置Nginx伺服器
- 長連線和短連線
- 長連線與短連線
- PDO 長連線
- HTTP長連線HTTP
- 長連線和短連線的使用
- http的長連線和短連線HTTP
- nginx連線資源管理Nginx
- Python連線Redis連線配置PythonRedis
- 用nginx做grpc反向代理,nginx到後端server不能維持長連線問題NginxRPC後端Server
- http Socket長連線HTTP
- php使用長連線PHP
- 輪詢、長輪詢、短連線、長連線區別對比
- JAVA之長連線、短連線和心跳包Java
- HTTP長連線和短連線原理淺析HTTP
- 【轉載】通訊長連線與短連線
- JPA配置mysql連線MySql
- 11 配置加密連線加密
- Oracle 連線池配置Oracle
- Resin 配置連線池
- proxool連線池 配置
- git配置連線githubGithub
- Websocket 突破最大長連線Web
- 使用mysql的長連線MySql
- HTTP 長連線問題HTTP
- Nginx/Apache服務連線數梳理NginxApache
- 12、Swoole 中 TCP、UDP 和長連線、短連線TCPUDP
- HTTP長連線、短連線究竟是什麼?HTTP
- [zt] JDBC連線Oracle RAC的連線串配置JDBCOracle
- Mysql關於長連線短連線優劣比較MySql
- 菜鳥學網路之 —— 長連線和短連線
- HTTP協議中的短輪詢、長輪詢、長連線和短連線HTTP協議
- 配置pycharm連線linuxPyCharmLinux
- Loopback 4配置連線MySQLOOPMySql
- MySQL 5.7配置SSL連線MySql
- MYSQL遠端連線配置MySql
- 配置 MySQL 遠端連線MySql
- MYSQL配置遠端連線MySql