1. 程式人生 > >.Net Core/Framework之Nginx反向代理後獲取客戶端IP等數據探索

.Net Core/Framework之Nginx反向代理後獲取客戶端IP等數據探索

aspnet keep 關於 asp off seh time 失誤 war

  公司項目最近出現獲取訪問域名、端口、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屬性配置代理地址範圍。官方文檔地址: 點擊這裏

  自此該問題已完美解決,有了標準化的配置方案,減少技術人員更替對項目的不熟造成的一些失誤。

.Net Core/Framework之Nginx反向代理後獲取客戶端IP等數據探索