• nginx均衡多tomcat环境配置,及这种环境下的remoteIp及ServerName获取方式


    当单台应用已经无法应对日渐增长的访问量时,我们往往会采用分布式部署,这里简单介绍下单台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在一台服务器上的话,这里是可以正确返回的。
  • 相关阅读:
    EOF:getchar()函数返回的一个特殊值
    elementUI的el-select使用filterable无效
    element table单元格相关的样式
    关于前端权限的一点想法--续
    IE浏览器与PDF文件
    vue form表单数据无法修改
    computed数据变动,table加载不全
    vue插件开发(本地使用)
    element table
    对象删除(消耗时间验证)
  • 原文地址:https://www.cnblogs.com/jasonlu1016/p/5227047.html
Copyright © 2020-2023  润新知