Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,并在一個BSD-like 協(xié)議下發(fā)行。其特點是占有內(nèi)存少,并發(fā)能力強,事實上nginx的并發(fā)能力確實在同類型的網(wǎng)頁服務器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。
也許你聽過以上關于Nginx的美妙的事情,您可能已經(jīng)很喜歡它了,正在考慮如何提高Nginx服務器的性,穩(wěn)定性,或者您考慮把Apache替換成Nginx,那么本篇文章非常適合您繼續(xù)看下去。
本文將介紹用來提高Nginx服務器的性,穩(wěn)定性和性能的12種操作。
TIP #1: 保持Nginx的及時升級
目前Nginx的穩(wěn)定版本為1.14.0,升級到版本,看官方的release note你會發(fā)現(xiàn)他們修復了很多bug,任何一款產(chǎn)品的生產(chǎn)環(huán)境都不想在這樣的bug風險下運行的。
另外,雖然安裝包安裝比通過源代碼編譯安裝更容易,但后一個選項有兩個優(yōu)點:
1)它允許您將額外的模塊添加到Nginx中(如more_[head]er,mod_security),
2)它總是提供比安裝包更新的版本,在Nginx網(wǎng)站上可看release note。
TIP #2: 去掉不用的Nginx模塊
在編譯安裝時,執(zhí)行./configure方法時加上以下配置指令,可以顯式的刪除不用的模塊:
·./configure --without-module1 --without-module2 --without-module3
例如:
·./configure --without-http_dav_module --withouthttp_spdy_module
注意事項:配置指令是由模塊提供的。確保你禁用的模塊不包含你需要使用的指令!在決定禁用模塊之前,應該檢查Nginx文檔中每個模塊可用的指令列表。
TIP #3: 在Nginx配置中禁用server_tokens項
server_tokens在打開的情況下會使404頁面顯示Nginx的當前版本號。這樣做顯然不,因為***會利用此信息嘗試相應Nginx版本的漏洞。
只需要在nginx.conf中http模塊設置server_tokens off即可,例如:
server {
listen 192.168.0.25:80;
Server_tokens off;
server_name ;
access_log /var/www/logs/tecmintlovesnginx.access.log;
error_log /var/www/logs/tecmintlovesnginx.error.log error;
root /var/www//public_[html];
index index.[html] index.htm;
·}
重啟Nginx后生效:
TIP #4: 禁止非法的HTTP User Agents
User Agent是HTTP協(xié)議中對瀏覽器的一種標識,禁止非法的User Agent可以阻止爬蟲和掃描器的一些請求,防止這些請求大量消耗Nginx服務器資源。
為了更好的維護,創(chuàng)建一個文件,包含不期望的user agent列表例如/etc/nginx/blockuseragents.rules包含如下內(nèi)容:
map $http_user_agent $blockedagent {
default 0;
~*malicious 1;
~*bot 1;
~*backdoor 1;
~*crawler 1;
~*bandit 1;
}
然后將如下語句放入配置文件的server模塊內(nèi):
·include /etc/nginx/blockuseragents.rules;
并加入if語句設置阻止后進入的頁面:
TIP #5: 禁掉不需要的 HTTP 方法
例如一些web站點和應用,可以只支持GET、POST和[head]方法。
在配置文件中的server模塊加入如下方法可以阻止一些欺騙***
if($request_method !~ ^(GET|[head]|POST)$){
return 444;
}
TIP #6: 設置緩沖區(qū)容量上限
這樣的設置可以阻止緩沖區(qū)溢出***(同樣是Server模塊)
client_[body]_buffer_size 1k;
client_[head]er_buffer_size 1k;
client_max_[body]_size 1k;
large_client_[head]er_buffers 2 1k;
設置后,不管多少HTTP請求都不會使服務器系統(tǒng)的緩沖區(qū)溢出了。
TIP #7: 限制連接數(shù)
在http模塊內(nèi),server模塊外設置limit_conn_zone,可以設置連接的IP
在http,server或location模塊設置limit_conn,可以設置IP的連接數(shù)
例如:
limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 1;