nginx有两种用途 :静态内容的web服务器和反向代理

反向代理模块proxy属于标准http模块 默认编译时是安装的。

最重要命令是proxy_pass,其用于指定代理的协议、服务器地址和映射的URI.

下面演示最简单的nginx 反向代理

172.16.15.9 后端服务器
172.16.15.11 nginx代理服务器 主机名www.c.net
后端服务器先提供静态页面
[root@node3 ~]# cd /var/www/html
[root@node3 html]# vim index.html

添加如下内容<h1> jingtai page </h1>

编辑代理服务器配置文件/etc/nginx/nginx.conf

在http配置端添加下面内容

server {
       listen 80;
       server_name www.c.net;
       location / {
               proxy_pass http://172.16.15.9/;
       }
}

然后启动代理服务器nginx服务和后端服务器httpd

浏览器上访问

请求是客户端发起的,而在后端服务器访问日志里却显示是代理服务器的请求

[root@node3 ~]# tail /var/log/httpd/access_log
172.16.15.11 - - [20/Apr/2014:18:09:58 +0800] "GET / HTTP/1.0" 200 24 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36"  
客户端的请求经过代理服务器,代理服务器会重新构建报文,再转给后端服务器 ,所以在后端服务器的日志中显示是代理服务器的请求
后端服务器分析代理服务器的请求是没意义的 ,需要在后端显示为是客户端的请求

再编辑代理服务器的配置文件在 proxy_pass http://172.16.15.9/;下面添加下面内容

               proxy_set_header X-Real-IP $remote_addr;
但此时仍显示的是
172.16.15.11的请求 这是后端配置文件记录日志格式的原因
[root@node3 ~]# vim /etc/httpd/conf/httpd.conf
LogFormat "
%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

再访问查看后端服务器的访问日志

172.16.250.205 - - [20/Apr/2014:18:56:11 +0800] "GET // HTTP/1.0" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36"
客户端真实的ip记录在了后端服务器的日志中