同一域上两个应用程序的SSL代理(一个没有上下文路径的应用程序)

时间:2017-07-04 13:27:41

标签: apache tomcat ssl

我在同一台服务器上的单独tomcat上运行了2个应用程序

申请1:www.example.com
应用2:www.example.com/app

我已经使配置和SSL适用于应用程序1,但不适用于应用程序2.

当我尝试访问https:www.example.com/app时,我收到了一个未找到页面的例外

  

的httpd.conf   

ServerName example.com

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

SSLEngine               On

SSLCertificateFile      /etc/ssl/certs/mydomain_com_with_chain.crt
SSLCertificateKeyFile   /etc/ssl/private/mydomain_com.key

ProxyPass               /       http://myserver:8081/
ProxyPassReverse        /       http://myserver:8081/

ProxyPass               /app       http://myserver:8082/app
ProxyPassReverse        /app       http://myserver:8082/app

server.xml配置正确,连接器具有代理参数

 <Connector port="8081"
               maxThreads="150"
               minSpareThreads="25"
               connectionTimeout="20000"
               enableLookups="false"
               maxHttpHeaderSize="8192"
               protocol="HTTP/1.1"
               useBodyEncodingForURI="true"
               acceptCount="100"
               disableUploadTimeout="true"
               scheme="https"
               proxyName="example.com"
               proxyPort="443"
               secure="true"/>

有人可以在这里指出问题。我怀疑这是因为应用程序1没有上下文路径。但是,我的应用程序1没有上下文路径。 任何建议都高度赞赏。

2 个答案:

答案 0 :(得分:1)

如果您真的在8081和8082上运行两个tomcats(因为您只提供一个连接器配置),这里摘录自mod_proxy documentation(强调我的):

  

订购ProxyPass指令

     

在中检查配置的ProxyPass和ProxyPassMatch 规则   配置顺序。匹配胜利的第一条规则。所以通常   你应该从最长的开始对有冲突的ProxyPass规则进行排序   首先是网址。否则,以后的较长URLS规则将被隐藏   任何早期使用URL的前导子字符串的规则。注意   与工人分享有一些关系。相比之下,只有一个   ProxyPass指令可以放在Location块中,并且最多   具体位置优先。

这意味着它应该足以重新排序

ProxyPass               /app       http://myserver:8082/app
ProxyPassReverse        /app       http://myserver:8082/app

ProxyPass               /       http://myserver:8081/
ProxyPassReverse        /       http://myserver:8081/

此外,你可能想看看Joao Vitorino将第二个参数更改为ProxyPassReverse的答案 - 我通常不使用ProxyPass及其相关选项,所以我无法从头脑中分辨出来。

缺少匹配的罪魁祸首似乎是第一个覆盖/的ProxyPass赢得了/app的第二个

答案 1 :(得分:0)

我认为问题出在你的proxypass

你有

ProxyPass               /       http://myserver:8081/
ProxyPassReverse        /       http://myserver:8081/

ProxyPass               /app       http://myserver:8082/app
ProxyPassReverse        /app       http://myserver:8082/app

应该是

ProxyPass               /       http://myserver:8081/
ProxyPassReverse        /       https://www.example.com/

ProxyPass               /app       http://myserver:8081/app
ProxyPassReverse        /app       https://www.example.com/app

除非您有端口偏移,否则没有理由调用端口8082

Apache ProxyPass Doc