谈谈tomcat配置默认路径的注意事项
场景:
在tomcat中部署项目,通过地址+端口直接访问项目,遇到这样的需求,一般的解决方案有几种呢?
方案:
1、将tomcat中webapps中ROOT目录中的文件删除掉,将项目的内容拷贝到此目录中。
此方式个人感觉丢失项目名称,项目的语义化不明确,同时更改了tomcat的默认访问,一般不考虑。
2、更改server.xml的配置,在</Host>的上一行添加如下配置:
<Context path="" docBase="项目名称" debug="0" reloadable="true">
前期项目就用了这种配置,去解决默认访问问题,但在实际应用中遇到了一些问题。
1)第一次将war包放到webapps中,启动项目,默认路径访问不了,只有加上项目名称才能访问,此时只能重启一次tomcat,默认路径才能访问,而且加项目名称和不加项目名称都可以访问。
2)日志打印混乱,日志丢失,今天的日志打到昨天的日志文件中。
3)如果项目中有定时任务执行,发现每次定时任务都会重复执行两次。
问题分析:
通过日志跟踪,发现项目中的spring容器启动了两次,以此可以推断项目启动了两次,这个也是日志混乱,定时任务执行两次的根本原因。为什么会启动两次呢,但为什么第一次启动的时候,项目是启动了一次,但默认路径又访问不了呢?
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" debug="0" docBase="hyxzx" reloadable="true"></Context>
</Host>
1、当为Host容器,设置appBase属性时,Tomcat会自动启动此目录中的合法项目,且会自动解压war包。
2、同时通过Context设置项目的默认路径,此时会再次加载一下docBase中设置的项目,但Context中设置的项目,只能识别目录,不能识别war包,默认也不会自动解压war。这也是第一次启动tomcat时,默认路径访问不了的原因。
此处说一下Context中有个属性unpackWARs=”true”,可以解压war,但解压的项目是放到Host的appBase目录中的,如果再次重启,项目依然会启动两次。
解决方法:
Host中的appBase设置的路径和Context中docBase设置的路径不要在一个目录中,如下配置
<Host name="localhost" appBase="webroot"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" debug="0" docBase="../webapps/wlgz" reloadable="true"></Context>
</Host>
1、在tomcat的根路径下新建一个目录webroot,此文件可以放常规项目。
2、将需要配置默认路径的项目,放到webapps中,注意:不要放war包进去,一定是解压后的项目目录。否则识别不到项目。
此处可以手动解压,如下提供一种方式:
将war包上传到tomcat的根目录
进入webapps中,创建wlgz文件夹
进入wlgz文件夹,执行命令:jar -xvf ../../wlgz.war
个人理解:Context只是设置虚拟目录用的,解决的一般是上传文件的访问路径或者公众资源(这些文件不在tomcat容器中),通过此配置可以访问。
3、通过Nginx代理设置默认路径。
通过Nginx的代理配置默认路径,此时tomcat常规配置,只需要更改nginx配置即可,配置如下:
server {
listen 80;
server_name api.ahggwl.com;
large_client_header_buffers 4 16k;
client_max_body_size 300m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
location / {
proxy_pass http://api.ahggwl.com/hytapp/;
proxy_cookie_path /hytapp/ /;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
}
}
主要需要的配置:
server_name,此字段标识前端的ip,匹配到此server。
location中 proxy_pass配置tomcat中的项目名称。
location中配置proxy_cookie_path,防止cookie丢失。
参考的文章:
解决nginx使用proxy_pass反向代理时,cookie丢失的问题
http://blog.csdn.net/we_shell/article/details/45153885
设置Tomcat默认访问路径
上一篇: 批量裁剪图片
下一篇: react学习8-React 事件处理
推荐阅读
-
谈谈tomcat配置默认路径的注意事项
-
jupyter notebook环境配置(重写config文件、配置默认工作文件路径、如何解决需要token登陆的问题/解决无法跳转浏览器问题等)
-
linux系统中修改tomcat默认输入日志路径的方法
-
Eclipse配置tomcat发布路径的问题wtpwebapps解决办法
-
Eclipse配置tomcat发布路径的问题wtpwebapps解决办法
-
jsp项目中更改tomcat的默认index.jsp访问路径的方法
-
修改Nodejs内置的npm默认配置路径方法
-
jsp项目中更改tomcat的默认index.jsp访问路径的方法
-
tomcat虚拟路径的配置方法汇总
-
jsp项目中如何更改tomcat的默认index.jsp访问路径