在nginx中配置proxy_pass代理轉發時,其後面的url中反斜槓/ 的匹配處理時常出現意想不到的問題發生,如下說明兩種狀況:
(1)若是在proxy_pass後面的url加/,表示絕對根路徑;
(2)若是在proxy_pass後面的url沒有/,表示相對路徑,把匹配的路徑部分也給代理走。php
下面六種狀況分別用 http://127.0.0.1/proxy/test.html 進行訪問測試html
location /proxy/ { proxy_pass http://127.0.0.1/; }
最終會被代理到URL:http://127.0.0.1/test.htmlnginx
location /proxy/ { proxy_pass http://127.0.0.1; }
最終會被代理到URL:http://127.0.0.1/proxy/test.html正則表達式
location /proxy/ { proxy_pass http://127.0.0.1/aaa/; }
最終會被代理到URL:http://127.0.0.1/aaa/test.htmlide
location /proxy/ { proxy_pass http://127.0.0.1/aaa; }
最終會被代理到URL:http://127.0.0.1/aaatest.html測試
location ~ ^/proxy/ { proxy_pass http://127.0.0.1/aaa; }
最終會被代理到URL:http://127.0.0.1/proxy/test.htmlurl
location ~ ^/proxy/ { proxy_pass http://127.0.0.1; }
location /proxy/ { rewrite /proxy/(.*)$ /index.php?page=$1 break; # break標記用於當即中止rewrite模塊的全部指令 proxy_pass http://127.0.0.1/aaa; }
最終會被代理到URL:http://127.0.0.1/index.php?page=test.html代理
location /proxy/ { rewrite /proxy/(.*)$ /index.php?page=$1 break; proxy_pass http://127.0.0.1; }