nginx连接显示本地地址
当在使用Nginx时,有时会遇到需要将客户端的真实IP地址传递给后端服务器或者记录到日志中的情况,默认情况下,由于反向代理的存在,可能会导致获取的地址是Nginx服务器本身的地址。下面给出解决方案。
一、通过设置header传递真实IP
最直接的方法是在Nginx配置中添加相应指令来设置HTTP头信息,从而让后端应用能够获取到真实的客户端IP。
```nginx
http {
...
logformat main '$remoteaddr - $remoteuser [$timelocal] "$request" '
'$status $bodybytessent "$httpreferer" '
'"$httpuseragent" "$httpxforwardedfor"';
server {
listen 80;
server_name localhost;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend_server_address;
}
}
}
``
X-Real-IP
和
X-Forwarded-For这两个头部字段就是用来传递原始请求方的IP地址的。其中
$proxyaddxforwardedfor变量会在已有的
X-Forwarded-For`值后面追加当前代理服务器看到的客户端IP。
二、修改日志格式
如果只是想要在Nginx自己的访问日志中显示真实的本地地址(即客户端IP),那么只需要修改日志格式即可,如上面代码所示,在log_format
定义的日志格式中加入"$http_x_forwarded_for"
,它会优先显示X-Forwarded-For
中的个IP(也就是最开始的客户端IP),如果没有这个头部,则为空。
三、使用real_ip模块
对于更复杂的情况,可以考虑使用Nginx自带的ngx_http_realip_module
模块,它可以更方便地设置信任的代理服务器,并根据这些信任的代理来确定真正的客户端IP。
确保开启了该模块(大多数默认安装都包含此模块)。然后可以在配置文件中这样设置:
```nginx
http {
...
setrealipfrom 192.168.1.0/24; # 设置可信代理的网段
realip_header X-Forwarded-For; # 指定从哪个头部获取真实IP
server {
...
}
}
```
以上三种方法可以根据实际需求选择合适的方式来实现Nginx连接显示本地地址的功能。