tomcat与nginx相结合,nginx基于端口配置多个tomcat的问题?

来源:互联网 发布:science杂志知乎 编辑:程序博客网 时间:2024/06/05 08:25
这一个月内,nginx与tomcat结合部署,始终有一个问题困惑着我!我在论坛上也发布过该问题,但始终没有具体答案,不过到现在我又发现一个问题,所以再将这个问题,发布出来,然后大家讨论,先说下公司服务情况:公司服务硬件情况是:
服务器:HP 刀片
内存:32GB
CPU:32核

服务器软件情况:
系统:红旗Asianux SP3 x86_64系统
JAVA环境:jrockit-1.6_24-x86_64
应用:共发布6个tomcat,端口号分别为,2080、2081、2082、8080、8888、8081等,每个tomcat部署多个java应用,tomcat独立运行
数据库:mongodb数据库,第三方服务等

服务器资源使用情况:
内存:剩余12-20G
CPU:0.0%us 4.3%sy  87.0%id ........
负载:1.50 1.89  0.82


随着公司业务的增多,服务tomcat也增加了一个,使用一段时间后,java总是crashing,不管是停止tomcat,还是启动tomcat,报不能提交4G到heap里,我找了多个方法,但发现如果tomcat启动了,再启动其他的应用时,就报内存溢出,比如启动mongodb数据库时,就因为内存溢出启不起来,但是剩余的内存很大啊,始终搞不懂,好,这个问题先放一边,当然,如果哪位大牛,知道怎么解决,还请多指教!!!
于是我想用tomcat与nginx结合,降低tomcat内存使用量,但在这里也遇到了一个问题,并有两点发现,因为楼主没有用过nginx,因此感觉相当棘手。
现在我将问题贴出来,希望大家给个建议:
server
        {
        listen       8080;   
        server_name  10.0.0.199;
        index QSConsole.html index.html index.jsp default.jsp;
        root  /opt/tomcat_8080/webapps;  ////我tomcat写的是8080,但server.xml里配置的是9088

        charset utf-8;


       access_log  /opt/tomcat_8080/logs/catalina.out;


        location ~ .*\.(jsp|jspx|do|action)?$ {
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_passhttp://10.0.0.199:9088;
        }
        location ~ .*\.(htm|ico|txt|css|gif|jpg|jpeg|png|bmp|swf|html)$
        {
             root /opt/tomcat_8080/webapps;
             expires    30d;
             proxy_redirect off;
             proxy_set_header Host $host;
             proxy_cache_valid 200 302 1h;
             proxy_cache_valid 301 1d;
             proxy_cache_valid any 1m;
        }
        location /
        {
          proxy_next_upstream http_502 http_504 error timeout invalid_header;
          expires 3d;
          proxy_pass http://10.0.0.199:9088;
          proxy_set_header      Host $host;
          proxy_set_header      X-Real-IP $remote_addr;
          proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        location ~ .*\.(js|css)?$
        {
             expires    1h;
}
        location ~(favicon.ico)
         {
          log_not_found off;
          expires 30d;
          break;
        }
}
我若这样配置的话,访问http://ip:8080/QuadServer的时候,报如下错误:
报2014/01/20 10:47:07 [error] 28813#0: *1 open() "/opt/tomcat_8080/webapps/favicon.ico" failed (2: No such file or directory), client: 10.0.0.17, server: 10.0.0.199:9088, request: "GET /favicon.ico HTTP/1.1", host: "10.0.0.199:8080"

但是我若将配置改成如下:
server
        {
        listen       80;
        server_name  10.0.0.199:8080;
        index QSConsole.html index.html index.jsp default.jsp;
        root  /opt/tomcat_8080/webapps;

        charset utf-8;

       access_log  /opt/tomcat_8080/logs/catalina.out;

        #location ~ ^/QuadServer/*
        location /
        {
          proxy_next_upstream http_502 http_504 error timeout invalid_header;
          expires 3d;
          proxy_pass http://10.0.0.199: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;
        }
        location ~(favicon.ico)
         {
          log_not_found off;
          expires 30d;
          break;
        }
   }
}
或者改成如下也可以,如:
server
        {
        listen       8080;
        server_name  10.0.0.199:80;
        index QSConsole.html index.html index.jsp default.jsp;
        root  /opt/tomcat_8080/webapps;

        charset utf-8;

       access_log  /opt/tomcat_8080/logs/catalina.out;

        #location ~ ^/QuadServer/*
        location /
        {
          proxy_next_upstream http_502 http_504 error timeout invalid_header;
          expires 3d;
          proxy_pass http://10.0.0.199:80;
          proxy_set_header      Host $host;
          proxy_set_header      X-Real-IP $remote_addr;
          proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        location ~(favicon.ico)
         {
          log_not_found off;
          expires 30d;
          break;
        }
   }
}

若是这两种配置的话,那么访问http://ip/QuadServer或者http://ip:8080/QuadServer那么服务都可以正常访问,所以,我就郁闷了,不知道该怎样配置nginx基于端口来发布服务器上的多个tomcat???大家讨论讨论
0 0