经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
.net 获取客户端真实ip
来源:cnblogs  作者:IWing  时间:2023/12/5 12:15:41  对本文有异议

Nginx 如何设置


情况1

在只有1层nginx代理的情况下,设置nginx配置“proxy_set_header X-Forwarded-For $remote_addr;”。(此时$remote_addr获取的是用户的真是ip)

情况2

在有多层反向代理的情况下,

1)设置“最外层”nginx配置和情况1一样“proxy_set_header X-Forwarded-For $remote_addr;”。

2)除了“最外层”之外的nginx配置“proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;”。

注意
如果你的 nginx 使用了 http_realip_module 模块,那么必须再配置一下受信任的cdn、nginx节点,否则 nginx 会认为X-Forwarded-For的内容都是可靠的,无法识别别人伪造的 X-Forwarded-For 头。

  1. proxy_pass http://8.2.158.1:11029;
  2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  3. set_real_ip_from 8.168.31.5;
  4. set_real_ip_from 8.168.31.6;
  5. set_real_ip_from 16.18.22.0/24;

8.168.31.5、8.168.31.6、16.18.22.*网段 是cdn的ip地址,告诉 nginx 可以信任

Asp.Net 获取客户端真实ip


编写一个静态方法:

  1. public static string GetRemoteIpAddress(HttpContext httpContext, string[] trustXForwardedFor)
  2. {
  3. var remoteIpAddr = httpContext.Connection.RemoteIpAddress.ToString();
  4. if (trustXForwardedFor != null && trustXForwardedFor.Length > 0 && httpContext.Request.Headers.TryGetValue("X-Forwarded-For", out StringValues x_for))
  5. {
  6. var x_forArr = x_for.ToString().Split(',').Select(m => m.Trim()).Where(m => m.Length > 0).ToArray();
  7. if (trustXForwardedFor.Contains(remoteIpAddr))
  8. {
  9. for (int i = x_forArr.Length - 1; i >= 0; i--)
  10. {
  11. var ip = x_forArr[i];
  12. if (trustXForwardedFor.Contains(ip) == false)
  13. return ip;
  14. }
  15. }
  16. else
  17. {
  18. return remoteIpAddr;
  19. }
  20. }
  21. return remoteIpAddr;
  22. }

然后在controller内部调用:

  1. GetRemoteIpAddress(this.HttpContext, new string[] { "127.0.0.1", "::ffff:127.0.0.1", "172.19.149.142" })

"127.0.0.1", "::ffff:127.0.0.1", "172.19.149.142" 这是指定3个被排除的反向代理以及cdn的ip , 如果不传这些ip,那就表示服务器那边没有部署nginx这类型的反向代理服务,也没有使用cdn。

JMSFramework 微服务获取客户端真实ip


JMS 的 controller 自身就包含 GetRemoteIpAddress 方法,在controller 里面直接调用即可。

  1. this.GetRemoteIpAddress(new string[] { "127.0.0.1", "::ffff:127.0.0.1", "172.19.149.142" });

原文链接:https://www.cnblogs.com/IWings/p/17876876.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号