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;
}