您的位置:首页 > 运维架构 > Nginx

双层nginx代理获取真实访问ip

2012-05-04 11:28 495 查看
环境介绍:

两台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这个模块。

参考:http://wiki.nginx.org/HttpRealIpModule

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。
本文出自 “生命不息奋斗不止” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: