反向代理是什么?客户端向反向代理服务器发送请求,反向代理判断后转交请求给真实服务器,并将获得的内容返回给客户端。对客户端而言,它就是原始服务器,客户端不需要做任何设置。例如你访问http://blog.nbqykj.cn/?p=zhangnq,真实情况是http://blog.nbqykj.cn/?p=中没有zhangnq页面。你看到的内容是代理服务器偷偷从另外一台服务器上取回来,然后作为自己的内容返回用户的。
nginx是一个高性能的web服务器,应用广泛。下面是两个nginx反向代理的配置例子。
location ^~ /nagios/ { proxy_pass http://192.168.0.253; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~ /blog1/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.0.243/blog/; }
最重要的是proxy_pass这个配置,是他负责转发请求到其他的服务器。
细心的朋友可能发现第一个proxy_pass后面没有加/,而第二个proxy_pass却加了/ 。简单说没加/时,匹配的目录地址会加给后端web服务器,而加了/就表示绝对路径,不会把匹配的目录传给后端web服务器。例如访问http://blog.nbqykj.cn/?p=nagios/,实际访问的是http://192.168.0.253/nagios/。访问http://blog.nbqykj.cn/?p=blog1/实际访问的是http://192.168.0.243/blog/。使用绝对路径可以给后端web项目指定不同的子目录名称。
其他详细参数配置可以参考官方文档说明。