Nginx優化

##############基於LAMP(LNMP)問架構深度優化---配置文文件#################javascript

 

三、修改配置文件參數實現隱藏版本號php

a、nginx隱藏版本號css

syntax  server_tokens on|off;html

在nginx配置文件中加入「server_token off;」前端

httpjava

{node

       .........linux

       server_tokens off;nginx

       .........web

}

 

b、Apache隱藏版本號

[root@LAMP ~]# egrep "Server|ServerS" /application/apache/conf/extra/httpd-default.conf             

# This configuration file reflects default settings for Apache HTTP Server.

# ServerName directive.

# ServerTokens

# This directive configures what you return as the Server HTTP response

ServerTokens Full

# Set to "EMail" to also include a mailto: link to the ServerAdmin.

ServerSignature On

[root@LAMP ~]# 

 

其中黑體部分改分別改成以下:

ServerTokens Prod

ServerSignature Off

 

四、修改nginx/Apache的默認用戶及用戶組nobody

 a、啓動nginx服務,使用的默認用戶爲nobody:

 爲了防止黑客猜到這個用戶,咱們須要更改下特殊的用戶名,提供nginx服務用。

 b、更改默認用戶的方法有兩種,第一種爲:

    user:nginx nginx;

設置Nginx Worker進程運行的用戶以及用戶組

  useradd nginx -s /sbin/nologin -M  <==不須要有系統登陸權限,應該禁止其登陸,至關於Apache裏的用戶同樣

 c、更改默認用戶的方法有兩種,第一種如上面所說,第二種爲:

./configure --user=nginx --group=nginx --prefix=/application/nginx1.6.2 --with-http_stub_status_module --with-http_ssl_module

 提示:其實在前面編譯nginx服務時,咱們就這樣帶着參數編譯的。

 d、Apache默認用直接修改配置文件內容:

[root@LAMP ~]# egrep "User|Group"  /application/apache/conf/httpd.conf

# User/Group: The name (or #number) of the user/group to run httpd as.

User www

Group www

 

補充知識:

配置nginx worker進程個數

  在高併發場景,咱們須要事先啓動更多的nginx進程以保證快速響應並處理用戶的請求。具體的配置參數以下:

  worker_processes 8  <===指定了Nginx須要開啓的進程數,建議指定和CPU的數量相等或者乘2的進程數

  work_processes 參數開始的設置能夠等於cpu的個數或者核數(work_cpu_affinity參數中的配置能夠指定第一個到最後一個進程分別使用的哪一個cpu),進程多一些,其實提供服務就不會臨時啓動新進程提供服務,減小了系統開銷,提高了服務速度。特殊場合也能夠考慮提升至CPU*2 的進程數,具體狀況要跟根據實際的業務來選擇,由於這個參數,除了CPU核數的影響外,和硬盤存儲的數據以及負載也有關。

 

查看linux服務器的核數的方法:

[root@LNMP application]# grep "physical id" /proc/cpuinfo

physical id     : 0

physical id     : 0

physical id     : 1

physical id     : 1

[root@LNMP application]# 

能夠按照physical數量設置,或者將目前數量*2

 

五、事件處理模型優化

  nginx的鏈接處理機制在於不一樣的操做系統採用不一樣的IO模型,在linux使用epoll的IO多路複用模型,在FreeBSD使用kqueue的IO多路複用模型,在Solaris使用/dev/poll方式的IO多路複用模型,在Windows中使用的是icop等等。

   根據系統類型不一樣選擇不一樣use[kqueue|rtsig|epoll|/dev/poll|select|poll];該參數結合系統使用,不一樣系統使用參數不一樣,咱們使用的是Centos6.5,所以咱們調整爲epoll模型

 

  具體參數配置以下:

    events   <====envents指令是設定nginx的工做模式及鏈接數上限

    {

     use epoll;

     }

 

六、調整單個進程容許客戶端最大鏈接數

    這個值根據根據具體服務器性能和程序的內存使用量來制定(一個進程啓動使用的內存根據程序肯定)

   events <====指令設定Nginx的工做模式及鏈接數上限

{

worker_connections 20480;

}

  worker_connections也是個模塊指令,用於定義Nginx每一個進程的最大鏈接數,默認是1024,客戶端最大鏈接數由worker_processes和worker_connections決定,即Max_client=worker_processes * worker_connections,進程的最大鏈接數受linux系統進程的最大打開文件數限制,在執行操做系統命令「umilited -HSn 65535」或者配置相應的文件後,worker_connections的設置才生效

 

七、配置每一個進程最大文件打開數

   worker_rlimit_nofile 65536;

  該參數的意思爲每一個進程打開的最大文件數,能夠設置爲系統優化受的ulimit -HSn的結果,在第一章系統安裝時調整文件描述符和這個處理的一個問題。

 

  詳細查閱:http://nginx.org/en/docs/ngx_core_module.html

 

八、優化服務器名字的hash表大小

確切名字和通配符名字存儲在哈希表中。哈希表和監聽端口關聯,每一個端口都最多關聯三張表:確切的名字的哈希表,以星號(*)起始的通配符名字的哈希表和以星號結束的通配符名字的哈希表。哈希表的尺寸在配置階段進行了優化,能夠以最小的CPU緩存命中失敗來找到名字。nginx首先搜索切確名字的的哈希表,若是沒有找到,則搜索以星號(*)其實的通配符名字的哈希表,若是仍是沒有找到,繼續搜索以星號結束的通配符名字的哈希表。由於名字是按照域名的節點來搜索的。因此搜索通配符名字的哈希表比搜索確切名字的哈希錶慢。注意:nginx.org存儲在通配符名字的哈希表中,而不在確切名字的哈希表中。正則表達式是一個一個串行的測試,因此是最慢的,並且不可擴展。因爲上述緣由,咱們通常儘量的使用確切的名字。好比若是使用nginx.org和www.nignx.org來訪問服務器是最頻繁的,那麼咱們明確的定義出來對訪問搜索域名的速度效率來講更有效:

 

  若是定義了大量名字,或者定義了很是長的名字,那就須要在php配置模塊中調整server_names_hash_max_size和server_names_hash_bucket_size的值。

server_names_hash_bucket_size的默認值多是32,或者是64,或者是其餘值,取決於CPU的緩存行的長度。若是這個值是32,那麼定義「too.long.server.name.nginx.org」做爲虛擬機主機名就會失敗,顯示以下錯誤信息:

 

 could not build the server_names_hash,

 you should increase server_names_hash_bucket_size;32

出現這種狀況,那就須要設置值擴大一倍:

 

 http{

  server_names_hash_bucket_size 64;

 

 }

 

九、開啓高效的文件傳輸模式

 

   sendfile on; <====sendfile參數用戶開啓文件高效傳輸模式,同時將tcp_nopush和tcp_nodelay兩個指令設置爲on用於防止網絡阻塞。

 

 

十、設置鏈接的超時時間

 

   php服務,建議但願短鏈接;java建議長鏈接

    

    keepalive_timeout 60; 

<==設置客戶端保持會話的超時時間,超過這個時間,服務器會關閉鏈接。

  

    tcp_nodelay on;

<==打開tcp_nodelay,包含了keepalive參數纔有效

    

    client_header_timeout 15;

<==設置客戶端請求讀取超時時間,若是超過這個時間,客戶端還沒發送任何數據,Nginx將返回「Rquest timeout (408)」錯誤.

 

    client_body_timeout 15;

<==設置客戶端請求主體讀取超時時間,若是超過這個時間,客戶端還沒發送任何數據,Nginx將返回「Request time out(408)」錯誤,默認值是60.

 

    send_timeout 15;

<==指定響應客戶端的超時時間,這個超時時間僅限於兩個鏈接活動之間的時間,若是超過這個時間,客戶端沒有任何活動,Nginx將會關閉鏈接。

 

十一、上傳文件大小限制(動態應用)

     主配置文件里加入以下參數,具體大小根據你本身的業務作調整。

 

     client_max_body_size 10m;

十二、fastcgi調優(配合PHP引擎動態服務)

 

    fastcgi_connect_timeout 300;

<==指定鏈接到後端FastCGI的超時時間

 

    fastcgi_send_timeout 300;

<==向Fastcgi傳送請求的超時時間,這個值是指已經完成兩次握手後向FastCGI傳送請求的超時時間。

 

    fastcgi_read_timeout 300;

<==指定接收FastCGI應答的超時時間,這個值是指已經完成兩次握手後接收FastCGI應答的超時時間

 

    fastcgi_buffer_size 64k;

<==指定讀取FastCGI應答第一部分須要用多大的緩衝區,這個值表示將使用1個64k的緩衝區讀取應答的第一部分(應答頭),能夠設置爲fastcgi_buffers 選項指定的緩衝區大小。

 

 

   fastcgi_buffers 4  64k;

 

<==指定本地須要用多少和多大的緩衝區來緩衝FastCGI的應答請求,若是一個PHP腳本產生的頁面大小爲256K,那麼會爲其分配4個64KB的緩衝區來緩存;若是頁面大小大於256KB,那麼大於256KB的部分會緩存到Fastcgi_temp指定的路徑中,可是這並非好方法;由於內存中的數據處理速度要快於硬盤,通常這個值應該爲站點中PHP腳本所產生的頁面大小的中間值,若是站點大部分腳本產生的頁面大小爲256KB,那麼能夠把這個值設置爲「16 16K」、「4  64K」等。

 

    fastcgi_busy_buffers_size 128k;

<==建議爲fastcgi_buffers 的兩倍

 

    fastcgi_temp_file_write_size 128k;

<==在寫入fastcgi_temp_path時將用多大的數據塊,默認值是fastcgi_buffers的兩倍,設置上述數值設置過小時若負載上來時能報 502 Bad Gateway

 

    fastcgi_cache  ucode_nginx;

<==表示開啓FastCGI緩存併爲其指定一個名稱,開啓緩存很是有用,能夠有效下降CPU的負載,而且防止502錯誤的發生,可是開啓緩存也可能會引發其餘問題,要根據具體狀況選擇。

 

 

    fastcgi_cache_valid 200 302 1h;

<==用來指定應答代碼的緩存時間,實例中的值表示將200和302應答緩存一個小時。

 

    fastcgi_cache_valid 301 1d;

<==將301應答緩存1天

 

    fastcgi_cache_valid any 1m;

<==將其餘應答緩存爲1分鐘

 

    fastcgi_cache_min_uses 1;

<==緩存在fastcgi_cache_path指令inactive參數時間內的最少使用次數

 

1三、修改nginx源碼文件進行優化:具體優化避免顯示header爲nginx和錯誤提示顯示nginx關鍵字和版本號

 

a、隱藏nginx做爲header頭

修改nginx源碼文件中的vim src/http/ngx_http_header_filter_module.c

wKioL1bmHYKCPg3EAAAhJff1enM597.png

光標分別移動到如下兩行(4九、50)修改紅色部分關鍵字爲其餘內容:

wKioL1bmHeihXyhaAAAl5p2V7x8024.png

這裏改成Web SERVER和Web Server test

wKioL1bmL-KBIsyLAAAhojLtWy8378.png

即修改以下字段:

"Server: nginx" CRLF;

"Server: NGINX_VER"

修改成:

"Server: Web Server" CRLF;

"Server: Web Server test"

 

從新編譯安裝nginx,而後啓動,經過curl -I 10.0.0.10 查看結果:

wKioL1bmKy2wLepxAAA36abgfjc198.png

 

b、隱藏錯誤信息避免爆出關鍵字nginx及其版本號

修改錯誤頁面信息修改文件路徑爲:

 vim nginx-1.7.10/src/http/ngx_http_special_response.c

wKioL1bmN6Pi17xOAAAkm_jdyzY573.png

修改成:

wKioL1bmN63x5cHOAAAehyhdw6A174.png

而後從新編譯、安裝、啓動nginx

wKioL1bmOD-SHJdhAAA0eWXUH6c880.png

 

提示:目前測試nginx版本是nginx-1.7.10,對於nginx其餘版本能夠根據須要修改對應參數,通常修改參數爲:

 

static u_char ngx_http_error_full_tail[] =

"<hr><center>"NGINX_VER"</center>" CRLF

"</body>" CRLF

"</html>" CRLF

;

 

static u_char ngx_http_error_tail[] =

"<hr><center>nginx</center>" CRLF

"</body>" CRLF

"</html>" CRLF

;

對應nginx-1.6版本只須要修改<center>nginx</center>便可

 

1四、配置nginx gzip壓縮功能

 

    nginx gzip 壓縮模塊提供了對文件內容壓縮的功能,容許nginx服務器將輸出內容在發送之到客戶端以前根據具體的策略進行壓縮,以節約網站帶寬,同時提高用戶體驗。

    此功能同Apache的mod_deflate壓縮功能,依賴ngx_http_gzip_module模塊,默認已安裝,咱們已經詳細介紹過壓縮功能。

    常見要壓縮的的內容,如全部程序文件(js,css,html);而圖片、視頻、flash文件等文件不進行壓縮。

  一、對應的壓縮參數說明以下:

     gzip on;

<==開啓gzip壓縮功能。

    gzip_min_length 1k;

<==設置容許壓縮的頁面最小字節數,頁面字節數從header頭的Content-Length中獲取,默認值是0,無論頁面多大都進行壓縮,建議設置成大於1K,若是小於1K可能會越壓縮越大。(即:大於1k才壓縮,小於1k不壓縮)

 

    gzip_buffers 4     16k;

<==壓縮緩衝區大小。表示申請4個單位爲16k的內存做爲壓縮結果流緩存,默認值是與原始數據大小相同的內存空間來存儲gzip壓縮結果。

 

    gzip_http_version 1.0;

<==壓縮版本(默認1.1,前端squid2.5時使用1.0)用戶設置識別http協議版本,默認是1.1,默認大部分瀏覽器已經支持GZIP

解壓,使用默認便可

  

   gzip_comp_level 2;

<==壓縮比率。用來指定GZIP壓縮比,1壓縮比最小,處理速度最快;9壓縮比例最大,傳輸速度最快,但處理最慢,也比較消耗cpu資源。

 

   gzip_types text/plain  application/x-javascript text/css application/xml;

 

<==用來指定壓縮類型,「text/hmtl」類型老是會被壓縮。

 

   gzip_vary on;

<==veray header 支持。該選項可讓前端的緩存服務器緩存通過GZIP壓縮的頁面,例如使用squid緩存通過nginx壓縮的數據。

 

二、完整的配置

 

   gzip on;

   gzip_min_length 1;

   gzip_buffers 4 32k;

   gzip_http_version 1.1;

   gzip_comp_level 9;

   #gzip_types text/plain application/x-javascript text/css application/xml;

   gzip_types text/html text/css text/xml application/javascript;

   gzip_vary on;

 

  更多官方資料http://nginx.org/en/docs/http/ngx_http_gzip_module.html

 

  提示:gzip_types類型不一樣的版本可能會不一樣,對應的版本類型到文件mimes.types中查找:

  在該路徑下查看當前nginx的安裝目錄下的mimes.types中查找匹配的類型:

[root@LNMP conf]# cat mime.types

types {

    text/html                             html htm shtml;

    text/css                              css;

    text/xml                              xml;

    image/gif                             gif;

    image/jpeg                            jpeg jpg;

    application/javascript                js;

    application/atom+xml                  atom;

    application/rss+xml                   rss;

 

    text/mathml                           mml;

    text/plain                            txt;

    text/vnd.sun.j2me.app-descriptor      jad;

    text/vnd.wap.wml                      wml;

    text/x-component                      htc;

 

    image/png                             png;

    image/tiff                            tif tiff;

    image/vnd.wap.wbmp                    wbmp;

    image/x-icon                          ico;

    image/x-jng                           jng;

    image/x-ms-bmp                        bmp;

    image/svg+xml                         svg svgz;

    image/webp                            webp;

 

    application/font-woff                 woff;

    application/java-archive              jar war ear;

    application/json                      json;

    application/mac-binhex40              hqx;

    application/msword                    doc;

    application/pdf                       pdf;

    application/postscript                ps eps ai;

    application/rtf                       rtf;

    application/vnd.apple.mpegurl         m3u8;

    application/vnd.ms-excel              xls;

    application/vnd.ms-fontobject         eot;

    application/vnd.ms-powerpoint         ppt;

    application/vnd.wap.wmlc              wmlc;

    application/vnd.google-earth.kml+xml  kml;

    application/vnd.google-earth.kmz      kmz;

    application/x-7z-compressed           7z;

    application/x-cocoa                   cco;

    application/x-java-archive-diff       jardiff;

    application/x-java-jnlp-file          jnlp;

    application/x-makeself                run;

    application/x-perl                    pl pm;

    application/x-pilot                   prc pdb;

    application/x-rar-compressed          rar;

    application/x-redhat-package-manager  rpm;

    application/x-sea                     sea;

    application/x-shockwave-flash         swf;

    application/x-stuffit                 sit;

    application/x-tcl                     tcl tk;

    application/x-x509-ca-cert            der pem crt;

    application/x-xpinstall               xpi;

    application/xhtml+xml                 xhtml;

    application/xspf+xml                  xspf;

    application/zip                       zip;

 

    application/octet-stream              bin exe dll;

    application/octet-stream              deb;

    application/octet-stream              dmg;

    application/octet-stream              iso img;

    application/octet-stream              msi msp msm;

 

    application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;

    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;

    application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;

 

    audio/midi                            mid midi kar;

    audio/mpeg                            mp3;

    audio/ogg                             ogg;

    audio/x-m4a                           m4a;

    audio/x-realaudio                     ra;

 

    video/3gpp                            3gpp 3gp;

    video/mp2t                            ts;

    video/mp4                             mp4;

    video/mpeg                            mpeg mpg;

    video/quicktime                       mov;

    video/webm                            webm;

    video/x-flv                           flv;

    video/x-m4v                           m4v;

    video/x-mng                           mng;

    video/x-ms-asf                        asx asf;

    video/x-ms-wmv                        wmv;

    video/x-msvideo                       avi;

}

 

 

1五、nginx expire緩存功能

 

   在網站開發和運營中,對於圖片,CSS,JS等元素更改機會較少,特別是圖片,這時能夠將圖片設置在瀏覽器本地緩存365天或者更長,CSS,JS,hmtl等代碼緩存10天,這樣用戶第一次打開頁面後,會在本地的瀏覽器緩存相應的上述內容,這樣緩存能夠提升下次用戶打開相似頁面的加速度,並節省服務器端大量的帶寬。此功能同Apache的expire,這裏經過location的功能,將須要緩存的擴展名列出來,而後指定緩存時間。

 

一、根據文件擴展名進行判斷,添加expire功能範例

 

企業網站緩存日期案例:

一、51cto 1周

二、sina 15天

三、京東 25年

四、淘寶 10年

 

通常不但願被緩存的內容:

1)廣告圖片

2)網站流量統計工具

3)更新頻繁的文件(google的logo)

 

配置示例:

location ~.*\.(gif|jpg|jpeg|png|bpm|swf)$

{

     expires  365d;

}

 location ~.*\.(js|css)?$

{

     expires  30d;

}

 

location標籤要配到server標籤裏

 

 

location ~^/(images|javascript|js|css|flash|media|static)/

{

     expire 360d;

}



Nginx防蜘蛛爬蟲處理

 

假定一個場景:某個網站它可能不但願被網絡爬蟲抓取,例如測試環境不但願被抓取,以避免對用戶形成誤導,那麼須要在該網站中申明,本站不但願被抓取。有以下方法:

方法一:修改nginx.conf,禁止網絡爬蟲的ua,返回403。

server { 

listen 80; 

server_name 127.0.0.1; 

#添加以下內容便可防止爬蟲

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") 

return 403; 

 

 

方法2:網站更目錄下增長Robots.txt,放在站點根目錄下。

在http://tool.chinaz.com/robots/站點能夠針對如今的搜索引擎按照想要的規則生成robots.txt文件。

知識擴展:

       robots.txt是搜索引擎中訪問網站的時候要查看的第一個文件。robots.txt文件告訴蜘蛛程序在服務器上什麼文件是能夠被查看的。

   當一個搜索蜘蛛訪問一個站點時,它會首先檢查該站點根目錄下是否存在robots.txt,若是存在,搜索機器人就會按照該文件中的內容來肯定訪問的範圍;若是該文件不存在,全部的搜索蜘蛛將可以訪問網站上全部沒有被口令保護的頁面。百度官方建議,僅當您的網站包含不但願被搜索引擎收錄的內容時,才須要使用robots.txt文件。若是您但願搜索引擎收錄網站上全部內容,請勿創建robots.txt文件。

Robots協議是國際互聯網界通行的道德規範,基於如下原則創建:

一、搜索技術應服務於人類,同時尊重信息提供者的意願,並維護其隱私權;

二、網站有義務保護其使用者的我的信息和隱私不被侵犯。

固然,若是搜索引擎不遵照約定的Robots協議,那麼經過在網站下增長robots.txt也是不起做用的。(在正式環境中,能夠適當容許搜索引擎抓取收錄)

 

爬蟲文件robots.txt

wKioL1bmQqbBAt7pAAAl44Fa0pE447.png

 

 

1六、nginx日誌相關優化與安全

 

 nginx沒有相似Apache的cronolog日誌分割處理的功能,可是,能夠經過nginxNginx的信號控制功能或者reload重載,而後利用腳原本實現日誌的自動切割。

 

  一、配置日誌切割腳本: 

[root@masterserver conf]# cd  

[root@masterserver]# mkdir -p /server/scripts/  

[root@masterserver]# cd /server/scripts/

[root@masterserver scripts]# cat cut_nginx_log.sh  

cd /application/nginx/logs && \

/bin/mv www_access.log www_access_$(date +%F -d -1day).log

/application/nginx/sbin/nginx -s reload

[root@masterserver scripts]#

提示:實際上腳本的功能很簡單,就是改名日誌,而後從新加載nginx,從新生成文件記錄日誌

 

 二、將這段腳本保存後加入到Linux的crontab守護進程,讓此腳本在天天凌晨0點執行,就能夠實現日誌的天天分割功能了,操做結果以下:

 

 [root@masterserverscripts]# crontab -l |tail -2

#cut nginx log on 00:00 everynight

00  00 * * * /bin/sh  /server/scripts/cut_nginx_log.sh >/dev/null 2>&1

[root@masterserver scripts]#

 

[root@masterserver logs]# ll

total 40

-rw-r--r-- 1 root root 1119 Mar 14 11:59 access.log

-rw-r--r-- 1 root root 1000 Mar 14 11:59 error.log

-rw-r--r-- 1 root root    6 Mar 14 11:57 nginx.pid

-rw-r--r-- 1 root root 1119 Mar 14 12:58 www_access_2016-03-07.log

-rw-r--r-- 1 root root 1119 Mar 14 12:58 www_access_2016-03-08.log

-rw-r--r-- 1 root root 1119 Mar 14 12:58 www_access_2016-03-09.log

-rw-r--r-- 1 root root 1119 Mar 14 12:58 www_access_2016-03-10.log

-rw-r--r-- 1 root root 1119 Mar 14 12:58 www_access_2016-03-11.log

-rw-r--r-- 1 root root 1119 Mar 14 12:58 www_access_2016-03-12.log

-rw-r--r-- 1 root root 1119 Mar 14 12:58 www_access_2016-03-13.log

[root@masterserver logs]# 

 

1七、不記錄不須要訪問的日誌

   對於健康檢查的某些(圖片,js,css)的日誌,通常不須要記錄,由於在統計PV時時按照頁面計算,並且日誌寫入頻繁會消耗IO,下降服務性能。具體語法以下:

 

     location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)${

 

     access_log off;

}

 

    Apache的處理配置方法:

  一、須要根據訪問日誌統計pv時

      由於統計pv時,一個頁面纔算一個PV圖片,JS,CSS等只是圖片的元素,若是記錄了,日誌計算PV就不許確了。

   配置方法:

    <FilesMatch "\.(css|js|gif|jpg|ico|swf)">

        SetEnv IMAG 1

    </FilesMatch>

 

    日誌配置:

     CustomeLog "|/usr/local/sbin/cronolog /app/logs/%Y%/%m/access_%Y%m%d.log" combined env=!IMAG

     CustomeLog "|/usr/local/sbin/cronolog /app/logs/%Y%/%m/%d/%Haccess_%Y%m%d.log" combined env=!IMAG

 

1八、訪問日誌的權限設置

 

  假如日誌目錄爲/app/logs,則受權方法

 

chown -R root.root /app/logs

chown -R 700 /app/logs

 

nginx、Apache主進程都是用root用戶啓動,因此不給權限也能夠寫入,即700程序能夠往裏面寫入數據

 

1九、根據擴展名限制程序和文件的訪問題(一樣適用於nginx)

   爲了保證Apache的網站不遭受木馬入侵上傳及修改文件。

 

 安全的權限: 

一、全部站點目錄的用戶和組都應該爲root,

二、全部目錄默認權限是755;

三、全部文件默認權限爲644;

 

注意:網站服務的用戶不能用root,

 

以上權限的設置能夠作到防止黑客上傳木馬,以及修改站點文件,可是,合理的用戶上傳內容也被拒之門外了,那麼如何解決可讓合法的用戶上傳文件又不至於被黑客利用攻擊呢?

 

這就是對業務進行分離,在比較好的網站業務架構中,應該把資源文件,包括用戶上傳的圖片,附件等的服務和程序

 

大多數公司的不安全的受權以下:

1)chmod -R 777 /sitedir(最不安全)

2) chmod -R apache.apache /sitedir(最不安全)

 

若是大多數公司受權通常的受權,會給網站帶來最大的安全隱患。

 

20、nginx站點目錄及文件URL訪問控制

 

 nginx下禁止訪問資源目錄下的php程序文件,配置方法以下:

 

 範例1:nginx配置限制指定目錄下的php程序被解析

 location ~ ^/images/.*\.(php|php5)$

  {

       |deny all;

  

 }

 

 location ~ ^/static/.*\.(php|php5)$

 

{

 

        deny all;

}

 

location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$

{

       deny all;

}

 

這些目錄的限制必須寫在如下配置的前面:

location ~ .*\.(php|php5)?$

{

   fastcgi_pass  127.0.0.1:9000

   fastcgi_index index.php

   include fcgi.conf

}

 

 

範例2:nginx下配置禁止訪問*.txt文件

location ~* \.(txt|doc)${

 

if (-f $request_filename){

 

root /data/www/www;

#rewrite ...能夠重定向到某個URL

  break

 

    }

}

 

location ~*\.(txt|doc){

 

 root /data/www/www;

 deny all;

 

}

 

 

2一、禁止訪問指定目錄下的全部的文件和目錄

 

範例1:配置禁止訪問指定的單個或多個目錄

 

單個目錄:

location ~ ^/(static)/{

 

     deny all;

}

 

 

location ~ ^/static {

 

     deny all;

}

 

 

多個目錄:

 

location ~ ^ /(static|js){

     deny all;

 

}

 

 

2二、限制來源IP訪問

使用ngx_http_acces_module限制ip訪問

 

範例1:禁止某目錄讓外界訪問,但容許某IP訪問該目錄,且支持PHP解析

 

location ~ ^ /oldboy/{

       allow 202.111.12.121;

       deny all;

}

 

location ~ .*\.(php|php5)?${

 

}

 

範例2限制及指定IP或者ip段訪問

 

location / {

  deny 192.168.1.1;

  allow 192.168.1.0/24;

  allow 10.1.1.0/16;

  deny all;

 

}

 

參考:http://nginx.org/en/docs/http/ngx_http_access_module.html

 

2三、禁止資源目錄解析PHP程序

 

方法1:提示下載不解析(針對APACHE的設置)

<Directory ~ "/application/www/etiantian/bbs/attachments">

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

 

php_flag engine off #注意這行

</Directory>

相關文章
相關標籤/搜索