faq中大部分問題來自HTTP://www.stackoverflow.com與HTTP://www.serverfault.com,有些可能未經過本人驗證。
Nginx如何替換錯誤
Q:能否用503錯誤(負載過高或臨時不可用)來代替502錯誤作為應答返回?
A:配置fastcgi_intercept_errors指令並將其設置為on,然後使用error_page指令:
location / { fastcgi_pass 127.0.0.1:9001; fastcgi_intercept_errors on; error_page 502 =503 /error_page.html; # ...}
Nginx如何重寫404到其他頁面
Q:能否將請求的不存在檔重寫到index.php?
A:使用try_files指令:
try_files $uri $uri/ /index.php
$uri與$uri/將判斷請求的uri是否為一個存在的檔或目錄,如果不是,將被重寫到最後一個參數,即index.php
Nginx如何為代理的請求保存請求的Host頭
Q:當使用nginx的proxy_pass代理一個後端的伺服器(應用)時,如果後端伺服器有多個虛擬主機,代理請求並不能產生正確的應答(nginx發起的請求中沒有Host請求頭),如何解決這個問題?
A:使用proxy_set_header指令設置主機頭:
location / { proxy_pass HTTP://my_app_upstream; proxy_set_header Host $host; # ...}
怎麼配置nginx rewrite,才不會引起瀏覽器url位址重定向?
Q:Apache重寫規則中的P參數代表為強制代理,即使用這個參數可以講一個功能變數名稱重寫到另一個功能變數名稱而不引起瀏覽器網址列的url變化,Nginx中如何實現這一功能?
A:使用rewrite與proxy_pass配合:
location ~ ^/frompath/ { rewrite ^/frompath/(.*)$ /topath/$1 break; proxy_pass HTTP://www.domain.com; }
假如請求為HTTP://www.test.com/frompath/page.php,將被重寫到HTTP://www.domain.com/topath/page.php而不引起瀏覽器網址列中url的變化
如何重寫帶參數的uri?
Q:如何使用Nginx重寫/test.php?id=1&action=delete到/action.php?id=1&action=delete
A:參數保存在變數$query_string中,預設參數會跟在重寫後的url後面,可以在新的規則後面加個問號:
set $query $query_string;rewrite /test.php /action.php?$query?;
如果要求重寫後的參數與重寫前的參數不同,可以針對$query_string變數做正則匹配並配合set設置變數,這樣就可以在重寫規則中使用它們了。