赞
踩
在 Nginx 中,$http_x_forwarded_for
变量通常包含了客户端的原始 IP 地址以及可能经过的代理服务器的 IP 地址列表,这些地址由逗号分隔。如果你想从 $http_x_forwarded_for
中截取第一个参数(即最左边的 IP 地址),你可以使用 Nginx 的内置变量处理功能。
下面是一个示例配置,展示了如何截取 $http_x_forwarded_for
的第一个参数:
- http {
- ...
- map $http_x_forwarded_for $client_ip {
- "" $remote_addr;
- ~^(?P<first_addr>[^,]+),?.*$ $first_addr;
- }
-
- server {
- ...
- location / {
- ...
- set $real_ip $client_ip;
- ...
- }
- }
- }
在这个配置中:
map
指令创建了一个名为 $client_ip
的新变量,用于存储截取后的 IP 地址。map
中的正则表达式 ~^(?P<first_addr>[^,]+),?.*$
用于匹配 $http_x_forwarded_for
。这个正则表达式捕获第一个逗号之前的所有内容(即第一个 IP 地址),并将其存储在命名捕获组 first_addr
中。$http_x_forwarded_for
为空(即没有代理信息),则 $client_ip
被设置为 $remote_addr
,即客户端直接连接到 Nginx 的 IP 地址。server
块中的 location
里,我们使用了 set
指令将 $client_ip
的值赋给了一个新的变量 $real_ip
。你可以根据需要修改这个变量名。现在,你可以在你的 Nginx 配置中使用 $real_ip
变量来引用截取后的第一个 IP 地址。例如,你可以在 log_format
中使用它来记录这个 IP 地址,或者在 access_log
中使用它来记录访问日志。
真实环境示例如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。