本质上,我让 httpd 将 http 请求重新路由到 Tomcat 的某个位置 subdomain.domain.com/folder ( http://localhost:8080/app/
)。使用 ProxyPass 和 ProxyPassReverse 功能可以正常工作。但是,当使用 https 执行此操作时,我的 Tomcat 实例会抱怨它不知道如何处理安全连接。基本上,我试图让来自https://subdomain.domain.com/folder由 apache 解密然后发送到http://localhost:8080/app/
。我设置的相关虚拟主机是这样的:
我希望您说得清楚。如果您需要更多说明,我可以提供。
<VirtualHost *:443>
# General setup for the virtual host
DocumentRoot "/srv/www/docroot/"
ServerName subdomain.domain.com
#ServerAdmin [email protected]
ErrorLog /var/log/apache2/mydomain-ssl-error_log
TransferLog /var/log/apache2/mydomain-ssl-access_log
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
SSLCertificateFile /etc/apache2/certs/my-cert.crt
SSLCertificateKeyFile /etc/apache2/certs/my-key.key
SSLCertificateChainFile /etc/apache2/certs/DigiCertCA.crt
# Turn on proxy engine so urls can be forwarded
SSLProxyEngine on
# URLs to forward
<Location /folder>
ProxyPass http://localhost:8080/app/
ProxyPassReverse http://localhost:8080/app/
</Location>
# 4 possible values: All, SSLv2, SSLv3, TLSv1. Allow TLS only:
SSLProtocol all -SSLv2 -SSLv3\
Tomcat 配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
keystoreFile="/usr/share/apache-tomcat-7.0.27/.keystore" keystorePass="Kurusawa701"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
答案1
您没有提供错误消息或Connection
Tomcat 端设置的描述,因此我在这里猜测:
- Tomcat 可能认为(错误地)它正在提供安全性。按照此处的说明重新配置。
- 编辑:OP 不希望 Tomcat 执行 SSL,因此此选项已弃用...
balancer
方法 - 利用 AJP 来代替:Apache 页面
就我个人而言,我将 AJP 与 Tomcat 一起使用,因为它对我的大脑来说效果更好,或者也许我只是在 Java 设置方面遇到了麻烦。
答案2
彻底删除端口 8443 上的第二个 Tomcat 连接器。将另一个连接器中的 redirectPort 更改为 443。删除 SSLProxyEngine 指令,或将其关闭。目前,您 (a) 能够在 Tomcat 中接收 HTTPS,但这并不是您想要的;(b) 由于 SSLProxyEngine,您能够从 Apache 发送 HTTPS,但这也是您想要的。
将 /folder 重定向到 /app 会遇到很大麻烦,因为 Tomcat Web 应用程序会生成以 /app 开头的内部自引用 URL。有各种解决方案,例如 ProxyPassReverse 和 mod_proxy_http,但在我看来,治疗比疾病更糟糕。使它们相同,例如 /app /app,然后您也可以摆脱 ProxyPassReverse。尝试让您的 Apache 在 URL 方面完全透明,这可能意味着调整 Tomcat Web 应用程序的名称。