开发者社区> 问答> 正文

关于nginx配置负载均衡的问题 : 配置报错 

请教一下各位,目前的项目部署情况是这样 101服务器做反向代理,同时做负载均衡的配置 84,85,分别部署了两台tomcat服务器 目前反向代理是没有问题了,但配置负载均衡时出现了问题; 应用的背景信息: 由于是在一个二次平台上进行开发,有些底层进行了封装,所以不 绝对清楚 底层的 相关配置 当配置负载均衡后,应用的登陆出现了问题,点击登陆系统则重定向到登陆界面,无法登陆; 配置成单点服务(停掉一个tomcat),应用则正常 应用的登陆采用了spring的安全框架(spring acegi),由于不了解spring acegi 所以不清楚是不是该框架造成的问题 想请教一些有经验的同仁帮忙分析一下,谢谢 nginx.conf文件内容如下 nginx版本为0.8.50

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


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

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip  on;

	proxy_connect_timeout 2s;
	
	
	upstream tomcat_pool {
		server x.x.x.84:8080;
		server x.x.x.85:8081;
	}
	
	upstream report_pool {
		server	x.x.x.85:8080;
		#server 127.0.0.1:8081 down;
	}
	
    server {
        listen       80;
        server_name  x.x.x.x;
		
		
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		proxy_buffer_size	16k;
		proxy_buffers	4 16k;

        location /xxx/ {
			proxy_pass http://tomcat_pool/itsm/;
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
		}
		
		location  /xxx2/ {
			proxy_pass http://report_pool/report/;
			proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
   }

}
谢谢

展开
收起
kun坤 2020-06-03 14:38:52 548 0
1 条回答
写回答
取消 提交回答
  • 配置文件中的IP不是真实的ip######这是因为你登录使用了session的问题,由于nginx的负载均衡是轮询的方式,不会有 session_sticky 的效果 当用户在tomcat1登录后再访问页面可能是跑到tomcat2,而tomcat2没有这个session信息就认为是没登录 解决的思路: 1. 尝试 nginx 的 session_sticky : http://www.oschina.net/p/nginx_upstream_jvm_route 2. tomcat 配置 session 复制######感谢您的回复,我按照您的解决思路处理一下 谢谢######windows下如何安装 nginx_upstream_jvm_route 谢谢 在网上搜了一圈,无果啊######查了一下资料,不知利用ip_hash能否解决我的问题 从现在起,恶补nginx######

    引用来自#6楼“恺哥”的帖子

    查了一下资料,不知利用 ip_hash能否解决我的问题 从现在起,恶补nginx 你是 Windows 下的 Nginx 啊? ip_hash 在某些情况下是不行的,有些用户上网时IP经常在变化,或者两个ip轮流切换的,这种就会出问题,而且这种情况很频繁。 实在不行建议最复杂的方案,Tomcat的 session复制。######恩,感谢回答 刚才与nginx_upstream_jvm_route的作者通了邮件 回复如下: 因为Nginx在windows下面还没有开源,没办法在windows下面编译,或许你可以试试cygwin。 我再折腾折腾,不行就弃用nginx,用apache; session复制的话,是不是仅需要在tomcat上进行配置,与nginx没有太大关系吧?######
    session复制的话,是不是仅需要在tomcat上进行配置,与nginx没有太大关系吧?
    是的######

    引用来自#6楼“恺哥”的帖子

    查了一下资料,不知利用 ip_hash能否解决我的问题 从现在起,恶补nginx 使用ip_hash的却能解决session的问题,但是就不是负载均衡了。######session集中处理,本来就是在负载均衡中强调的重要一个环节,考虑session的独立是正道
    2020-06-04 13:27:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《Nginx 代理系统常用手册》 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载