我有以下难题。由于我们服务器堆栈的布局方式:ELB -> Varnish -> Apache
,我需要 Varnish 从 X-Forwarded-For
中提取最右边的非私有(private) IP 地址header(由ELB合理设置,可信)。
我已经在使用以下正则表达式来获取字符串中的最后一个 IP 地址。我的问题一直在试图弄清楚如何过滤私有(private) IP 地址。
((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))(?!.*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))
这是我一直在测试的私有(private) IP 过滤器。
(^127\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)
请注意,我使用的是正则表达式 VMOD,它允许我访问反向引用。
查看下面的示例,它应该可以说明我要完成的任务:
92.58.12.100, 10.0.120.5 -> 92.58.12.100
172.24.10.15, 127.0.0.1, 95.58.12.100 -> 95.58.12.100
92.58.12.100 -> 92.58.12.100
此外,这是一个 link到 RegExr 示例。任何帮助将不胜感激。
最佳答案
关于regex - 匹配 X-Forwarded-For header 中的最后一个非私有(private) IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35345232/