Nginx上游伺服器長連線配置
導讀 | Nginx Upstream連線後端有兩種方式:短連線和長連線。Keep-Alive即俗稱的長連線,使客戶端到服務端建立的連線持續有效,當對伺服器發起後續請求時,Keep-Alive功能可以複用先前使用過的連線,減少了重新建立連線所需的開銷。通常使用HTTP協議採用的是請求應答模式,客戶端到服務端的一次請求完成了,它們之間的連線也隨之關閉。在某些應用場景下,比如後端RESTful服務,就需要保持住連線,這時就可以啟用HTTP Keep-Alive。 |
Nginx Upstream連線後端有兩種方式:短連線和長連線。Keep-Alive即俗稱的長連線,使客戶端到服務端建立的連線持續有效,當對伺服器發起後續請求時,Keep-Alive功能可以複用先前使用過的連線,減少了重新建立連線所需的開銷。通常使用HTTP協議採用的是請求應答模式,客戶端到服務端的一次請求完成了,它們之間的連線也隨之關閉。在某些應用場景下,比如後端RESTful服務,就需要保持住連線,這時就可以啟用HTTP Keep-Alive。
nginx 通常情況下都是用來當作一個反向代理,通常一個請求都需要經過 client -> nginx -> backend_server 這麼幾成關係。通常情況下 client -> nginx 使用的 HTTP 1.1 或者 2.0 的協議,keep-alive 複用了 TCP 的連線,減少了 TCP 頻發建立和銷燬帶來的效能損失。但是預設情況下,nginx -> backend_server 是 HTTP 1.0 的協議,並沒有複用 TCP 的連線。
對發往上游請求當中要加上http頭部圖片裡面的兩條指令proxy_http_version和proxy_set_header,因為http 1.0協議是不支援keepalive長連線的,為了防止使用者發來的是http 1.0協議我們需要重置http_version為1.1,這樣一直可以使用keepalive長連線。其次為了防止使用者connection頭部給我們傳入的是closed而不是keepalived,我們需要主動設定向上遊發的Connection值為Connection ""。
功能:透過複用連線,降低Nginx與上游伺服器建立,關閉連線的消耗,提升吞吐量的同時降低時間延遲. 模組:ngx_http_upstream_keepalive_module是預設編入到Nginx中的,如果不想編進去可以用 --without-http_upstream_keepalive_module對這個模組進行移除. (/home/muten/module/nginx-1.13.7中執行./configure --help |more 搜尋http_upstream_keepalive_module可驗證) 關於upstream_keepalive的指令: (1)keepalive Activates the cache for connections to upstream servers. The connections parameter sets the maximum number of idle keepalive connections to upstream servers that are preserved in the cache of each worker process. When this number is exceeded, the least recently used connections are closed. 表示上游伺服器中最多保持多少個用於keepalive請求的空閒的連線. 這個命令會促使上游伺服器中每個worker程式中開闢出來一塊快取用於keepalive連線, 當超過這個數字的時候,將會利用LRU演算法將一些連線關閉. 因為http1.0協議是不支援長連線的,為了防止使用者發來的是http1.0,我們需要重置http版本,將其置成1.1,這樣就可以一直使用keep_alive長連線; 為了防止使用者的Connection頭部給我們傳遞的是Close而不是Keepalive,我們主動設定向上遊傳送的connection. When using load balancing methods other than the default round-robin method, it is necessary to activate them before the keepalive directive. 當使用的負載均衡方法不是預設的輪詢演算法時,需要在keepalive指令之前啟用他們 語法: Syntax: keepalive connections; Default: — Context: upstream This directive appeared in version 1.1.4. Syntax: proxy_http_version 1.0 | 1.1; Default: proxy_http_version 1.0; Context: http, server, location This directive appeared in version 1.1.4. Syntax: proxy_set_header field value; Default: proxy_set_header Host $proxy_host; proxy_set_header Connection close; Context: http, server, location 對上游連線的http頭部設定: proxy_http_version 1.1; proxy_set_header Connection ""; 配置 upstream http_backend { server 127.0.0.1:8080; keepalive 16; keepalive_timeout 60s; } server { ... location /http/ { proxy_pass proxy_http_version 1.1; proxy_set_header Connection ""; ... } }
nginx upstream keepalive長連線的實現原理。首先每個程式需要一個connection pool,裡面都是長連線,多程式之間是不需要共享這個連線池的。 一旦與後端伺服器建立連線,則在當前請求連線結束之後不會立即關閉連線,而是把用完的連線儲存在一個keepalive connection pool裡面,以後每次需要建立向後連線的時候,只需要從這個連線池裡面找,如果找到合適的連線的話,就可以直接來用這個連線,不需要重新建立socket或者發起connect()。這樣既省下建立連線時在握手的時間消耗,又可以避免TCP連線的slowstart。如果在keepalive連線池找不到合適的連線,那就按照原來的步驟重新建立連線。
如果你的連線池的數控制在128,總共執行緒池內的執行緒數是128 * nginx worker ,但因為你要應對更多的併發請求,所以臨時又加了很多的連線,但這臨時的連線是短連線和長連線要看你的nginx版本,1.8是長連線,那他如何被收回,兩點保證,一點是他會主動去釋放,另一點是keepalive timeout的時間
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2916650/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nginx 長連線配置Nginx
- 長連線和短連線
- 長連線與短連線
- 配置redis伺服器允許遠端連線Redis伺服器
- PDO 長連線
- HTTP長連線HTTP
- Nginx使用日誌輸出上游伺服器和自身的處理時間Nginx伺服器
- 長連線和短連線的使用
- http的長連線和短連線HTTP
- nginx連線資源管理Nginx
- Python連線Redis連線配置PythonRedis
- 配置 IDEA 遠端連線應用伺服器Idea伺服器
- nginx伺服器搭建以及配置Nginx伺服器
- Nginx快取伺服器配置Nginx快取伺服器
- http Socket長連線HTTP
- php使用長連線PHP
- 用nginx做grpc反向代理,nginx到後端server不能維持長連線問題NginxRPC後端Server
- 輪詢、長輪詢、短連線、長連線區別對比
- ECMall如何支援SSL連線郵件伺服器的配置伺服器
- 構建高效能web之路------web伺服器長連線Web伺服器
- JAVA之長連線、短連線和心跳包Java
- HTTP長連線和短連線原理淺析HTTP
- 【轉載】通訊長連線與短連線
- Nginx + Gunicorn 伺服器配置部署 DjangoNginx伺服器Django
- nginx伺服器配置問題心得Nginx伺服器
- nginx+uwsgi+flask 伺服器配置NginxFlask伺服器
- JPA配置mysql連線MySql
- 11 配置加密連線加密
- Oracle 連線池配置Oracle
- Resin 配置連線池
- proxool連線池 配置
- git配置連線githubGithub
- Websocket 突破最大長連線Web
- 使用mysql的長連線MySql
- HTTP 長連線問題HTTP
- 連線mysql伺服器MySql伺服器
- pycharm 連線伺服器PyCharm伺服器
- Nginx/Apache服務連線數梳理NginxApache