nginx之带有 http2 的 nginx 背后的 asp.net 核心之远程 ip 始终为 127.0.0.1

qlqwjy 阅读:17 2024-10-24 08:47:37 评论:0

我在 Ubuntu 16.04 上的 Nginx 后面托管了一个 asp.net net core 2.0 应用程序。

我的设置是这样的:

server { 
        listen 443 ssl http2;  
        listen [::]:443 ssl http2; 
        ssl on; 
... 
    location / { 
                    proxy_pass http://localhost:5000; 
                    proxy_http_version 1.1; 
                    proxy_set_header Upgrade $http_upgrade; 
                    proxy_set_header Connection keep-alive; 
                    proxy_set_header Host $host; 
                    proxy_cache_bypass $http_upgrade; 
                    proxy_set_header X-Forwarded-Proto-Version $http2; 
                    client_max_body_size 32m; 
                    keepalive_timeout 200; 
                    send_timeout 20; 
                    client_body_timeout 50; 
            } 
} 

而且我在 Startup.cs

中也有这些设置
app.UseForwardedHeaders(new ForwardedHeadersOptions 
            { 
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | 
                                   ForwardedHeaders.XForwardedProto 
            }); 

但每次我尝试获取 HttpContext.Connection.RemoteIpAddress 时,它都会返回 127.0.0.1

我应该怎么做才能解决这个问题并获得真实的 IP 地址?

请您参考如下方法:

好的,我自己找答案。

不需要这一行(但似乎不要做任何有害的事情)

proxy_set_header X-Forwarded-Proto-Version $http2;  

但我们需要告诉 Nginx 使用此行设置 X-Forwarded-For header :

proxy_set_header X-Forwarded-For $remote_addr;


标签:nginx
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号