最近在做官網的移轉
舊的主機系統為Window的架構
新的主機則是Linux Docker架構
官網domain移轉後 原本有跑一些.net aspx的服務
就透過nginx轉回舊站上
轉回去是要用return 301 轉址還是用proxy_pass轉呢?
先說結論
如果是會經過瀏覽器顯示的網頁 使用return
如果是程式內執行的api使用proxy_pass
譬如說 www網站要移轉
我們把www給了新的主機, 舊的主機改用old 這網址
因此我們需要在新的主機上 把部分的www轉回old上
在新主機上使用return 網址上看到的網址會是old
如果程式內呼叫的api是透過return轉的
那麼程式內會先收到301 code而發生錯誤 而非你想像的
轉址後的api所產生的結果
而網頁的部分應該是透過browser呈現的
在收到 301 或307 都會自動轉到新的網址上
並不會出錯
在新主機上使用proxy_pass 看到的網址還是www 並不會因為內容是轉回old而顯示old
但是如果網頁的部分也使用proxy_pass 當然還是可以運作
但是每個連結就都會再經過新主機的nginx再轉過一次
另外透過proxy_pass 到old的domain上 是在主機內部運作
有可能發生不認得old這個domain 只要加上resolve dns就可以了
ex
location ~* .(php)$ {
resolver 8.8.8.8 valid=30s;
proxy_set_header Host $host;
proxy_pass https://old.com$request_uri;
}
至於轉址的部分 透過$request_uri就可以取得host後面的完整網址
$args則是取得?後面的query參數
注意的是如果使用$request_uri 就不需要$args
ex: https://old.com/hello/me?name=oz&tel=123
$request_uri = /hello/me?name=oz&tel=123
$args = name=oz&tel=123
沒有留言:
張貼留言