Nginx是一款輕量級的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個BSD-like 協(xié)議下發(fā)行。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。
也許你聽過以上關(guān)于Nginx的美妙的事情,您可能已經(jīng)很喜歡它了,正在考慮如何提高Nginx服務(wù)器的性,穩(wěn)定性,或者您考慮把Apache替換成Nginx,那么本篇文章非常適合您繼續(xù)看下去。
本文將介紹用來提高Nginx服務(wù)器的性,穩(wěn)定性和性能的12種操作。
TIP #1: 保持Nginx的及時升級
目前Nginx的穩(wěn)定版本為1.14.0,升級到版本,看官方的release note你會發(fā)現(xiàn)他們修復(fù)了很多bug,任何一款產(chǎn)品的生產(chǎn)環(huán)境都不想在這樣的bug風(fēng)險下運(yùn)行的。
另外,雖然安裝包安裝比通過源代碼編譯安裝更容易,但后一個選項(xiàng)有兩個優(yōu)點(diǎn):
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
注意事項(xiàng):配置指令是由模塊提供的。確保你禁用的模塊不包含你需要使用的指令!在決定禁用模塊之前,應(yīng)該檢查Nginx文檔中每個模塊可用的指令列表。
TIP #3: 在Nginx配置中禁用server_tokens項(xiàng)
server_tokens在打開的情況下會使404頁面顯示Nginx的當(dāng)前版本號。這樣做顯然不,因?yàn)?/span>***會利用此信息嘗試相應(yīng)Nginx版本的漏洞。
只需要在nginx.conf中http模塊設(shè)置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é)議中對瀏覽器的一種標(biāo)識,禁止非法的User Agent可以阻止爬蟲和掃描器的一些請求,防止這些請求大量消耗Nginx服務(wù)器資源。
為了更好的維護(hù),創(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語句設(shè)置阻止后進(jìn)入的頁面:
TIP #5: 禁掉不需要的 HTTP 方法
例如一些web站點(diǎn)和應(yīng)用,可以只支持GET、POST和[head]方法。
在配置文件中的server模塊加入如下方法可以阻止一些欺騙***
if($request_method !~ ^(GET|[head]|POST)$){
return 444;
}
TIP #6: 設(shè)置緩沖區(qū)容量上限
這樣的設(shè)置可以阻止緩沖區(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;
設(shè)置后,不管多少HTTP請求都不會使服務(wù)器系統(tǒng)的緩沖區(qū)溢出了。
TIP #7: 限制連接數(shù)
在http模塊內(nèi),server模塊外設(shè)置limit_conn_zone,可以設(shè)置連接的IP
在http,server或location模塊設(shè)置limit_conn,可以設(shè)置IP的連接數(shù)
例如:
limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 1;