nginx響應超時upstream timed out (110: Connection timed out) while reading response header from upstream
本文介紹了解決Nginx代理超時的問題及優化網絡吞吐量的方法。通過調整配置如proxy_connect_timeout、proxy_read_timeout等參數,可以有效提升Nginx性能。
問題描述
后臺server服務響應時間正常,但是請求沒有打到服務器,在nginx很慢才看到error日志,如下:
2018/07/26 10:17:42 [error] 45762#0: *7489 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.2.127.6, server: et_dev.rong360.com, request: “GET /data/names HTTP/1.1”, upstream: “uwsgi://127.0.0.1:8528”, host: “et_dev.rong360.com”, referrer: “http://et_dev.rong360.com/static/html/index.html”
解決方法
添加或修改nginx反向代理超時時間,如下:
server {
listen 80;
server_name XXX.rong360.com;
large_client_header_buffers 4 16k; # 讀取大型客戶端請求頭的緩沖區的最大數量和大小
client_max_body_size 300m; #設置nginx能處理的最大請求主體大小。
client_body_buffer_size 128k; #請求主體的緩沖區大小。
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
……
location / {
uwsgi_send_timeout 600; # 指定向uWSGI傳送請求的超時時間,完成握手后向uWSGI傳送請求的超時時間。
uwsgi_connect_timeout 600; # 指定連接到后端uWSGI的超時時間。
uwsgi_read_timeout 600; # 指定接收uWSGI應答的超時時間,完成握手后接收uWSGI應答的超時時間。
……
}
提高nginx網絡吞吐量buffers優化指令說明
- large_client_header_buffers
- 此指令規定了用于讀取大型客戶端請求頭的緩沖區的最大數量和大小。 這些緩沖區僅在缺省緩沖區不足時按需分配。 當處理請求或連接轉換到保持活動狀態時,釋放緩沖區。
nginx代理超時配置
- proxy_connect_timeout
- 默認值60s, nginx連接到后端服務器的連接超時時間,發起握手等候響應超時時間。
注:nginx使用proxy模塊時,默認的讀取超時時間是60s。
nginx緩存區大小設置
- proxy_buffer_size
- nginx可從服務器一次接收的最大數據大小
proxy_temp_file_write_size 是一次訪問能寫入的臨時文件的大小,默認是proxy_buffer_size和proxy_buffers中設置的緩沖區大小的2倍,Linux下一般是8k。
proxy_max_temp_file_size 指定當響應內容大于proxy_buffers指定的緩沖區時, 寫入硬盤的臨時文件的大小. 如果超過了這個值, Nginx將與Proxy服務器同步的傳遞內容, 而不再緩沖到硬盤. 設置為0時, 則直接關閉硬盤緩沖.
示例
proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小
proxy_buffers 4 32k; #proxy_buffers緩沖區,網頁平均在32k以下的設置
proxy_busy_buffers_size 64k; #高負荷下緩沖大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大于這個值,將從upstream服務器傳

浙公網安備 33010602011771號