主頁 > 知識(shí)庫 > Nginx timeout超時(shí)配置詳解

Nginx timeout超時(shí)配置詳解

熱門標(biāo)簽:檢查注冊(cè)表項(xiàng) 百度競(jìng)價(jià)點(diǎn)擊價(jià)格的計(jì)算公式 使用U盤裝系統(tǒng) 硅谷的囚徒呼叫中心 智能手機(jī) 網(wǎng)站建設(shè) 美圖手機(jī) 阿里云

最近項(xiàng)目中用到了nginx,后臺(tái)用的是Java, 發(fā)現(xiàn)有一個(gè)請(qǐng)求后臺(tái)處理操過了1分鐘,結(jié)果請(qǐng)求Status Code為504 Gateway Time-out.

理解了下nginx 所有timeout相關(guān)的配置,如下:

keepalive_timeout

HTTP 有一個(gè) KeepAlive 模式,它告訴 webserver 在處理完一個(gè)請(qǐng)求后保持這個(gè) TCP 連接的打開狀態(tài)。若接收到來自客戶端的其它請(qǐng)求,服務(wù)端會(huì)利用這個(gè)未被關(guān)閉的連接,而不需要再建立一個(gè)連接。

http keep-alive, 網(wǎng)頁的每一個(gè)請(qǐng)求都是HTTP (圖片, CSS等), 而打開HTTP 請(qǐng)求是要先建立TCP 連接, 而如果一個(gè)頁面每個(gè)請(qǐng)求都要打開及關(guān)閉一個(gè)TCP 連接就會(huì)做成資源的浪費(fèi). keepalive_timeout 就是當(dāng)一個(gè)HTTP 請(qǐng)求完成, 其TCP 連接會(huì)存留下來的時(shí)間, 如果這時(shí)有另一個(gè)HTTP 請(qǐng)求過來, 會(huì)複用這個(gè)TCP 連接, 如果再?zèng)]有新的請(qǐng)求過來, 才會(huì)關(guān)閉其TCP連接

user nginx;
worker_processes 1;
 
error_log /var/log/nginx/error.log warn;
pid    /var/run/nginx.pid;
 
 
events {
  worker_connections 1024;
}
 
 
http {
  include    /etc/nginx/mime.types;
  default_type application/octet-stream;
 
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for"';
 
  access_log /var/log/nginx/access.log main;
 
  sendfile    on;
  tcp_nopush   on;
  tcp_nodelay on;
 
 
  keepalive_timeout 65;
  client_max_body_size 8192m;
 
  #gzip on;
 
  #include /etc/nginx/conf.d/*.conf;
 
 
 
  server {
 listen 80 so_keepalive=30m::;
 listen 443 default ssl;
 
 ssl_certificate /etc/nginx/ssl/server.crt;
 ssl_certificate_key /etc/nginx/ssl/portalkey.key;
 #ssl_password_file /etc/nginx/ssl/ssl.pass;
 
 
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
 
 location / {
 proxy_request_buffering off;
 proxy_pass http://127.0.0.1:8011/;
 proxy_connect_timeout    180;
    proxy_send_timeout     180;
    proxy_read_timeout     180;
    send_timeout  180;
 }
 location /test1_url/ {
 proxy_pass http://127.0.0.1:8008/;
 proxy_connect_timeout    180;
    proxy_send_timeout     180;
    proxy_read_timeout     180;
    send_timeout  180;
 }
 location /test2_url/ {
 proxy_pass http://127.0.0.1:3000/;
 proxy_connect_timeout    180;
    proxy_send_timeout     180;
    proxy_read_timeout     180;
    send_timeout  180;
 }
  }
}

# 配置段: http,默認(rèn)75s

keepalive_timeout 60;

  • send_timeout :發(fā)送數(shù)據(jù)至客戶端超時(shí), 默認(rèn)60s, 如果連續(xù)的60s內(nèi)客戶端沒有收到1個(gè)字節(jié), 連接關(guān)閉
  • proxy_connect_timeout: nginx與upstream server的連接超時(shí)時(shí)間
  • proxy_read_timeout: nginx接收upstream server數(shù)據(jù)超時(shí), 默認(rèn)60s, 如果連續(xù)的60s內(nèi)沒有收到1個(gè)字節(jié), 連接關(guān)閉
  • proxy_send_timeout: nginx發(fā)送數(shù)據(jù)至upstream server超時(shí), 默認(rèn)60s, 如果連續(xù)的60s內(nèi)沒有發(fā)送1個(gè)字節(jié), 連接關(guān)閉

so_timeout:

當(dāng)用戶跟SERVER開啟了TCP CONNECTION --> 一段長(zhǎng)時(shí)間這個(gè)CONNECTION 沒traffic (so_keepalive timeout) --> SERVER 發(fā)出探測(cè)包看用戶是否還存在 --> 若探測(cè)包沒回, 則關(guān)閉TCP CONNECTION 

so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
so_keepalive=30m::10
  will set the idle timeout (TCP_KEEPIDLE) to 30 minutes, leave the probe interval (TCP_KEEPINTVL) at its system default, and set the probes count (TCP_KEEPCNT) to 10 probes.

以上三個(gè)參數(shù)只能使用一個(gè),不能同時(shí)使用, 比如so_keepalive=on, so_keepalive=off或者so_keepalive=30s::(表示等待30s沒有數(shù)據(jù)報(bào)文發(fā)送探測(cè)報(bào)文)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:通遼 黃山 山南 懷化 湘潭 煙臺(tái) 湖北 賀州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Nginx timeout超時(shí)配置詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266