在开始之前,先讲讲本文用到的环境
准备三台linux服务器,我用的事redhat 5.6 版,信息分别如下:
服务器 A, ip 192.168.159.128 服务器 B, ip 192.168.159.129 服务器 C, ip 192.168.159.130
在此将服务器A做为主服务器,也就是转发请求,实现负载均衡的服务器。
下面开始讲解配置的步骤。
1. 修改A服务器上nginx的配置文件,我的环境中在
配置服务器A的hosts
cd /etc/hosts
在hosts文件中:192.168.159.128 nginxtest.com。
cd /usr/local/nginx/nginx.conf
在nginx.conf的http命令块上下文中添加如下信息
upstream nginxtest.com { server 192.168.159.129:80; server 192.168.159.130:80; ip_hash; # 将请求绑定到一个服务器上,也就是说该回话的请求在同一个应用服务器上。 }
修改server命令块的配置,主要是配置location命令块,简单的配置如下:
server { listen 80; server_name nginxtest.com; location / { #root html; #index index.html index.htm; proxy_pass http://nginxtest.com; #proxy_set_header Host $host:8080; #这种方式将默认的80端口改成8080,转发后的请求的端口也是8080 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
2. 修改服务器B和C上nginx的配置文件,主要是修改http命令块中的server命令块,如下
server { listen 80; server_name nginxtest.com; location / { root html; index index.html index.htm; } }
上面配置的server_name为主服务器A的host,经测试直接配置成B服务器的域名(localhost)也是可以的。
到此nginx负载均均衡的简单配置就完成了,最后就是启动或者重启nginx。
3. 运行结果
如果将A、B、C三台服务器全部打开,那么当A(负载均衡服务器)接受到请求的时候,将会将请求根据nginx的转发算法,转发到相应的B、C服务器上。如图:
负载均衡服务器A将请求转发到B服务器了,最下方内容显示为:B server is ok
负载均衡服务器A将请求转发到B服务器了,最下方内容显示为:C server is ok
如果我们将B和C服务器上就收转发请求的nginx服务关闭了,此时请求无法接受处理,将转到相应配置的默认页面。我这里配置了,当没有能接受请求的服务器时,转发到错误页面。
到这里,nginx实现简单的负载均衡的配置就完成了,当然这只是简单的配置,其中还有很多的配置和优化项,基本上也就是基于此基础上不断扩展的。
这里A服务器也是可以将请求转到到自身的,不过会造成A无限转发到自己的死循环中,当然这个通过配置是可以解决的,nginx默认监听转发80端口实现负载均衡,所以主服务器A就不能再使用80端口来处理请求了,此时只要在http命令块中再添加一个处理请求的server命令块配置,并且修改upstream配置就可以了
upstream nginxtest.com { server 192.168.159.128:8080; server 192.168.159.129:80; server 192.168.159.130:80; }
server { listen 8080; server_name nginxtest.com; location / { root html; index index.html index.htm; } }
这样就会将转发到自己的8080端口来处理了。
nginx配置用有很多可配置的参数,有兴趣的朋友可以仔细研究下upstream命令块以及负载均衡相关的配置。希望能帮助到开始学习nginx的朋友,有个轻松入门的实例。