公司項目最近出現獲取訪問功能變數名稱、埠、IP錯誤現象,通過排查發現, 之前項目一直通過Nginx自定義Headers信息來獲取,但最近運維人員失誤操作造成自定義Header信息丟失,造成項目拿不到對應的數據。思前想後,想找找官方有沒有關於此類問題通用標準化的解決方案。 一、Nginx配置如下: 二、.N ...
公司項目最近出現獲取訪問功能變數名稱、埠、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屬性配置代理地址範圍。官方文檔地址: 點擊這裡
自此該問題已完美解決,有了標準化的配置方案,減少技術人員更替對項目的不熟造成的一些失誤。