Nginx rewrite 規則 與 proxy_pass 實現
------------------------------------------------------------------------------------------------------
~ 大小寫敏感匹配
~* 大小寫不敏感匹配
!~ 大小寫敏感不匹配
!~* 大小寫不敏感不匹配
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
-f 檢測檔案存在
-d 檢測目錄存在
-e 檢測檔案,目錄或者符號連結存在
-x 檢測檔案可執行
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
break – 停止rewrite檢測,也就是說當含有break flag的rewrite語句被執行時,該語句就是rewrite的最終結果。
last – 停止rewrite檢測,但是跟break有本質的不同,last的語句不一定是最終結果。
redirect – 返回302臨時重定向,一般用於重定向到完整的URL(包含http:部分)
permanent – 返回301永久重定向,一般用於重定向到完整的URL(包含http:部分)
------------------------------------------------------------------------------------------------------
一些實際例子
if($http_host = www.qq.com)
{
rewrite (.*) http://www.baidu.com$1 permanent;
}
// 如果請求的url是 www.qq.com 則永久重定向到 www.baidu.com
rewrite ^/([0-9]+).html$ /user/id=$1 last;
// 如果 www.qq.com/user/id=123456 則顯示為 www.qq.com/123456.html
location ^~ /qq/
{
proxy_pass http://www.qq.com/;
}
//如果請求目錄為 /qq/ 則代理到 www.qq.com 如果www.qq.com/qq/ 則代理到 www.qq.com
location ~ ^/data
{
deny all;
}
// 禁止 data 目錄下所有檔案的請求
if (!-f $request_filename)
{
break;
proxy_pass http://www.qq.com;
}
// 如果請求的檔名不存在 則代理到 www.qq.com
if (-d $request_filename)
{
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
// 如果請求的目錄存在 則自動增加 / 符號
禁止訪問 /svn/ git cvs 這幾個目錄...防止 svn 檔案下載··原始碼洩漏
location ~ .*\.(svn|git|cvs)
{
deny all;
}