-- 重定向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;
}
}