[英]get real client ip address in dotnet core when using nginx
我正在使用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;
当我通过域访问我的网站时,我的ipaddress显示为::1
和127.0.0.1
(每次刷新时它们都会切换)。 我的nginx配置在下面,我不确定如何告诉.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 });
我正在使用.Net Core 2.2,并发现以下工作。 它与其他答案(我无法开始工作)略有不同。
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
app.UseForwardedHeaders();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.