1. 修改了tomcat类文件中的一个常量,这个常量是要写到页面中的
2. 修改了view中的一些模板
3. 打war包
4. 替换war包,tomcat开始热部署
5. 部署完毕,修改完全没有生效
6. 重启tomcat,修改生效
1. 修改了tomcat类文件中的一个常量,这个常量是要写到页面中的
2. 修改了view中的一些模板
3. 打war包
4. 替换war包,tomcat开始热部署
5. 部署完毕,修改完全没有生效
6. 重启tomcat,修改生效
问题
https ===> nginx(443) ===> tomcat(8080)
默认tomcat是不知道用户是通过https的访问访问的443端口的,如何让tomcat知道呢?
1. nginx上添加http header
1 |
proxy_set_header X-Forwarded-Proto https; |
2. tomcat 上参考上述设置的http header
1 2 3 |
<Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="x-forwarded-proto" /> |
注意: protocolHeader默认是空的,必须指定哦,因为https默认端口为443,所以connector的proxyPort可以不设置
3. 如果nginx看到的domain和tomcat看到的domain不同,那么,tomcat 重定向时根据自己看到的domain来重定向就会不符合预期了,这时候,需要通过connector的proxyName来实现
参考资料:
1 |
common.loader="{catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.base}/common/lib/*.jar","${catalina.base}/common/classes" |
catalina.home catalina.base 区别
catalina.home(安装目录):指向公用信息的位置,就是bin和lib的父目录。
catalina.base(工作目录):指向每个Tomcat目录私有信息的位置,是conf、logs、temp、webapps和work的父目录。
深入Jetty源码之Servlet框架及实现(ServletRequest、ServletResponse)
Tomcat中添加IP限制
1 |
<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="" allow="1.2.3.4"/> |
如此,则只允许1.2.3.4访问,其他不允许访问
如果要限制的IP其实是在x-forwarded-for 中,则需要在该Valve前面(后面还真不行)添加:
1 |
<Valve className="org.apache.catalina.valves.RemoteIpValve" /> |
但是,这样做会有一个副作用,就是
1 2 3 |
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".log" pattern="%h %{X-Forwarded-For}i %l %u %t &quot;%r&quot; %s %b" /> |
中的
1 |
%{X-Forwarded-For}i |
将不能再获取到了,而且%h 显示的也不是x-forwarded-for的IP;不过,access的valve中添加:
1 |
requestAttributesEnabled="true" |
如下:
1 2 3 4 5 |
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".log" pattern="%h %l %u %t &quot;%r&quot; %s %b" requestAttributesEnabled="true" /> |
则, %h 就是 x-forwarded-for的IP了
分析:
1 |
org.apache.catalina.valves.RemoteAddrValve |
中限制的是remoteAddr,乍一看,对x-forwarded-for 是不生效的,但是:
1 |
org.apache.catalina.valves.RemoteIpValve |
可以根据 x-forwarded-for 修改request中的remoteAddr的值。
如何将remoteIpValve.java 中的如下的log信息显示出来?
办法:
在 conf/logging.properties 中添加:
1 |
org.apache.catalina.level = FINE |
然后,在 catalina.out 中就可以看到了
配置文件
1. 如果配置文件中配置的docBase不存在,则tomcat无法启动,但是对于这种情况,configtest是检查不出来的