美文网首页
nginx反向代理实现负载均衡

nginx反向代理实现负载均衡

作者: c26 | 来源:发表于2015-04-13 13:35 被阅读0次

    假设前端nginx只存在index.html

    构建反向代理,nginx仅仅处理静态内容不处理动态内容

    location ~ \.php$ {
    proxy_pass 192.168.0.1:80;
    }
    

    客户端访问localhost:8080/index.html,这时候前端nginx进行响应

    location ~ .php$这里是正则表达式匹配.php结尾的文件nginx自动pass给了192.168.0.1 192.168.0.1的内容由他的apache、nginx或者iis来处理完返回给nginx
    最终输出客户端显示(memcache或者squid可以支持缓存)

    上面是最最简单使用nginx反向代理服务器的实例。

    location ^~ /phpmyadmin/ {
    proxy_pass 127.0.0.1:80;
    }
    location ^~ \.php$ {
    proxy_pass 8.8.8.8;
    }
    

    第一个部分的location 是匹配localhost/phpmyadmin/开头的话(本地nginx目录下不存在phpmyadmin目录),nginx自动pass到127.0.0.1:80的服务器上,该服务器对phpmyadmin的文件解析,结果发送给nginx,客户端显示,如果客户端访问URL地址是http://localhost/demo.php的话,则会pass到8.8.8.8的apache上进行处理

    通过上面实例,实现了基本针对不同请求的负载均衡

    访问静态页面index.html,nginx直接响应
    访问demo.php,8.8.8.8的apache来响应
    访问phpmyadmin下的文件,127.0.0.1:80apache响应

    访问同一个页面的负载均衡实现:
    当用户访问http://localhost/demo.php页面是,我们实现两台服务器的负载均衡(实际情况两台服务器上的数据同步要求一致)

    nginx.conf:

    upstream myCluster {
    server 127.0.0.1:8080;
    server 8.8.8.8:80;
    }
    

    表明这台Server Cluster包含2台服务器

    location ~ \.php$ {
    proxy_pass http://myCluster;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    

    当用户访问http://localhost/demo.php时,nginx下面不存在该文件,将自动pass到myCluster定义的服务器集群中,由127.0.0.1:8080 和8.8.8.8:80来处理,可以看到上面再定义upstream的时候每个server后面是没有定义去那种,表明两者轮询几率相等,每个请求按照时间的顺序逐一分配到不同后端服务器,如果后端服务器宕机,可自动剔除

    如果希望更多响应的话:

    upstream myCluster{
    server 127.0.0.1:8080 weight=5; # weight指定轮询几率,weight和访问比率成正比
    server 8.8.8.8:80;
    }
    

    实际应用时,server1 和server2上分别保留相同的数据,需要考虑两者数据同步
    可以采用rsync或者nfs吧。这个不太了解

    相关文章

      网友评论

          本文标题:nginx反向代理实现负载均衡

          本文链接:https://www.haomeiwen.com/subject/ctohfttx.html