部署springboot项目到公网服务器 出现session ip change too many的解决办法

最近将项目放到公网,在登录页面点击几次后,出现了大量的[ERROR] session ip change too many 的error日志,页面也像失效了一样,没有反应;
在这里插入图片描述
仔细看是阿里巴巴的druid组件报的错,于是找到 WebSessionStat类,原来是druid监控session时,记录访问IP提示的。

public void addRemoteAddress(String ip) {
    if (remoteAddresses == null) {
        this.remoteAddresses = ip;
        return;
    }
    if (remoteAddresses.contains(ip)) {
        return;
    }
    if (remoteAddresses.length() > 256) {
        LOG.error("session ip change too many");
        return;
    }
    remoteAddresses += ';' + ip;
}
看源码这一段,就是报错的来源:  
	LOG.error("session ip change too many");
	再看条件 if (remoteAddresses.length() > 256)
	

可以看到,druid获得ip的方法是request.getHeader(“x-forwarded-for”);,这个方法会获取到ip:port,而国内由于公网IP极其匮乏,导致绝大部分人上网都是通过地址映射以后来上网,这就导致了每次请求的ip、端口都可能不一样,那么自然会被WebSessionStat.addRemoteAddress()方法累加到remoteAddresses,导致remoteAddresses越来越长,最终超过256位长度,触发LOG.error(“session ip change too many”)语句。

所以解决办法:
1 修改源码, 把 LOG.error(“session ip change too many”)注释掉;不过这个方法不够灵活,也比较麻烦;改反编译文件自行百度
2 修改配置文件,因为我的是spring boot项目,所以直接在yml文件,找到数据源配置spring.datasource,往后面加上关闭druid的监控配置;

druid:
	filter:
	  config:
 	 	enabled: false
    web-stat-filter:
	  enabled: false
	stat-view-servlet:
	  enabled: false

如果你的配置使用的是xml文件的话,同理在你的xml中关掉session监控即可;

然后实在不行的话再把 此Bean注释掉:ServletRegistrationBean;

还不行的话,最后办法是找到 springcloud配置文件,去微服务配置里把到期时加大就好了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 准备工作 在部署之前,需要确保服务器上已经安装了Java环境和Maven环境。如果没有安装,需要先安装。 2. 打包项目 使用Maven命令打包项目,生成可执行的jar包。在项目根目录下执行以下命令: mvn clean package 3. 上传jar包 将生成的jar包上传到服务器上,可以使用FTP或者SCP等方式上传。 4. 启动项目服务器上执行以下命令启动项目: java -jar your-project.jar 5. 配置端口 默认情况下,Spring Boot应用会使用808端口。如果需要修改端口,可以在启动命令中添加--server.port参数,例如: java -jar your-project.jar --server.port=8888 6. 配置日志 Spring Boot默认使用Logback作为日志框架。可以在application.properties文件中配置日志级别和日志输出路径,例如: logging.level.root=INFO logging.file=/var/log/your-project.log 7. 配置Nginx 如果需要将Spring Boot应用暴露在公网上,可以使用Nginx作为反向代理服务器。在Nginx配置文件中添加以下内容: server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:808; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 8. 配置SSL 如果需要使用HTTPS协议,可以在Nginx配置文件中添加SSL证书和私钥,例如: server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/your-domain.crt; ssl_certificate_key /path/to/your-domain.key; location / { proxy_pass http://localhost:808; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 以上就是将Spring Boot项目部署服务器上的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值