前言:作为一个懒人,不喜欢写博客,但是越来越发现,自己之前踩过的坑,现在重复在踩,每次碰到都是感觉之前遇到过,但是就是忘记当时是怎么解决了,现在不得不强迫自己纪录一下。
背景:在自己搭建的springboot项目中,需要自己在测试环境搭建一套服务,申请了几台机器后,自己安装了java环境和tomcat环境之后,把springboot打成war包后扔到tomcat里的webapp目录中,启动发现报错,一直说addchild报错,刚开始一直以为是tomcat有问题,重新下载了一个还是报错,排出。然后跟踪到项目目录中的lib里发现springboot内嵌tomcat的版本微8.0,而自己下载的tomcat为7.0,原来是上次同事讲springboot的版本升级了,导致springboot内嵌的tomcat也跟着升级了,需要在pom.xml中配置一下
<properties>
<java.version>1.8</java.version>
<mybatis.version>3.3.1</mybatis.version>
<mybatis.spring.version>1.2.4</mybatis.spring.version>
<mapper.version>3.3.6</mapper.version>
<pagehelper.version>4.1.1</pagehelper.version>
<tomcat.version>7.0.64</tomcat.version>
<mybatis.generator.version>1.3.2</mybatis.generator.version>
<dozer.version>5.5.1</dozer.version>
<security.version>3.0-SNAPSHOT</security.version>
</properties>
修改完毕重新部署ok。
然后呢 因为我们线上是只要访问域名,同时我们的前端采用react来写的,前端配置访问我们后端接口的地址是127.0.0.1:7001.且让用户访问只要需要访问ip就可以访问。
实现方法:
修改tomcat中conf下server.xml,在conf同一目录下创建deploy目录存放项目war包,一定要这样处理,简单的放在webapp下不可以,目录地址:/usr/local/apache-tomcat-7.0.68/deploy ,如下:
<Host name="localhost" appBase="deploy"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/usr/local/apache-tomcat-7.0.68/deploy/data-service-management.war" debug="0"/>
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
tomcat端口修改为了7001,这样启动,访问ip:7001就可以进入项目中了,
现在再设置nginx反向代理:
线上nginx目录为:/usr/local/nginx
修改conf目录下
server {
listen 80;
server_name www.taobao.com;
set $eaddr $remote_addr;
if ($http_x_forwarded_for != "") {
set $eaddr $http_x_forwarded_for;
}
if ($http_x_real_ip != "") {
set $eaddr $http_x_real_ip;
}
location / {
proxy_pass http://127.0.0.1:7001;
}
然后再直接访问 ip,就可以直接跳转到项目中了。