当前位置:   article > 正文

nginx 从$http_x_forwarded_for 中获取第一个参数_nginx x-forwarded-for 只取第一个

nginx x-forwarded-for 只取第一个

Nginx 中,$http_x_forwarded_for 变量通常包含了客户端的原始 IP 地址以及可能经过的代理服务器的 IP 地址列表,这些地址由逗号分隔。如果你想从 $http_x_forwarded_for 中截取第一个参数(即最左边的 IP 地址),你可以使用 Nginx 的内置变量处理功能。

下面是一个示例配置,展示了如何截取 $http_x_forwarded_for 的第一个参数:

  1. http {
  2. ...
  3. map $http_x_forwarded_for $client_ip {
  4. "" $remote_addr;
  5. ~^(?P<first_addr>[^,]+),?.*$ $first_addr;
  6. }
  7. server {
  8. ...
  9. location / {
  10. ...
  11. set $real_ip $client_ip;
  12. ...
  13. }
  14. }
  15. }

在这个配置中:

  1. 我们使用 map 指令创建了一个名为 $client_ip 的新变量,用于存储截取后的 IP 地址。
  2. map 中的正则表达式 ~^(?P<first_addr>[^,]+),?.*$ 用于匹配 $http_x_forwarded_for。这个正则表达式捕获第一个逗号之前的所有内容(即第一个 IP 地址),并将其存储在命名捕获组 first_addr 中。
  3. 如果 $http_x_forwarded_for 为空(即没有代理信息),则 $client_ip 被设置为 $remote_addr,即客户端直接连接到 Nginx 的 IP 地址。
  4. 在 server 块中的 location 里,我们使用了 set 指令将 $client_ip 的值赋给了一个新的变量 $real_ip。你可以根据需要修改这个变量名。

现在,你可以在你的 Nginx 配置中使用 $real_ip 变量来引用截取后的第一个 IP 地址。例如,你可以在 log_format 中使用它来记录这个 IP 地址,或者在 access_log 中使用它来记录访问日志。

真实环境示例如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/184606
推荐阅读
相关标签
  

闽ICP备14008679号