優化進程個數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的鏈接處理機制在不一樣的操做系統會採用不一樣的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壓縮功能