配置 Apache 服务器以代理 SSL 连接时出现问题

配置 Apache 服务器以代理 SSL 连接时出现问题

我正在使用 Apache Portable Runtime 在 Tomcat7 上运行应用程序,我购买了 SSL 证书并正确配置了它 - 当我尝试通过 ip:port 组合进行连接时,它可以正常连接,但警告我证书是颁发给域名的,而不是 IP。

我使用的 VPS 没有 SELinux(并且安装时出现问题),据我所知,需要在 apache 中配置 SSL,所以我只想将请求路由到 Tomcat,由 Tomcat 在其终端执行此操作。

我配置了 apache 来代理连接,首先使用运行良好的 80 端口:

NameVirtualHost www.mysite.com:80
<VirtualHost www.mysite.com:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName http://www.mysite.com
ServerAlias http://www.mysite.com
ProxyPass / http://localhost:8180/MYSITE/
ProxyPassReverse / http://localhost:8180/MYSITE/
ProxyPassReverseCookiePath /MYSITE/ /
</VirtualHost>

然后由于某种原因 SSL 端口无法工作:

NameVirtualHost www.mysite.com:443
<VirtualHost www.mysite.com:443>
        SSLProxyEngine On
        ProxyPreserveHost On
        ProxyRequests Off
        ServerName https://www.mysite.com
        ServerAlias https://www.mysite.com
        ProxyPass / https://localhost:8443/MYSITE/
        ProxyPassReverse / https://localhost:8443/MYSITE/
        ProxyPassReverseCookiePath /MYSITE/ /
        CacheDisable *
</VirtualHost>

编辑:我添加了

RequestHeader set Front-End-Https "On"

指令到 VirtualHost www.mysite.com:443,如下:http://www.gossamer-threads.com/lists/apache/users/396577

以下是 Tomcat 的 server.xml 中配置的 Tomcat APR 连接器 -

<Connector port="8443" maxHttpHeaderSize="16500"
                 maxThreads="150"
                 enableLookups="false" disableUploadTimeout="true"
                 acceptCount="100" scheme="https" secure="true"
                 SSLEnabled="true"
                 SSLCertificateFile="x509-cert-path"
                 SSLCertificateKeyFile="key-file-path"
 />

启用虚拟主机并重新启动 apache 时没有出现任何错误/警告。当我尝试 https 时,我在 FFox 中看到以下内容:

SSL received a record that exceeded the maximum permissible length.

(Error code: ssl_error_rx_record_too_long)

在 Chromium 中:

Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.

Apache 的 error.log 显示以下警告消息:

[warn] [client 216.58.38.90] proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be www.mysite.com for uri /

我花了几天的时间尝试对其进行配置,如果有人能解释发生了什么以及如何修复它,我将非常感激。

非常感谢,维克多。

答案1

您收到的错误可能是由于您的客户端(Firefox)正在尝试使用 SSL,但您的 Apache 虚拟主机未启用 SSL。

为了让您的客户端能够通过 SSL 与前端代理进行通信,您需要在前端而不是在 Tomcat 中执行 SSL。在 Apache 和 Tomcat 之间使用 SSL 绝对不会给您带来任何好处。

在您的<VirtualHost>街区,您至少需要:

SSLEngine On
SSLCertificateFile ...
SSLCertificateKeyFile ...

另请注意,htat SELinux 与 SSL 完全无关,除非配置错误的 SELinux 环境可能会阻止 Apache 读取必要的 SSL 证书。

如果您没有将 Apache 用作简单代理以外的任何其他用途,并且您确实对 Apache 配置不太满意,那么理论上您可以摆脱它,只让 Tomcat 监听端口 443(通过修改相应的块Connector)。

相关内容