使用nginx做反向代理及负载均衡
好久之前做过几次用nginx做负载均衡,现在却有点忘了,今天又看了下文档,重新联系一边,这里记录一下,生的以后忘记。
nginx是一个强大的web服务器,而且使用起来也比较简单,用它做反向代理实现和负载均衡很简单,只需简单配置几下即可。
基本环境:3台Nginx服务器,ng1:192.168.99.155, ng2:192.168.99.152, ng3:192.168.99.135,其中ng1作为负载均衡器
软件版本:centos 6.5 php-fpm版本:5.6 nginx版本:1.6.2 mysql版本:5.1
配置步骤:
第一步:给3台nginx配置基础环境,参考:centos + nginx + php-fpm +mysql的简单配置
第二步:ng1做为反向代理服务器,故需要把对php的支持关闭,这里具体的步骤不再多说
第三步:在nginx配置文件http{}内配置(反向代理)负载均衡器的upstream
upstream的配置格式:
upstream 自定义名称{ server host名称1(可以是ip或者域名):端口 各种参数; server host名称2(可以是ip或者域名):端口 各种参数; }
这里我们配置为:
upstream mytest{ server 192.168.99.152; server 192.168.99.135; }
第四步:在nginx配置文件server{}中配置proxy_pass
location / { proxy_pass http://mytest; }
其实到这里,反向代理和负载均衡已经配置完了,就是这么简单,不过这有一个明显的问题,就是ng2和ng3中获取到的客户端ip是反向代理器的ip,而不是用户真是的ip,怎么解决呢?这就要用到X-Forwarded-For了,其实配置也很简单,只需要把刚才配置的proxy_pass做一下修改。
location / { proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://mytest; }
第五步:检测配置是否成功
在ng2的/usr/local/html下创建index.php文件
<?php echo 'ng2222';
在ng3的/usr/local/html下创建index.php文件
<?php echo 'ng3333';
检验192.168.99.152/index.php和192.168.99.135/index.php能否正常访问
如果能正常访问,则使用192.168.99.155/index.php访问,如果多次刷新ng2222和ng3333交替显示,则说明负载均衡配置成功
其实对于你是否配置成功,还可以通过ng2和ng3的访问日志来确认。
默认的nginx负载均衡策略是轮询的,当然我们可以自己更改,这里就不多说了。