HTTPD 代理通过 ssl 到 http

HTTPD 代理通过 ssl 到 http

本质上,我让 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

您没有提供错误消息或ConnectionTomcat 端设置的描述,因此我在这里猜测:

就我个人而言,我将 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 应用程序的名称。

相关内容