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记录在了后端服务器的日志中