刚才花了一个半小时的时间在三台CentOS 6系统下使用Nginx作了一次负载均衡的实战。入口是Nginx,后台可以是apache也可以是Nginx,端口可以自定义。
实验环境 :
Server1 192.168.0.100 :
用途: 入口服务器,负载均衡服务器
环境: CentOS 6 + Nginx + PHP(php-fpm)
端口: 80
Server2 192.168.0.101 :
用途:一般的后台服务器
环境:CentOS 6 + Apache + PHP
端口:80
Server3 192.168.0.102 :
用途:一般的后台服务器
环境:CentOS 6 + Apache + PHP
端口:8080
Server2和Server3用的是 Apache ,配置了虚拟主机,分别在端口80和8080接收test.kiccp.com .
Server1用的是 Nginx ,配置如下:
/etc/nginx/nginx.conf :
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx nginx; worker_processes 1; error_log /var/log/nginx/error.log; #error_log /var/log/nginx/error.log notice; #error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; upstream myserver { ####两个后台服务器,分别监听80和8080端口。 server 192.168.0.101:80 weight=5; server 192.168.0.102:8080 weight=5; } # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. ##包含etc/nginx/conf.d/下的所有conf文件,虚拟主机配置就在这个目录里。 include /etc/nginx/conf.d/*.conf; }
接下来是 /etc/nginx/conf.d/ 下的loadbalance.conf文件,被nginx.conf 包含进来。
server { listen 80; server_name test.kiccp.com; ##绑定域名 location / { proxy_pass http://myserver; ##使用nginx.conf中定义的upstream 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; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } }
在这种配置下, Server1上的Nginx监听80端口上的test.kiccp.com,并随机路由到Server2和Server3,
这样就达到了负载均衡的目的。虽然Server3上的apache用的是8080端口,但访客察觉不到,url显示的依然
是test.kiccp.com且端口没有变化。Server1的log会把所有这些请求都记录下来,而Server2和Server3的
log中记录的来源ip则是Server1的IP,毕竟是从Server1路由过去的。Server1上的Nginx不用关心Server2
和Server3上使用的是apache还是nginx,或者tomcat,只需要知道它的ip和端口即可。
实战总结:
1.Nginx做负载均衡是很强大的,而且配置过程简单
2.Nginx所负载的服务器不一定要用Nginx,用Apache和Tomcat也可以,而且端口完全可以自定义。
3.Nginx的负载均衡对于访客来说是不透明的,他们也无需知道当前由哪个服务器在处理他的请求。