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

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

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

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

原文地址:https://www.cnblogs.com/lonelyxmas/p/10306834.html

时间: 2024-10-21 09:04:17

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

关于nginx反向代理后获取不到客户端的ip地址问题

通过查资料后,再去看了看我的配置文件,结果发现我没有如下配置: nginx反向代理配置时,一般会添加下面的配置: proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header REMOTE-HOST $remote_addr;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; loca

nginx反向代理如何获取真实IP?

由于客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$remote_addr变量拿到的将是反向代理服务器的ip地址. 1.安装--with-http_realip_module要想在程序中取得真实的IP,需对nginx重新编译,新增--with-http_realip_module选项,操作如下: cd /home/xxx/dev/nginx-1.10.2/ ./configure --with-http_realip_module make make ins

nginx 反向代理后session失效

今天遇到一个问题: nginx反向代理tomcat locattion / {             proxy_pass   http://192.168.1.12:11080/iloadsdev-web/;             proxy_set_header   Host    $host;             proxy_set_header   Remote_Addr    $remote_addr;             proxy_set_header   X-Real

Nginx反向代理后配置404页面

关键词:proxy_intercept_errors.fastcgi_intercept_errors   在网上搜索404配置,有很多配置文章,但都是关于fastcgi_intercept_errors的,不过对我们的项目不起作用.我们的项目使用nginx做反向代理,通过域名区分不同的网站,配置fastcgi_intercept_errors不生效,需要配置proxy_intercept_errors.以下罗列出两种配置方式,供大家参考.   1.fastcgi_intercept_error

nexus 绑定负载均衡nginx反向代理后 遇到的https问题。

1.今天搭建maven私服,下载安装好nexus运行后,通过IP可以直接访问,没有问题,如:http://123.123.123.123:8081 就可以进入主页面.没有任何问题. 2.但是他默认是http协议访问,用他自带原生的方法来搞https又得生成证书 比较麻烦,官方文档也推荐用nginx反向代理服务器来搞https.如下: https://help.sonatype.com/repomanager3/security/configuring-ssl 3.我用阿里云生成了一个SSL证书,

多级反向代理java获取真实IP地址

public static String getIpAddress(HttpServletRequest request){ String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"

ngnix反向代理后获取用户真实ip

server { listen 80; listen 802; server_name test111.xxxx.com 118.24.122.131; #charset koi8-r; location / { proxy_pass http://127.0.0.1:82; # $host 变量,Host 为变量名 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #access_log logs/hos

实验:基于nginx反向代理的lnamp搭建WordPress,并实现动静分离

一.实验环境: 1.各软件版本: 系统版本:CentOS Linux release 7.4.1708 (Core) php版本:PHP 7.2 nginx版本:nginx-1.12.2 数据库版本:MariaDB 10 WordPress版本:4.9.4 关闭防火墙与selinux 2.实验架构及IP分配: nginx反向代理一台: IP:192.168.1.105 10.66.16.111安装nginx nginx WEB服务器一台 IP:10.66.16.11 安装nginx Apache

nginx反向代理取得IP地址

nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中. nginx反向代理配置时,一般会添加下面的配置: proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header REMOTE-HOST $remote_