Nginx 連接超時參數優化

1. 什麼是連接超時 

當服務器建立的連接沒有接收處理請求時,可以在指定的時間內讓它超時自動退出

2. 連接超時的作用

(1) 將無用的連接設置爲儘快超時,可以保護服務器的系統資源(CPU、內存、磁盤)

(2) 當連接很多時,及時斷掉那些建立好的但又長時間不做事的連接,以減少其佔用的服務器資源

(3) 如果黑客攻擊,會不斷地和服務器建立連接,因此設置連接超時以防止大量消耗服務器的資源

(4) 如果用戶請求了動態服務,則 Nginx 就會建立連接,請求 FastCGI 服務以及後端 MySQL 服務,設置連接超時,使得在用戶容忍的時間內返回數據

3. 連接超時存在的問題

(1) 服務器建立新連接是要消耗資源的,因此,連接超時時間不宜設置得太短,否則會造成併發很大,導致服務器瞬間無法響應用戶的請求

(2) 有些 PHP 站點會希望設置成短連接,因爲 PHP 程序建立連接消耗的資源和時間相對要少些

(3) 有些 Java 站點會希望設置成長連接,因爲 Java 程序建立連接消耗的資源和時間要多一些,這時由語言的運行機制決定的

4. 設置連接超時

(1) keepalive_timeout  60:該參數用於設置客戶端連接保持會話的超時時間,超過這個時間服務器會關閉該連接

     參數語法 keepalive_timeout 時間數(秒);

     放置位置  http,server,location

(2) client_header_timeout  15:該參數用於設置讀取客戶端請求頭數據的超時時間,如果超時客戶端還沒有發送完整的 header 數據,服務器將返回 "Request time out (408)" 錯誤

     參數語法 client_header_timeout 時間數(秒);

     放置位置 http,server

(3) client_body_timeout  15:該參數用於設置讀取客戶端請求主體數據的超時時間,如果超時客戶端還沒有發送完整的主體數據,服務器將返回 "Request time out (408)" 錯誤

     參數語法 client_body_timeout 時間數(秒);

     放置位置 http,server,location

(4) send_timeout  25:用於指定響應客戶端的超時時間,如果超過這個時間,客戶端沒有任何活動,Nginx 將會關閉連接

     參數語法 send_timeout 時間數(秒);

     放置位置 http,server,location

(5) tcp_nodelay :默認情況下當數據發送時,內核並不會馬上發送,可能會等待更多的字節組成一個數據包,這樣可以提高 I/O 性能,但是,在每次只發送很少字節的業務場景中,使用 tcp_nodelay 功能,等待時間會比較長

在主配置文件nginx.conf中配置

[root@web01 ~]# cat /application/nginx/conf/nginx.conf
worker_processes  2;
worker_cpu_affinity 0101 1010;
error_log logs/error.log;
 
#配置Nginx worker進程最大打開文件數
worker_rlimit_nofile 65535;
 
user www www;
events {
    #單個進程允許的客戶端最大連接數
    worker_connections  20480;
    #使用epoll模型
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    #sendfile        on;
    #keepalive_timeout  65;
    #訪問日誌配置
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
 
    #虛擬主機
    include /application/nginx/conf/extra/www.conf;
    include /application/nginx/conf/extra/blog.conf;
    include /application/nginx/conf/extra/bbs.conf;
    include /application/nginx/conf/extra/edu.conf;
    include /application/nginx/conf/extra/phpmyadmin.conf;
    include /application/nginx/conf/extra/status.conf;
 
    #nginx優化----------------------
    #隱藏版本號
    server_tokens on;
 
    #優化服務器域名的散列表大小 
    server_names_hash_bucket_size 64;
    server_names_hash_max_size 2048;
 
    #開啓高效文件傳輸模式
    sendfile on;
    #減少網絡報文段數量
    #tcp_nopush on;
    #提高I/O性能
    tcp_nodelay on;
 
    #連接超時 時間定義 默認秒 默認65秒
    keepalive_timeout 60;
    
    #讀取客戶端請求頭數據的超時時間 默認秒 默認60秒
    client_header_timeout 15;
    
    #讀取客戶端請求主體的超時時間 默認秒 默認60秒
    client_body_timeout 15;
    
    #響應客戶端的超時時間 默認秒 默認60秒
    send_timeout 25;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章