java要多思考下

成长^_^

   ::  :: 新随笔 ::  ::  :: 管理 ::
  33 随笔 :: 0 文章 :: 19 评论 :: 0 Trackbacks
当单台应用已经无法应对日渐增长的访问量时,我们往往会采用分布式部署,这里简单介绍下单台nginx结合多台tomcat进行单应用部署的步骤:
1、使用upstream,在nginx的nginx.conf文件中的加入如下配置:
http {
#.....这里省略其他配置
upstream  abc.test.com  {
server   192.168.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
server   192.168.0.1:8082 weight=1 max_fails=2 fail_timeout=30s;
server   192.168.0.2:8081 weight=1 max_fails=2 fail_timeout=30s;
server   192.168.0.2:8082 weight=1 max_fails=2 fail_timeout=30s;
}    
#.....这里省略其他配置
}
2、增加一个server,对应被访问的应用域名,如www.test.com
server{
                listen 80;
                server_name www.test.com;
                charset utf-8;
                location / {
                        proxy_pass http://abc.test.com;                      
                }
        }  
3、在192.168.0.1和192.168.0.2两台服务器上各安装2个tomcat,端口分别为8081,8082
4、重启Nginx,配置生效 nginx -s reload
5、如上配置后,整个系统可以正常运行,但是我们的程序中往往会有获取用户真实ip的需求,但基于以上配置只能获取到内网地址192.168.0.1和192.168.0.2
要获取真实ip地址,需要将第二步的配置改为:
server{
listen 80;
server_name www.test.com;
charset utf-8;
location / {
proxy_pass http://abc.test.com;    
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
同时在java应用中这样获取:request.getHeader("x-forwarded-for");
6、这时,如果在系统中调用request.getServerName(),返回的也是内网ip,而不是www.test.com,需要增加如下配置
proxy_set_header Host $host;
注:当nginx和tomcat在一台服务器上的话,这里是可以正确返回的。

技术文章收藏站点


posted on 2013-04-25 11:21 java要多思考下 阅读(2293) 评论(2)  编辑  收藏 所属分类: 系统运维

评论

# re: 【原】nginx均衡多tomcat环境配置,及这种环境下的remoteIp及ServerName获取方式[未登录] 2013-04-25 18:51 1
1  回复  更多评论
  

# re: 【原】nginx均衡多tomcat环境配置,及这种环境下的remoteIp及ServerName获取方式[未登录] 2013-04-25 18:51 1
2  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: