环境介绍:
两台nginx代理服务器,第一台接收真实客户端的请求,然后调度到第二台nginx代理服务器上,最后调度到web后端。
需求:
因为第二台nginx是接收第一台nginx的请求,所以默认情况下日志记录的全部是第一台nginx的ip访问,现在在要求第二台nginx的访问日志能够记录真实客户端的ip。
第一台nginx配置:
- worker_processes 1;
- error_log logs/error.log notice;
- pid logs/nginx.pid;
- worker_rlimit_nofile 65535;
- events {
- use epoll;
- worker_connections 65535;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- keepalive_timeout 65;
- proxy_temp_path /data0/proxy_temp_path;
- proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache:128m inactive=1d max_size=1g;
- upstream hdwiki {
- server 192.168.253.105;
- }
- server {
- listen 80;
- server_name www.hdwiki.com;
- index index.html index.htm;
- location /
- {
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- proxy_pass http://hdwiki;
- }
- access_log logs/access_hdwiki.log;
- }
- }
proxy_set_header Host $host; 把访问的域名加到请求包的头部信息中,能够找到后端web的虚拟主机。
proxy_set_header X-Forwarded-For $remote_addr; 把客户端真是ip地址加到请求包的头部信息中,以X-Forwarded-For做标示。
第二台nginx配置:
首先在编译的时候加上--with-http_realip_module这个模块。
参考:
- worker_processes 1;
- #error_log logs/error.log notice;
- pid logs/nginx.pid;
- worker_rlimit_nofile 65535;
- events {
- use epoll;
- worker_connections 65535;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- keepalive_timeout 65;
- proxy_temp_path /data0/proxy_temp_path;
- proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache:128m inactive=1d max_size=1g;
- upstream hdwiki {
- server 192.168.253.105:8090;
- }
- server {
- listen 80;
- server_name www.hdwiki.com;
- index index.html index.htm;
- location /
- {
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- set_real_ip_from 192.168.253.103;
- real_ip_header X-Forwarded-For;
- proxy_pass http://hdwiki;
- }
- access_log logs/access_hdwiki.log;
- }
- }
set_real_ip_from 192.168.253.103; 第一台nginx的ip的地址,指定真实ip来自哪儿。
real_ip_header X-Forwarded-For; 从第一台nginx上获取客户端的ip,因为真实客户端的ip已经在第一台nginx设置中被X-Forwarded-For标示,所以冲header头中提取它。
这样就能在第二台nginx代理服务器的访问日志中看到真实客户端访问ip。