公司項目最近出現獲取訪問域名、端口、IP錯誤現象,通過排查發現, 之前項目一直通過Nginx自定義Headers信息來獲取,但最近運維人員失誤操作造成自定義Header信息丟失,造成項目拿不到對應的數據。思前想后,想找找官方有沒有關於此類問題通用標准化的解決方案。
一、Nginx配置如下:
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_cache_bypass $http_upgrade; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k;
二、.Net Framework Headers 轉接頭替換方案
在web.congfig文件中通過配置aspnet:UseHostHeaderForRequestUrl解決:
1 <appSettings>
2 <add key="aspnet:UseHostHeaderForRequestUrl" value="true"/>
3 </appSettings>
三、.Net Core Header 轉接頭替換方案
Startup.cs 中 Configure 函數 添加如下配置
1 app.UseForwardedHeaders(new ForwardedHeadersOptions 2 { 3 ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto 4 });
通過上面的配置后發現通過 HttpContext.Current.Connection.RemoteIpAddress 還是獲取不到代理前的數據,仔細讀了官方文檔后發現,此配置只對Nginx與項目同時部署在同一台server(本機localhost)時有效,多台server需在項目中配置代理的IP地址才能有效的替換轉接頭信息,代碼如下:
app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto, KnownProxies = { IPAddress.Parse("172.17.0.0") } });
也可通過KnownNetworks屬性配置代理地址范圍。官方文檔地址: 點擊這里
自此該問題已完美解決,有了標准化的配置方案,減少技術人員更替對項目的不熟造成的一些失誤。