Nginx配置文件說明

 -- 重定向Nginx錯誤頁面的方法 --php

 

在nginx的配置文件中,能夠對發生錯誤是的重定向頁面進行配置,在nginx.conf文件中有下面的配置信息:css

error_page 404  /404.html;html

這個404.html保證在nginx主目錄下的html目錄中便可,若是須要在出現404錯誤後直接跳轉到另一個地址,能夠直接設置以下:nginx


error_page 404 http://www.***.com;web


一樣的方式能夠定義常見的40三、500等錯誤。正則表達式


特別注意的是404.html文件頁面大小要超過512k,否則會被ie瀏覽器替換爲ie默認的錯誤頁面。shell

 

                         -- Nginx狀態監控配置 --windows

 

須要注意的是,Nginx默認安裝不包含狀態模塊stub_status,因此,在編譯Nginx的時候,須要添加如下參數:瀏覽器

--with-http_stub_status_module緩存

一旦包含stub_status模塊後,咱們就能夠在配置文件nginx.conf中開啓狀態頁面:

http { server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /nginx-status { stub_status on; access_log off; } } }

以上配置文件中,咱們實際增長的部分是:

location /nginx-status { stub_status on; access_log off; }

一樣,假如Nginx所在服務器的IP爲10.0.0.1,同時指向它的域名爲www.domain.com,這樣一來,Nginx的狀態頁面即是:

http://10.0.0.1/nginx-status

或者

http://www.domain.com/nginx-status

一樣,建議您將以上示例中的nginx-status修改成其它字符串。

另外,Nginx的stub_status也支持受權IP的配置,您能夠參考Nginx的手冊,監控寶提供的服務監控點IP地址爲:

60.195.252.106 60.195.249.83


                               -- Apache監控配置 --

 

修改httpd.conf

在添加Apache監控以前,咱們須要開啓Apache的status模塊,以Apache2.x版本爲例,咱們須要修改httpd.conf,增長如下配置段:

ExtendedStatus On <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 60.195.252.106 Allow from 60.195.249.83 </Location>

這樣一來,假如你的Apache所在服務器的域名和IP地址爲

www.domain.com -> 10.0.0.1

那麼,Apache的狀態頁面地址便爲:

http://www.domain.com/server-status

或者

http://10.0.0.1/server-status

受限訪問設置

咱們固然不但願其它人瀏覽status頁面,因此您能夠作一些限制,首先,對於默認的status地址,您能夠進行修改,好比將:

<Location /server-status>

修改成:

<Location /my-domain-status>

其次,您已經看到,咱們提供了指定的受權IP地址:60.195.252.10六、60.195.249.83,您能夠僅受權這個地址訪問您的status頁面。

 

                                 -- Nginx靜態文件處理 --

 

經過正則表達式,咱們可以讓 nginx 識別出各類靜態文件,例如 images 路徑下的全部請求能夠寫爲:

location ~ ^/images/ {

    root /opt/webapp/images;

}

而下面的配置則定義了幾種文件類型的請求處理方式。

location ~ .(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js|txt)$ {

    root /opt/webapp;

    expires 24h;

}

對於例如圖片、靜態 HTML 文件、js 腳本文件和 css 樣式文件等,咱們但願 Nginx 直接處理並返回給瀏覽器,這樣能夠大大的加快網頁瀏覽時的速度。所以對於這類文件咱們須要經過 root 指令來指定文件的存放路徑,同時由於這類文件並不常修改,經過 expires 指令來控制其在瀏覽器的緩存,以減小沒必要要的請求。 expires 指令能夠控制 HTTP 應答中的「 Expires 」和「 Cache-Control 」的頭標(起到控制頁面緩存的做用)。您可使用例如如下的格式來書寫 Expires:

expires 1 January, 1970, 00:00:01 GMT;

expires 60s;

expires 30m;

expires 24h;

expires 1d;

expires max;

expires off;

這樣當你輸入http://127.0.0.1/1.html的時候會自動跳轉到:

 /opt/webapp/1.html

expires 1 January, 1970, 00:00:01 GMT; expires 60s; expires 30m; expires 24h; expires 1d; expires max; expires off;

location ~ .(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js|txt)$ { root /opt/webapp; expires 24h; }

                        -- Nginx設置上傳目錄無執行權限 --

在windows+iis下,能夠設置上傳目錄,相似:upload,uploadfile,attachments,這樣的目錄下面無腳本執行權限,從而防止非法用戶上傳腳本獲得webshell

nginx上也很簡單,咱們使用location。。以下:

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

{

deny all;

}

其中upload換爲你要設置的目錄名字

這條規則的含義是匹配請求鏈接中開頭是/upload/,中間匹配任意字符,結尾匹配.php或者.php5的頁面,最後利用deny all禁止訪問,這樣就防止了上傳目錄的腳本執行權限

 

禁止訪問http://localhost/path/

location = /path/ {

return 404;

}

 

禁止訪問http://localhost/test/test.php

location ^~ /test

{

deny all;

}

 

禁止訪問某個(test)目錄

location ~^/(test)/{

 deny all;

}

 

                          --Nginx Rewrite設置 --

首先,Nginx能夠用if進行條件匹配,語法規則相似C,舉例以下:


if ($http_user_agent ~ MSIE) {

rewrite  ^(.*)$  /msie/$1  break;

}


一、正則表達式匹配,其中:


* ~  爲區分大小寫匹配

* ~* 爲不區分大小寫匹配

* !~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配


二、文件及目錄匹配,其中:


* -f和!-f用來判斷是否存在文件

* -d和!-d用來判斷是否存在目錄

* -e和!-e用來判斷是否存在文件或目錄

* -x和!-x用來判斷文件是否可執行


如:


if (!-f $request_filename) {

proxy_pass  http://127.0.0.1;

}


其次,Nginx的Rewrite規則與Apache幾乎徹底一致,所不一樣的是最後的flag標記,舉例以下:


rewrite ^/feed/$ http://feed.shunz.net last;


flag標記有:


* last 至關於Apache裏的[L]標記,表示完成rewrite,再也不匹配後面的規則

* break 與last相似

* redirect 返回302臨時重定向

* permanent 返回301永久重定向


Wordpress的重定向規則:


if (!-e $request_filename) {

rewrite ^/(index|atom|rsd).xml$ http://feed.shunz.net last;

rewrite ^([_0-9a-zA-Z-]+)?(/wp-.*) $2 last;

rewrite ^([_0-9a-zA-Z-]+)?(/.*.php)$ $2 last;

rewrite ^ /index.php last;

}


Discuz!的重定向規則:


if (!-f $request_filename) {

rewrite ^/archiver/((fid|tid)-[w-]+.html)$   /archiver/index.php?$1 last;

rewrite ^/forum-([0-9]+)-([0-9]+).html$   /forumdisplay.php?fid=$1&page=$2 last;

rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+).html$  /viewthread.php?tid=$1&extra=page=$3&page=$2 last;

rewrite ^/space-(username|uid)-(.+).html$   /space.php?$1=$2 last;

rewrite ^/tag-(.+).html$ /tag.php?name=$1 last;

}

 

                                     -- Nginx防盜鏈處理 --

location /photos/ {

valid_referers none blocked www.mydomain.com mydomain.com;

if ($invalid_referer) {

return 403;

}

}

相關文章
相關標籤/搜索