为什么ServerVariable["REMOTE_ADDR"]返回服务器IP ?
本文关键字:quot 返回 服务器 IP REMOTE ServerVariable 为什么 ADDR | 更新日期: 2023-09-27 18:04:11
我有以下代码:
string ip = Request.ServerVariables["REMOTE_ADDR"];
在测试环境中返回用户IP地址,但是当我们将网站部署到生产环境中时,该变量具有承载应用程序的服务器的IP。任何帮助吗?
我猜中间有一个代理。首先使用HTTP_X_FORWARDED_FOR
,如果它为空,然后使用REMOTE_ADDR
来自MSDN文章:
虽然只检索REMOTE_ADDR服务器变量应该是足够的,我发现在线资源建议这样的代码也应该检查HTTP_X_FORWARDED_FOR变量;如果请求来自转换地址的代理服务器,则该变量包含正确的地址。如果请求一个不存在的服务器变量,ServerVariables属性返回一个空字符串。因此,即使这个属性没有出现在我的测试中,尝试检索它的值也不会造成麻烦。
更新:
如果它是一个负载均衡器,你已经改变了设置,你应该询问他们是否可以让原始IP通过。我知道这可以用微软的ISA服务器来完成。
如果这不是一个选项,还有这些其他的服务器变量,你可以尝试,看看他们是否产生一个结果:
"HTTP_X_COMING_FROM"
"HTTP_X_FORWARDED_FOR"
"HTTP_X_FORWARDED"
"HTTP_X_REAL_IP"
"HTTP_VIA"
"HTTP_COMING_FROM"
"HTTP_FORWARDED_FOR"
"HTTP_FORWARDED"
"HTTP_FROM"
"HTTP_PROXY_CONNECTION"
"CLIENT_IP"
"FORWARDED"
为什么使用旧的,vb风格的服务器变量而不是Request.UserHostAddress
?
参见MSDN库。
正如其他人所说,如果请求看起来不像来自原始客户端,您将获得反向代理/SSL终止器的IP地址(至少在ISA服务器中是可能的,可能在大多数其他反向代理中也是如此)。
如果没有,您将获得客户端的公共地址(这可能是客户端站点的路由器地址,因为大多数局域网都是NAT-ed的)。
您在生产环境中的设置与测试环境中的设置有何不同?
您实际上是在获取Web服务器的IP地址,还是同一网络中的其他服务器的IP地址?
我知道这是一个老问题,但我偶然发现它,我想我知道答案。答案比上面的更简单……我今天也遇到了同样的问题。我敢打赌,您正试图从XMLHTTP调用的页面获取IP,该页面将返回服务器IP,因为它是发出请求的页面,而不是用户。