我有以下难题.由于我们的服务器堆栈的布局方式:ELB -> Varnish -> Apache我需要Varnish从X-Forwarded-For头部提取最右边的非私有IP地址(由ELB正确设置并且可以信任).
我已经使用以下正则表达式来获取字符串中的最后一个IP地址.我的问题一直在试图弄清楚如何过滤私有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}))
Run Code Online (Sandbox Code Playgroud)
这是我一直在测试的私有IP过滤器.
(^127\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的是正则表达式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
Run Code Online (Sandbox Code Playgroud)
此外,这是一个RegExr示例的链接.任何帮助将不胜感激.