nginx lua判断变量是否存在
背景:
公司现有一台nginx+lua程序对外提供地理位置查询,因为要上https所以打算直接放到haproxy后面,后面发现nginx+lua程序无法获取到客户端IP的问题(原nginx读的remote_addr地址,加到haproxy后台获取的是HA的地址),本计划通过x_forwarded_for头部来判断用户的真实IP但是默认haproxy会继承客户端传过来的IP(其实这个问题后来也解决了见这篇文章<<haproxy移除x-forwarded-for头>>),所以只能在在haproxy上增加自定义头X-TEST-IP将用户的IP赋予这个IP,但这样也存在问题(用户如果直接调用nginx+lua将获取不到用户真实IP),所以需要在nginx lua程序需要做一些判断来确定真实IP问题,lua脚本是如何判断用户IP呢,见下面步骤及实现的具体代码:
1、首先定义变量IP
2、判断X-TEST-IP header是否存在,如果存在则使用此IP
3、如果X-TEST-IP头没有IP的话,尝试获取请求头中x_forwarded_for变量的IP
4、如果没有x_forwarded_for头的话测获取remote_addr
具体实现代码如下:
local IP
IP = ngx.req.get_headers()["X-TEST-IP"]
if IP == nil then
IP = ngx.req.get_headers()["x_forwarded_for"]
end
if IP == nil then
IP = ngx.var.remote_addr
end