Spring pageContext.request.contextPath,其中Tomcat位于Apache之后,作为反向代理

时间:2019-07-18 09:35:22

标签: java spring apache tomcat

我在安装了Tomcat服务器的远程服务器上运行Spring App,该服务器可以通过https://mydom.com:8080/myapp访问我的应用。

为了使我的应用可以通过https://mydom.com访问,我安装了Apache,并将其配置为反向代理。

这是配置:

<VirtualHost _default_:443>

   SSLEngine On

   SSLCertificateFile /opt/ssl/mydom_com.crt
   SSLCertificateKeyFile /opt/ssl/mydom_com.key
   SSLCertificateChainFile /opt/ssl/mydom_com.ca-bundle

   BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
   SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

   ServerName mydom.com

   ProxyRequests Off
   ProxyPreserveHost On
   ProxyPass / http://127.0.0.1:8080/myapp/
   ProxyPassReverse / http://127.0.0.1:8080/myapp/
   ProxyPassReverseCookiePath /myapp /

</VirtualHost>

现在,我尝试在${pageContext.request.contextPath}文件中使用jsp来获取正确的链接和资源路径。

当我从IDE运行时,它返回/myapp,这很好。

mydom.com上运行时,它返回/myapp,这不好。我需要输入一个空字符串或/

如何配置以获取${pageContext.request.contextPath}的正确值?

1 个答案:

答案 0 :(得分:1)

从以下位置更改映射:

ProxyPass / http://127.0.0.1:8080/myapp/
ProxyPassReverse / http://127.0.0.1:8080/myapp/
ProxyPassReverseCookiePath /myapp /

收件人:

ProxyPass /myapp/ http://127.0.0.1:8080/myapp/
ProxyPassReverse /myapp/ http://127.0.0.1:8080/myapp/

您的所有问题都将得到解决。

尝试在代理中重写上下文路径是Tomcat管理员精神错乱的第一大原因。只是不要这样做。

如果您希望您的应用程序在/上可用,请执行以下操作之一:

  1. /重定向到/myapp/并使用我上面重写的映射
  2. 在Tomcat端将应用程序从/myapp/重命名为/,并修复您的映射以映射到/-> /

任何其他配置将是您将要应用的创可贴,修复和创可贴修复的无休止循环。