nginx代理web,后端无法获取用户真实IP

在部署nginx后,后端通过Request.UserHostAddress获取的IP是nginx服务器的IP,而非用户真实IP。解决方案是在nginx配置中设置proxy_set_header以传递真实IP,或者在IIS中使用Url ReWriter修改REMOTE_ADDR变量。这样后端即可正确获取用户IP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部署nginx后,后端用Request.UserHostAddress获取到的总是nginx服务器的ip,而不是用户的真实IP


解决方法:

nginx:

location / {
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   Remote_Addr      $http_true_client_ip;
proxy_redirect     off; 
proxy_pass dest_web; #替换为自己的目标站点
}


IIS:

安装Url ReWriter,新建服务器变量REMOTE_ADDR(Request.UserHostAddress从该变量获取用户IP,所以把这个值替换为真实IP即可)

添加url重写规则,将REMOTE_ADDR替换为{HTTP_X_Forwarded_For}(请注意是下划线,不是中划线,并且以HTTP开头)

配置完成后web.config的system.webServer节点下信息如下:

<rewrite>
            <rules>
                <rule name="fix_ip">
                    <match url=".*" />
                    <serverVariables>
                        <set name="REMOTE_ADDR" value="{HTTP_X_Forwarded_For}" />
                    </serverVariables>
                    <action type="None" />
                    <conditions>
						<add input="{HTTP_X_Forwarded_For}" pattern="^$" negate="true" />
					</conditions>
                </rule>
            </rules>
        </rewrite>



至此大功告成,仅适用于后端需要大量修改代码的情况,用这种方法可以减少很多工作量; 但是如果要改的代码不多,建议还是从代码里通过读取ServerVariables来获取用户IP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值