我在同一台服务器上的单独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没有上下文路径。 任何建议都高度赞赏。
答案 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