[IIS] 修正 reverse proxy 的 host 問題
使用 IIS 做 reverse proxy 時,如果網站需要 OAuth,會自動導去其他網站,但會發現這時候 host 沒有被切過去,導致整個 auth 失敗,來分享一下可以怎麼樣解決這個問題。
問題描述
先把問題描述的清楚一點,如果你的情況剛好跟我一樣,就可以參考參考。
在 window 的 server 上,架了兩個服務,要透過 IIS 設定 domain 對應到這兩個服務,使用 URL rewrite 這個模組中的反向代理 (reverse proxy) 設定。
這邊就不介紹怎麼設定 reverse proxy,最下面會放相關連結可以參考。
- git.com -> 3000
- ci.com -> 8000
當進入 ci 這個 domain 會先轉到 git 這邊做 OAuth 的認證,預期的流程如下
- 在瀏覽器輸入 ci.com
- 轉導至 git.com/login?redirect=ci.company.com
- 帳號登入,導回 ci.com
那問題出現在第二步,host 沒有轉過去,還保留在 ci 這個 domain ,除了 host 以外,其他路徑及參數都是正確。
錯誤的 URL, ci.com/login?redirect=ci.com
解決方法
將 ARR 中的 Reverse rewrite host in response headers 關閉即可。
在 IIS 的 root 找到 Application Request Routing(ARR)
在 ARR 的右側點選 Server Proxy Setting
找到 Reverse rewrite host in response headers
並且取消核選