欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nginx反向代理下的長連接實現(xiàn)

 更新時間:2024年11月25日 11:13:33   作者:喵星程序猿  
本文主要介紹了Nginx反向代理下的長連接實現(xiàn),包括客戶端到Nginx和Nginx到后端服務(wù)器之間的長連接設(shè)置,具有一定的參考價值,感興趣的可以了解一下

一、nginx使用場景

大型應(yīng)用架構(gòu)中,一般會使用nginx反向代理,分為三層:

1.調(diào)用層,瀏覽器或APP;

2.中間層,反向代理nginx;

3.服務(wù)層,server一般是apche、tomcat

請求調(diào)用過程:

1.瀏覽器/app發(fā)起請求

2.DNS解析網(wǎng)址為ip地址

3.通過外網(wǎng)ip訪問nginx

4.nginx發(fā)送請求給內(nèi)網(wǎng)ip的server

上面架構(gòu),要想支持全鏈路的長連接,需要做到兩點:

1.從client到nginx的連接是長連接;

2.從nginx到server的連接是長連接;

二、長連接設(shè)置

1.client到nginx的長連接:

由于目前瀏覽器默認使用HTTP/1.1,請求header中默認設(shè)置Connection:keep-alive,所以只需在nginx配置中做如下配置:

http {
       keepalive_timeount 120s 120s;
       keepalive_requests 10000;
}

#語法

keepalive_timeout timeout [header_timeout]

第一個參數(shù)(timeout):設(shè)置keep_alive客戶端(瀏覽器)連接在服務(wù)端(nginx端)保持開啟的超時值(默認75s);值為0會禁用keep_alive客戶端連接;

第二個參數(shù)(header_timeout):可選,在響應(yīng)的header中設(shè)置值“Keep-Alive:timeout=time”;通??梢圆挥迷O(shè)置;

keepalive_requests這個配置項用于設(shè)置一個keep-alive連接上可以服務(wù)的請求最大數(shù)量,當達到配置的最大請求數(shù)時,連接會被關(guān)閉,默認值為100.具體過程時指一個keep-alive連接建立之后,nginx會為這個連接設(shè)置一個計數(shù)器,記錄這個長連接上已經(jīng)接收并處理的客戶端請求的數(shù)量,一旦達到設(shè)置的最大值時,nginx會強行關(guān)閉這個長連接,此時如果客戶端有新請求,就需要重新建立新的長連接。

注:在QPS較高的場景下,服務(wù)端需要將keepalive_requests設(shè)置大一些,默認數(shù)值就不夠了,否則服務(wù)端可能會出現(xiàn)大量的TIME_WAIT狀態(tài)的TCP連接數(shù)異常!另外nginx(version 1.15.3)在Upstream內(nèi)增加了keepalive_requests配置項,默認值也是100,也是需要手動設(shè)置,而且這兩個數(shù)量可以不一致,一般服務(wù)端要設(shè)置的大些,因為多數(shù)情況是一個nginx代理對應(yīng)多個服務(wù)端。

2.nginx和server的長連接

默認情況下,nginx訪問后端都是用的短連接(HTTP/1.0)一個請求來了,nginx會新開一個端口和后端建立連接,后端執(zhí)行完畢后主動關(guān)閉該tcp連接。為了讓nginx和后端server(nginx稱之為upstream)之間保持長連接,典型設(shè)置如下:

http {
         upstream http_backend {
                  server 192.168.2.154:8080;
                  server 192.168.2.109:8080;
                  keepalive 32;                  # 長連接緩存池大小為32
                  keepalive_timeout  120s;       # 長連接失效時間
                  keepalive_requests 2000;       # 每條長連接最大復用請求數(shù)為2000
          }

        server {
                 location /http/ {
                 proxy_pass http://http_backend;
                 proxy_http_version 1.1;        # 啟用HTTP/1.1版本與被代理服務(wù)器建立連接
                 proxy_set_header Connection "Keep-Alive";  # 設(shè)置發(fā)送被代理服務(wù)器請求頭屬性字段Connection
         }
 }

nginx 與被代理服務(wù)器間建立的長連接是通過啟用 HTTP/1.1 版本協(xié)議實現(xiàn)的。由于 HTTP 代理模塊默認會將發(fā)往被代理服務(wù)器的請求頭屬性字段 Connection 的值設(shè)置為 Close,因此需要通過配置指令設(shè)置請求頭屬性字段 Connection 的內(nèi)容為“Keep-Alive”或者空值。

另外upstream中的keepalive_timeout和keepalive_requests參數(shù)與上面的含義一樣,不做過多解析,需要重點關(guān)注keepalive參數(shù),他的含義是指設(shè)置到upstream服務(wù)器的空閑keepalive連接的最大數(shù),當這個數(shù)量被突破時,最近最少使用的連接將被關(guān)閉,另外這個參數(shù)不會限制一個nginx worker進程到upstream服務(wù)器連接的總數(shù)量,有點像線程池中的核心線程數(shù)。

注:keepalive參數(shù)設(shè)置一定要合理,尤其對于QPS比較高的場景,推薦做一下估算,根據(jù)QPS和平均響應(yīng)時間大概計算出需要長連接的數(shù)量,盡量避免系統(tǒng)運行時產(chǎn)生連接數(shù)量的反復震蕩,比如keepalive設(shè)置為10,前一秒系統(tǒng)qps較低,只需50個長連接,用完立馬關(guān)閉其中50-10=40個連接,而后一秒系統(tǒng)qps突增,需要150個連接,空缺了150-10=140個連接,此時nginx不得不新建140個新連接來滿足要求。

三、問題總結(jié)

綜上所述,nginx反向代理的情況下,tcp長連接設(shè)置完成。在實際系統(tǒng)應(yīng)用長連接的場景中,可能會出現(xiàn)大量TIME_WAIT的情況,這里簡單做個總結(jié):

1.導致nginx端出現(xiàn)大量TIME_WAIT的情況有兩種:

a.keepalive_requests設(shè)置比較小,高并發(fā)下超過此值后nginx會強制關(guān)閉和客戶端的長連接;(主動關(guān)閉連接后導致nginx出現(xiàn)TIME_WAIT)

b.keepalive設(shè)置比較?。臻e數(shù)太?。?,導致高并發(fā)下nginx會頻繁出現(xiàn)連接數(shù)震蕩,不停的關(guān)閉、開啟和后端server的長連接;

2.導致后端server端出現(xiàn)大量TIME_WAIT的情況:

nginx沒有打開和后端的長連接,即:沒有設(shè)置proxy_http_version 1.1和proxy_set_header Connection "Keep-Alive",從而導致后端server每次請求后就關(guān)閉連接,高并發(fā)下就會出現(xiàn)server端的大量TIME_WAIT.

到此這篇關(guān)于nginx反向代理下的長連接實現(xiàn)的文章就介紹到這了,更多相關(guān)nginx反向代理長連接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 重啟nginx后丟失nginx.pid的解決方法

    重啟nginx后丟失nginx.pid的解決方法

    本文介紹下,重啟nginx服務(wù)后丟失nginx.pid文件的解決方法,有需要的朋友,可以作個參考
    2014-01-01
  • Nginx下將http改為https的操作步驟

    Nginx下將http改為https的操作步驟

    HTTPS是HTTP協(xié)議的安全版本,通過使用SSL(安全套接層)或TLS(傳輸層安全)協(xié)議加密通信,為數(shù)據(jù)傳輸提供了保密性、完整性和身份認證,本文給大家介紹了Nginx下將http改為https的操作方法,需要的朋友可以參考下
    2024-08-08
  • 前端開發(fā)用得著的nginx配置(場景)

    前端開發(fā)用得著的nginx配置(場景)

    這篇文章主要介紹了前端開發(fā)用得著的nginx配置,前端的工作過程里,本地開發(fā)、提供測試環(huán)境,總得有個用著順手的服務(wù)器軟件,這個場景里nginx很流行,特分享下需要的朋友可以參考下
    2014-09-09
  • Nginx中防止SQL注入攻擊的相關(guān)配置介紹

    Nginx中防止SQL注入攻擊的相關(guān)配置介紹

    這篇文章主要介紹了Nginx中防止SQL注入攻擊的相關(guān)配置介紹,文中提到的基本思路為將過濾的情況用rewrite重訂向到404頁面,需要的朋友可以參考下
    2016-01-01
  • nginx日志導入elasticsearch的方法示例

    nginx日志導入elasticsearch的方法示例

    這篇文章主要介紹了nginx日志導入elasticsearch的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Nginx進行域名重寫和泛域名解析配置的方法

    Nginx進行域名重寫和泛域名解析配置的方法

    這篇文章主要介紹了Nginx進行域名重寫和泛域名解析配置的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Nginx結(jié)合keepalived實現(xiàn)集群

    Nginx結(jié)合keepalived實現(xiàn)集群

    本文主要介紹了Nginx結(jié)合keepalived實現(xiàn)集群,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • 在Nginx上配置多個站點的方法

    在Nginx上配置多個站點的方法

    這篇文章主要介紹了在Nginx上配置多個站點的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Nginx配合php實現(xiàn)生成實時縮略圖功能

    Nginx配合php實現(xiàn)生成實時縮略圖功能

    這篇文章主要介紹了Nginx配合php實現(xiàn)生成實時縮略圖功能,這在一些特殊場合可能會要用到,需要的朋友可以參考下
    2014-10-10
  • Nginx-rewrite模塊概述

    Nginx-rewrite模塊概述

    從功能上看 rewrite 和 location 似乎有點像,都能實現(xiàn)跳轉(zhuǎn),主要區(qū)別在于 rewrite 是在同一域名內(nèi)更改獲取資源的路徑,這篇文章主要介紹了Nginx-rewrite模塊詳細介紹,需要的朋友可以參考下
    2023-06-06

最新評論