.Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索
程序员文章站
2022-12-16 19:17:27
公司项目最近出现获取访问域名、端口、IP错误现象,通过排查发现, 之前项目一直通过Nginx自定义Headers信息来获取,但最近运维人员失误操作造成自定义Header信息丢失,造成项目拿不到对应的数据。思前想后,想找找官方有没有关于此类问题通用标准化的解决方案。 一、Nginx配置如下: 二、.N ......
公司项目最近出现获取访问域名、端口、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属性配置代理地址范围。官方文档地址:
自此该问题已完美解决,有了标准化的配置方案,减少技术人员更替对项目的不熟造成的一些失误。
上一篇: Java集合及LIst接口
下一篇: 创始人控诉程序员搞死创业公司