谈谈tomcat配置默认路径的注意事项

柔情只为你懂 2022-06-02 10:55 436阅读 0赞

场景:

在tomcat中部署项目,通过地址+端口直接访问项目,遇到这样的需求,一般的解决方案有几种呢?

方案:

1、将tomcat中webapps中ROOT目录中的文件删除掉,将项目的内容拷贝到此目录中。

此方式个人感觉丢失项目名称,项目的语义化不明确,同时更改了tomcat的默认访问,一般不考虑。

2、更改server.xml的配置,在的上一行添加如下配置:

前期项目就用了这种配置,去解决默认访问问题,但在实际应用中遇到了一些问题。

1)第一次将war包放到webapps中,启动项目,默认路径访问不了,只有加上项目名称才能访问,此时只能重启一次tomcat,默认路径才能访问,而且加项目名称和不加项目名称都可以访问。

2)日志打印混乱,日志丢失,今天的日志打到昨天的日志文件中。

3)如果项目中有定时任务执行,发现每次定时任务都会重复执行两次。

问题分析:

通过日志跟踪,发现项目中的spring容器启动了两次,以此可以推断项目启动了两次,这个也是日志混乱,定时任务执行两次的根本原因。为什么会启动两次呢,但为什么第一次启动的时候,项目是启动了一次,但默认路径又访问不了呢?

  1. <Host name="localhost" appBase="webapps"
  2. unpackWARs="true" autoDeploy="true">
  3. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  4. prefix="localhost_access_log." suffix=".txt"
  5. pattern="%h %l %u %t "%r" %s %b" />
  6. <Context path="" debug="0" docBase="hyxzx" reloadable="true"></Context>
  7. </Host>

1、当为Host容器,设置appBase属性时,Tomcat会自动启动此目录中的合法项目,且会自动解压war包。

2、同时通过Context设置项目的默认路径,此时会再次加载一下docBase中设置的项目,但Context中设置的项目,只能识别目录,不能识别war包,默认也不会自动解压war。这也是第一次启动tomcat时,默认路径访问不了的原因。

此处说一下Context中有个属性unpackWARs=”true”,可以解压war,但解压的项目是放到Host的appBase目录中的,如果再次重启,项目依然会启动两次。

解决方法:

Host中的appBase设置的路径和Context中docBase设置的路径不要在一个目录中,如下配置

  1. <Host name="localhost" appBase="webroot"
  2. unpackWARs="true" autoDeploy="true">
  3. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  4. prefix="localhost_access_log." suffix=".txt"
  5. pattern="%h %l %u %t "%r" %s %b" />
  6. <Context path="" debug="0" docBase="../webapps/wlgz" reloadable="true"></Context>
  7. </Host>

1、在tomcat的根路径下新建一个目录webroot,此文件可以放常规项目。

2、将需要配置默认路径的项目,放到webapps中,注意:不要放war包进去,一定是解压后的项目目录。否则识别不到项目。

此处可以手动解压,如下提供一种方式:

将war包上传到tomcat的根目录

进入webapps中,创建wlgz文件夹

进入wlgz文件夹,执行命令:jar -xvf ../../wlgz.war

个人理解:Context只是设置虚拟目录用的,解决的一般是上传文件的访问路径或者公众资源(这些文件不在tomcat容器中),通过此配置可以访问。

3、通过Nginx代理设置默认路径。

通过Nginx的代理配置默认路径,此时tomcat常规配置,只需要更改nginx配置即可,配置如下:

  1. server {
  2. listen 80;
  3. server_name api.ahggwl.com;
  4. large_client_header_buffers 4 16k;
  5. client_max_body_size 300m;
  6. client_body_buffer_size 128k;
  7. proxy_connect_timeout 600;
  8. proxy_read_timeout 600;
  9. proxy_send_timeout 600;
  10. proxy_buffer_size 64k;
  11. proxy_buffers 4 32k;
  12. proxy_busy_buffers_size 64k;
  13. proxy_temp_file_write_size 64k;
  14. location / {
  15. proxy_pass http://api.ahggwl.com/hytapp/;
  16. proxy_cookie_path /hytapp/ /;
  17. proxy_set_header Host $host:$server_port;
  18. proxy_set_header X-Real-IP $remote_addr;
  19. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  20. client_max_body_size 10m;
  21. }
  22. }

主要需要的配置:

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默认访问路径

http://blog.csdn.net/u010175124/article/details/9630329

发表评论

表情:
评论列表 (有 0 条评论,436人围观)

还没有评论,来说两句吧...

相关阅读

    相关 谈谈技术选型注意事项

    写在前面   对于一名热爱技术的工程师来说,很容易出现非常热衷于使用新技术的情况,记得有一次和一位做平台应用的同事闲聊,他问我最近在搞什么,我说在研究 Hadoop,正在用