nginx反向代理 负载均衡的使用
下载地址
http://nginx.org/en/download.html
反向代理
反向代理使用场景,比如你访问www.aaa.com 请求需要被发送到对应的反向代理服务器,反向代理服务器根据你访问的域名决定把这个请求转发给对应的服务器处理,实现负载均衡
下面是一个简单的配置
在本地搭建好几个网站 80端口给nginx 8080 8081分别搭建两个网站服务,用iis apache都可以。然后在host文件中添加两个本地域名如下
127.0.0.1 test1.loc 127.0.0.1 test2.loc
下面是nginx的配置,当默认用80端口访问的时候把对应的域名转发给对应的服务去处理,这样就不用带端口去访问啦
server { listen 80; server_name test1.loc; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://127.0.0.1:8081; index index.html index.htm; } } server { listen 80; server_name test2.loc; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://127.0.0.1:8082; index index.html index.htm; } }
把上面的代码保存成一个vhost.conf文件然后打开nginx.conf在http{}里面加入 include vhost.conf
http{
............
............
include vhost.conf
}
另外在http段还得加入下面转发真实的客户端ip,要不然程序里取到的全都是nginx这台服务器的ip地址
http{ proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; }
负载均衡
upstream webbs { ip_hash; server 192.168.11.68:20201; server 192.168.11.69:20201 weight=100 down; server 192.168.11.70:20201 weight=100; server 192.168.11.71:20201 weight=100 backup; server 192.168.11.72:20201 weight=100 max_fails=3 fail_timeout=30s; } server { listen 80; server name www.linuxidc.com; location / { proxy_pass http://webbs; #引用upstream } }
配好好后当用户访问www.linuxidc.com时就会分配给上面的一组服务器来处理,ip_hash作用,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。如果后端服务器down掉,要手工down掉。
参数说明:
down:表示当前的server暂时不参与负载
weight:默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
上例中192.168.11.72:20201 设置最大失败次数为 3,也就是最多进行 3 次尝试,且超时时间为 30秒。max_fails 的默认值为 1,fail_timeout 的默认值是 10s。
注意,当upstream中只有一个 server 时,max_fails 和 fail_timeout 参数可能不会起作用。 weight\backup 不能和 ip_hash 关键字一起使用。