当前位置: 移动技术网 > IT编程>开发语言>.net > .Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索

.Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索

2019年01月23日  | 移动技术网IT编程  | 我要评论

吴乙彤,泰国电视剧爱的代价,洛克王国3366

  公司项目最近出现获取访问域名、端口、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属性配置代理地址范围。官方文档地址:

 

  自此该问题已完美解决,有了标准化的配置方案,减少技术人员更替对项目的不熟造成的一些失误。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网