Nginx伺服器中配置超時時間的方法
一、啥時候用到
用來設定請求資源和伺服器返回的時間,保證一個請求佔用固定時間,超出後報504超時!這樣可以保證一個請求佔用過長時間。
二、主要引數
使用nginx伺服器如果遇到timeou情況時可以如下設定引數,使用fastcgi:
fastcgi_connect_timeout 75; 連結
fastcgi_read_timeout 600; 讀取
fastcgi_send_timeout 600; 發請求
這兩個選項.
fastcgi_read_timeout是指fastcgi程序向nginx程序傳送response的整個過程的超時時間
fastcgi_send_timeout是指nginx程序向fastcgi程序傳送request的整個過程的超時時間
這兩個選項預設都是秒(s),可以手動指定為分鐘(m),小時(h)等
三、其他常用引數以及引數說明
keepalive_timeout 600; 連線超時時間,1分鐘,具體時間可以根據請求(例如後臺匯入)需要的時間來設定
proxy_connect_timeout 600; 1分鐘
proxy_read_timeout 600; 1分鐘
nginx超時配置引數說明:
keepalive_timeout
語法 keepalive_timeout timeout [ header_timeout ]
預設值 75s
上下文 http server location
說明 第一個引數指定了與client的keep-alive連線超時時間。伺服器將會在這個時間後關閉連線。可選的第二個引數指定了在響應頭Keep-Alive: timeout=time中的time值。這個頭能夠讓一些瀏覽器主動關閉連線,這樣伺服器就不必要去關閉連線了。沒有這個引數,nginx不會發送Keep-Alive響應頭(儘管並不是由這個頭來決定連線是否“keep-alive”)
兩個引數的值可並不相同
注意不同瀏覽器怎麼處理“keep-alive”頭
MSIE和Opera忽略掉"Keep-Alive: timeout=<N>" header.
MSIE保持連線大約60-65秒,然後傳送TCP RST
Opera永久保持長連線
Mozilla keeps the connection alive for N plus about 1-10 seconds.
Konqueror保持長連線N秒
proxy_connect_timeout
語法 proxy_connect_timeout time
預設值 60s
上下文 http server location
說明 該指令設定與upstream server的連線超時時間,有必要記住,這個超時不能超過75秒。
這個不是等待後端返回頁面的時間,那是由proxy_read_timeout宣告的。如果你的upstream伺服器起來了,但是hanging住了(例如,沒有足夠的執行緒處理請求,所以把你的請求放到請求池裡稍後處理),那麼這個宣告是沒有用的,由於與upstream伺服器的連線已經建立了。
proxy_read_timeout
語法 proxy_read_timeout time
預設值 60s
上下文 http server location
說明 該指令設定與代理伺服器的讀超時時間。它決定了nginx會等待多長時間來獲得請求的響應。這個時間不是獲得整個response的時間,而是兩次reading操作的時間。
client_header_timeout
語法 client_header_timeout time
預設值 60s
上下文 http server
說明 指定等待client傳送一個請求頭的超時時間(例如:GET / HTTP/1.1).僅當在一次read中,沒有收到請求頭,才會算成超時。如果在超時時間內,client沒傳送任何東西,nginx返回HTTP狀態碼408(“Request timed out”)
client_body_timeout
語法 client_body_timeout time
預設值 60s
上下文 http server location
說明 該指令設定請求體(request body)的讀超時時間。僅當在一次readstep中,沒有得到請求體,就會設為超時。超時後,nginx返回HTTP狀態碼408(“Request timed out”)
lingering_timeout
語法 lingering_timeout time
預設值 5s
上下文 http server location
說明 lingering_close生效後,在關閉連線前,會檢測是否有使用者傳送的資料到達伺服器,如果超過lingering_timeout時間後還沒有資料可讀,就直接關閉連線;否則,必須在讀取完連線緩衝區上的資料並丟棄掉後才會關閉連線。
resolver_timeout
語法 resolver_timeout time
預設值 30s
上下文 http server location
說明 該指令設定DNS解析超時時間
proxy_send_timeout
語法 proxy_send_timeout time
預設值 60s
上下文 http server location
說明 這個指定設定了傳送請求給upstream伺服器的超時時間。超時設定不是為了整個傳送期間,而是在兩次write操作期間。如果超時後,upstream沒有收到新的資料,nginx會關閉連線
proxy_upstream_fail_timeout(fail_timeout)
語法 server address [fail_timeout=30s]
預設值 10s
上下文 upstream
說明 Upstream模組下 server指令的引數,設定了某一個upstream後端失敗了指定次數(max_fails)後,該後端不可操作的時間,預設為10秒
四、例項
這裡來看一個把Nginx的超時時間上調的例子。
看看時間是否符合要求,在nginx.config裡面的三個引數:
- fastcgi_connect_timeout 300;
- fastcgi_send_timeout 300;
- fastcgi_read_timeout 300;
以上的單位是秒。
如果使用了Nginx的代理,可以在塊里加上:
123 | proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; |
變成:
1234567891011 | location /foo { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; access_log /var/log/nginx/access.foo.log main; error_log /var/log/nginx/error.foo.log; } |