其他

使用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负载均衡策略是轮询的,当然我们可以自己更改,这里就不多说了。

使用nginx做反向代理及负载均衡已关闭评论
Avatar photo

人生长恨水长东