leijianghong1987
leijianghong1987
采纳率100%
2019-08-09 10:49

nginx配置同一应用三个tomcat,都能登录,但是访问不了其他页面,但是关闭两个后,页面就能访问

问题描述:
利用Nginx配置一个应用的三个tomcat负载均衡。(具体见Nginx配置文件),
配置后能登陆进系统,
图片说明

刷新该页面的时候三个TOMCAT都有连接输入日志。
但是点击任意一个菜单的时候,提示404错误,见图:
图片说明,Nginx没有_任何报错日志。_

如果把tomcat_任意关掉两个_,只剩下一个(Nginx没有关闭),那么点击菜单的时候可以打开。

以下是Nginx配置文件:


worker_processes  1;


events {
    worker_connections  1024;
}


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"';


    sendfile        on;
    keepalive_timeout  65;

    gzip  on;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_min_length  1k;          #最小压缩大小
    gzip_buffers     4 16k;        #压缩缓冲区
    upstream serverlist{
        server localhost:8081 weight=1;  
        server localhost:8082 weight=1;
        server localhost:8083 weight=1;
    }

    server {
        listen       80;
        server_name  welcome;
        location /welcomeTest {
           proxy_pass http://serverlist;
           proxy_set_header Host $http_host; 
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Cookie $http_cookie;
            client_max_body_size 50m;
            client_body_buffer_size 256k;
            proxy_connect_timeout 30;
            proxy_send_timeout 30;
            proxy_read_timeout 60;
            proxy_buffer_size 256k;
            proxy_buffers 4 256k;
            proxy_busy_buffers_size 256k;
            proxy_temp_file_write_size 256k;
            proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
            proxy_max_temp_file_size 128m;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js|ico)$ {



            proxy_pass http://serverlist;

        } 
            location ~ .(jsp|jspx|do)?$ {

            proxy_set_header Host $host;

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://serverlist;

}

}
}


请问如何解决这个问题,是配置不全 还是需要在其他页面加入东西吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • weixin_43975295 weixin_43975295 2年前

    这种情况,应该是没有解决存储共享问题。比如说tomcat有三台,编号为A、B、C,负载方式为轮询。用户在第一次访问的时候,请求被nginx转发到了A号tomcat上,完成了认证,并且在A上面留下了一个临时认证的文件(也可能是其他的文件)。然后这个用户又接着发第二个请求进来,这时候nginx把请求转发到了B号tomcat上,但是B号tomcat上没有之前这个用户留下的认证文件(文件在A上面),这个时候不就报错了么。但是你用单台tomcat的时候肯定是不会有这个问题的。
    所以,在搭建负载均衡的时候,首先要解决的就是这种共享问题,一定要确保三台共用一个数据库、共用一个存储等等,就是为防止出现这种情况。
    现在先判断一下是不是我说的这种情况吧,是的话,就要配合开发人员,来确定整个请求时都会产生哪些需要共享的文件,然后看看这些东西怎样做到共享,比如放到redis中。

    点赞 2 评论 复制链接分享
  • leijianghong1987 leijianghong1987 2年前

    确实是存储共享问题,在原来的基础上加上了redis之后就没有问题了,也可以修改Nginx的轮询的规则来解决问题

    点赞 评论 复制链接分享