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

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值