nginx的so_keepalive和timeout相關小計


KeepAlive

這里的keepalive是TCP的探活機制:

[root@ ~]# sysctl -a  |grep tcp_keepalive
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75

參數解釋:

  • tcp_keepalive_time 1200 ,tcp建立鏈接后1200 秒如果無數據傳輸,則會發出探活數據包
  • tcp_keepalive_probes 9 , 共發送9次
  • tcp_keepalive_intvl 75 ,每次間隔75秒

KeepAlive並不是默認開啟的,在Linux系統上沒有一個全局的選項去開啟TCP的KeepAlive。需要開啟KeepAlive的應用必須在TCP的socket中單獨開啟。

TCP socket也有三個選項和內核對應,通過setsockopt系統調用針對單獨的socket進行設置:

  • TCPKEEPCNT: 覆蓋 tcpkeepaliveprobes
  • TCPKEEPIDLE: 覆蓋 tcpkeepalivetime
  • TCPKEEPINTVL: 覆蓋 tcpkeepalive_intvl

Nginx

server {
    listen 127.0.0.1:3306 so_keepalive=on;
    proxy_pass 172.17.0.3:3306;
    
    #建立連接時間
    proxy_connect_timeout 5s;
    #保持連接時間
    proxy_timeout 3600s;
    error_log /data/logs/my.log info;

so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]

  • on: 開啟,探測參數更加系統默認值
  • off: 關閉
  • keepidle: 等待時間
  • keepintvl: 發送探測報文間隔
  • keepcent: 探測報文發送次數

proxy_timeout:建連后無數據時與后端服務器連接保持時間,默認75s。

proxy_connect_timeout:與后端服務器建立連接的超時, 不超過75s。

proxy_send_timeout:向后端服務器組發出write請求后,等待響應的超時間,默認為60秒。

proxy_read_timeout:向后端服務器組發出read請求后,等待響應的超時間,默認為60秒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM