window下nginx 1.7.4 做多个tomcat负载均衡
1、下载最新版nginx
http://nginx.org/download/nginx-1.7.4.zip
http://nginx.org/en/download.html
配置参考官方资料:http://nginx.org/en/docs/windows.html
2、安装
下载后解压到安装目录下即可。
启动:cmd下执行:nginx
其它命令:
重载 :nginx -s reload
停止:nginx -s stop
关闭 :nginx -s quit
3、配置tomcat
要均衡两个tomcat,需要修改一些端口,一个默认,一个tomcat修改成其它端口(改为在默认端口值+1)。
有三处端口修改:
1)<Server port="8006" shutdown="SHUTDOWN">
2) <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
3)<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
还有一处是两个tomcat都需要改的地方:在Engine上添加个jvmRoute属性,要求两个tomcat的值都不一样
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
4、修改nginx配置
打开nginx的conf/nginx.conf
修改位置为:
1)不加权重的情况:
http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; #设定负载均衡的服务器列表 upstream spagobi { #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。 #同一机器在多网情况下,路由切换,ip可能不同 #ip_hash; server localhost:8080 ; server localhost:8081 ; } server { listen 80; server_name spagobi; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; #项目的根目录 index index.html index.htm;#定义首页索引文件的名称 proxy_pass http://spagobi; #请求转向upstream spagobi定义的服务器列表 #以下是一些反向代理的配置可删除. #proxy_redirect off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP #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 3; proxy_send_timeout 30; proxy_read_timeout 30; proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 } #error_page 404 /404.html;
2、加权重的配置:
#keepalive_timeout 0; keepalive_timeout 65; #gzip on; #设定负载均衡的服务器列表 upstream www.xxx.com { #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。 #同一机器在多网情况下,路由切换,ip可能不同 #ip_hash;//如果ip_hash打开,则根据ip的hash值计算到一个固定的server上,这样每次请求都会固定这个server,也就变向解决了session共享的问题,保证该用户的所有请求都会在一个tomcat上,而不会跑到其它tomcat上 server localhost:8080 weight=8 max_fails=3 fail_timeout=30s; server localhost:8081 weight=2 max_fails=3 fail_timeout=30s; } server { listen 80; server_name www.xxx.com; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://www.xxx.com; #以下是一些反向代理的配置可删除. #proxy_redirect off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP #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 3; proxy_send_timeout 30; proxy_read_timeout 30; proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 } #error_page 404 /404.html;
nginx的upstream目前支持5中方式的分配:
1)、轮询;
upstream backend{ server localhost:8080 ; server localhost:8081 ; }
2)、weight (权重);
upstream backend{ server localhost:8080 weight=8 max_fails=3 fail_timeout=30s; server localhost:8081 weight=2 max_fails=3 fail_timeout=30s; }
3)、ip_hash(客户端ip的hash来固定到固定的后端某一个服务器上);
upstream backend{ ip_hash; server localhost:8080; server localhost:8081; }
4)、fair(根据后端服务器响应时间);
upstream backend{ server localhost:8080; server localhost:8081; fair; }
5)、url_hash (按访问url的hash结果来分配请求,使每个url定位到同一台后端服务器)
upstream backend{ server localhost:8080; server localhost:8081; hash $request_uri; hash_method crc32; }
5、测试
从新启动两个tomcat,然后启动nginx,浏览器输入 http://localhost/,刷新浏览器,看映射的tomcat的变化,不加权重的,采用奇偶切换,加权重的,按照权重出现的比例切换。
参考
1、Nginx 简单的负载均衡配置示例
http://www.360doc.com/content/11/0722/02/1542811_135112833.shtml
2、Nginx详细配置(含负载均衡)
http://wenku.baidu.com/link?url=NP77-jpwGha-SZoQmm3ncqtKzRIdoGbu_Uxp7tp4fymOmEKVEJnO0jGUf_wDH-fqI3sZ0EuRbYZZ3WSNvC62uTUf8j53zjT_OAQrpCgUYTm