今天試著把 ASP.NET Core 放在 Docker 再利用 IIS Reverse Proxy 來對外時偶然間發現 IP 取值錯誤,利用 Request.HttpContext.Connection.RemoteIpAddress.ToString()
總是取到 Docker Host 的 IP!?
奮鬥了數個小時終於找到了一篇可以用的解答 .net Core X Forwarded Proto not working
原因是 .NETCore 預設只信任 127.0.0.1 傳送的 X-Forwarded-For,而我用了他台主機 Reverse Proxy 所以要調整信任清單,這樣就可以解決 IP 顯示不正確的問題。
Startup.cs
加上這段即會信任所有來源
var forwardingOptions = new ForwardedHeadersOptions() { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }; // its loopback by default forwardingOptions.KnownNetworks.Clear(); forwardingOptions.KnownProxies.Clear(); app.UseForwardedHeaders(forwardingOptions);