基本優化

優化服務器進程

優化進程個數javascript

worker_processes 4; #官方建議設置爲cpu的總核數

# ../sbin/nginx -s reload
[root@c1 conf]# ps -ef|grep nginx|grep -Ev "grep|php-fpm"
root 6544 1 0 Apr16 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx
nginx 8067 6544 0 07:26 ? 00:00:00 nginx: worker process
nginx 8068 6544 0 07:26 ? 00:00:00 nginx: worker process
nginx 8069 6544 0 07:26 ? 00:00:00 nginx: worker process
nginx 8070 6544 0 07:26 ? 00:00:00 nginx: worker process

從"worker_processes 4"可知,worker進程數爲4.nginx master主進程不包含在內,master爲管理進程,負責調度和管理worker進程

綁定不一樣的nginx進程到不一樣的cpu上php

默認狀況下,nginx的多個進程可能跑到某一個cpu或cpu的某一個核上,致使nginx進程使用硬件的資源不均。此節優化是儘量地分配 不一樣的nginx進程給不一樣的cpu處理,達到充分有效利用硬件的多cpu多核資源的目的css

worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

這裏的0001 0010 0100 1000是掩碼,分別表明第一、二、三、4核cpu,因爲worker_processes進程數爲4,所以,上述配置會把每一個進程 一核cpu處理,默認狀況下不會綁定任何cpu,參數位置爲main段html

配置nginx worker進程最大打開文件數java

worker_rlimit_nofile 65535; 能夠設置系統優化後的ulimit -HSn的結果,放置在main段

 

優化nginx時間處理模型

nginx的鏈接處理機制在不一樣的操做系統會採用不一樣的I/O模型,在Linux下,nginx使用epoll的I/O多路複用模型,在FreeBSD使用kqueue的I/O多路複用,在Solaris中使用/dev/poll方式,在Windows中使用的是icop等等node

events {
use epoll;
......
}

調整nginx單個進程容許的客戶端最大鏈接數linux

events {
......
worker_connections 20480;
}

worker_connections用於定義nginx每一個進程的最大鏈接數,默認是1024。nginx總併發鏈接數=worker數量*worker_connections,進程的最大鏈接數受linux系統進程的最大文件數限制,在執行操做系統命令「ulimit -HSn 65535」或配置相應文件後,worker_connections設置才能生效nginx

 

隱藏版本號信息

隱藏版本號 在nginx配置文件nginx.conf中的http標籤段內加入"server_tokens off;"參數,而後重載配置文件web

http {

......
server_tokens off;
}

修改軟件名稱及版本號瀏覽器

修改版本號須要在編譯安裝前
下載nginx並解壓後,對源碼進行修改,源碼文件都在二級目錄nginx-1.8.0/src/下,找到文件src/core/nginx.h, 而後按照下面的代碼中指出的兩行(粗體)進行修改
# cat nginx.h
......
#define NGINX_VERSION "1.8.0"
#define NGINX_VER "nginx/" NGINX_VERSION
.......
對於粗體部分能夠隨意修改

 

開啓高效文本傳輸模式

sendfile 參數用於開啓文件的高效傳輸模式。同時將tcp_nopush和tcp_nodelay兩個指令設置爲on,能夠防止網絡及磁盤I/0阻塞,提高nginx工做效率

能夠放置的標籤段[http ,server, location, if in location]

sendfile on; 提升靜態文件讀取效率
tcp_nopush on; 在sendfile開啓的狀況下,提升網絡包的傳輸效率,把多個包整合一次性發送出去
tcp_nodelay on; 和tcp_nopush對應的,在keepalive鏈接下,提升網絡包的傳輸實時性

 

站點目錄文件及目錄權限優化

爲了保證網站不遭受木馬入侵,全部站點目錄的用戶和組都應該爲root,全部的目錄權限是755;全部的文件權限是644

以上的權限設置能夠防止黑客上傳木馬,以及修改站點文件,可是,合理的網站用戶上傳的內容也會被拒絕。那麼如何讓合法的用戶能夠上傳文件,而又不至於被黑客利用攻擊呢?

若是是單機的環境,站點目錄和文件屬性設置以下:
全部的目錄權限設置爲755
全部的文件權限設置爲644
全部的目錄,以及文件用戶和組都是root
把用戶上傳資源的目錄設置爲755,將用戶和組設置爲nginx服務的用戶
最後針對上傳資源的目錄作資源訪問限制

對上傳資源的目錄作資源訪問限制

有些網站不但容許用戶發佈內容到服務器,還容許用戶發圖片設置上傳附件到服務器上,因爲爲用戶開了上傳的功能,所以給服務器帶來了很大的安全風險。雖然不少程序在上傳前會作必定的控制,例如:文件大小,類型等,可是,一不當心就會被黑客鑽了空子,上傳了木馬程序。下面將利用nginx配置禁止訪問上傳資源目錄下的PHP、SHELL、Perl、Python程序文件,這樣用戶即便上傳了木馬文件也無法執行,從而增強了網站的安全。

配置nginx,禁止解析指定目錄下的指定程序

location ~ ^/images/.*\.(php|php5|sh|pl|py)$
         {
             deny all;
         }

location ~ ^/static/.*\.(php|php5|sh|pl|py)$
         {
             deny all;
         }

location ~ ^/data/(attachment|avatar)/.*\.(php|php5)$
         {
             deny all;
         }

以上目錄的限制必須寫在nginx處理php服務配置前面

 

禁止非法域名解析訪問企業網站

nginx如何防止用戶ip訪問網站(惡意域名解析,也至關於直接IP訪問企業網站)?

方法1:讓使用ip訪問或者惡意解析域名的用戶,收到501錯誤,命令以下:

server {
    listen 80 default_server;
    server_name _;
    return 501;
}


#說明:直接報501錯誤,從用戶體驗上不是很好

方法2:經過301跳轉到主頁,命令以下:

server {
    listen 80 default_server;
    server_name _;
    rewrite ^(.*) http://www.heboan.com$1 permanent;
}

方法3:發現某域名惡意解析到公司的服務器ip,在server標籤裏添加一下代碼便可,如有多個server則要多處添加:

if ($host !~ ^www/.heboan/.com$){
    rewrite ^(.*) http://www.heboan.com$1 permanent;
}

 

圖片及目錄防盜鏈

根據HTTP referer實現防盜鏈

HTTP referer是header的一部分,當瀏覽器向web服務器發送請求時,通常會帶上referer,告訴服務器我是從哪一個頁面連接過來的,服務器藉此得到一些信息用於處理。Apache、Nginx、Lighttpd三者都支持HTTP referer實現防盜鏈,referer是目前網站圖片、附件、html等最經常使用的防盜鏈手段。

location ~* \.(jpg|gif|png|swf|flv|wma|asf|mp3|mmf|zip|rar)$ {
    valid_referers none blocked *.heboan.com;
    if ($invalid_referer){
        rewrite ^/ http://www.heboan.com/img/nolink.jpg;
        
        #return 404;
    }
}

 

網頁壓縮

gzip on;
#用於開啓gzip,默認是關閉的
gzip_min_length 1k;
#設置容許壓縮的頁面最小字節數,頁面字節數從header頭的content-length中進行獲取。默認值是0,無論頁面多大都壓縮。建議設置大於1k的字節數,小於1k可能會越壓越大
gzip_buffers 4 16k;
#這是系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流,4 16k表明以16k爲單位,安裝原始數據大小以16k爲單位的4倍申請內存
gzip_http_version 1.1;
#識別http的協議版本
gzip_comp_level2;
#設置壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢,比較消耗cpu資源
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif images/png;
#匹配mime類型進行壓縮,不管是否指定,」text/html」類型老是會被壓縮的
gzip_vary on;
#和http頭有關係,加個vary頭,給代理服務器用的,有的瀏覽器支持壓縮,有的不支持,因此避免浪費不支持的也壓縮,因此根據客戶端的HTTP頭來判斷,是否須要壓縮.
gzip_disable 「MSIE [1-6]\.」;
#同時因爲IE6不支持gizp解壓縮,因此在IE6下要關閉gzip壓縮功能
相關文章
相關標籤/搜索