在使用nginx时,在dotnet核心中获得真正的客户端IP地址

我正在使用dotnet核心。 我使用Request.HttpContext.Connection.RemoteIpAddress.ToString()来获取IP地址。 当我使用我的IP地址访问我的网站时,我看到正确显示的客户端IP地址。 不过,我想使用https和我使用nginx。 所以在我的位置我写了

  proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $remote_addr; 

当我通过域访问我的网站时,我的IP地址显示为::1127.0.0.1 (每次刷新时它们都会切换)。 我的nginxconfiguration下面我不确定如何告诉.net核心真正的IP地址


 server { server_name www.example.com; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; root /var/www/example.com/; add_header Strict-Transport-Security "max-age=31536000"; index index.html index.htm; log_not_found off; access_log off; #try_files $uri.html $uri $uri/ =404; expires max; default_type text/plain; include /etc/nginx/mime.types; index off; location ~/other/ { index off; autoindex on; } location /abc { proxy_pass http://localhost:5050; proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } 

转发的标题不会被默认处理。 您需要使用HttpOverrides中间件。

  • 添加Microsoft.AspNetCore.HttpOverrides作为依赖项
  • 将以下内容添加到您的Configure方法中:

     app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto });