首页 > 解决方案 > 将 Apache ssl 端口 443 转发到 Tomcat http 端口

问题描述

我的 tomcat 在我的 linux 机器上的 7778 端口上独立运行。我已将 apache 配置为在 443 端口上的 ssl 上运行。

我的 httpd.conf 如下:

    Listen 80
<VirtualHost *:80>
    ServerName www.domain.com
    Redirect / https://www.example.com
</VirtualHost> -->
ProxyPass         /  http://localhost:7778/website
ProxyPassReverse  /  http://localhost:7778/website

我的 ssl.conf 如下:

Listen 443
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile    /path/to/certificate/file
SSLCertificateKeyFile /path/to/key
</VirtualHost>

我的 server.xml 连接器如下:

<Connector port="7778" protocol="HTTP/1.1"
                proxyName="www.domain.com" proxyPort="80" />

问题是我的 Apache 无法重定向到 7778 端口上的 Tomcat 并给出 503 错误。

标签: apachessltomcat8proxypass

解决方案


两步:

1首先确认您的 Tomcat 没问题。

确保您可以连接到http://localhost:7778/website并获得预期的响应。

然后,为了代理支持修改您的连接器:

<Connector port="7778" protocol="HTTP/1.1" proxyName="www.example.com" proxyPort="80" />

2修复你的 Apache 配置

在这里我假设:

  • 当您尝试http://www.example.com时,您将被重定向到https://www.example.com
  • 当您尝试https://www.example.com时,您会收到来自 Tomcat 的响应

    Listen 80
    <VirtualHost *:80>
        ServerName www.example.com
        ServerAlias example.com
    
        CustomLog "logs/80_access.log" combined
        ErrorLog  "logs/80_error.log"
    
        Redirect / https://www.example.com
    </VirtualHost>
    
    <VirtualHost *:443>
        ServerName www.example.com
        ServerAlias example.com
    
        # While debugging
        LogLevel debug
        CustomLog "logs/443_access.log" combined
        ErrorLog  "logs/443_error.log"
    
        SSLEngine On
        SSLCertificateFile    /path/to/certificate/file
        SSLCertificateKeyFile /path/to/key
    
        # Proxy to Tomcat
        ProxyRequests Off
        ProxyPass        / http://localhost:7778/website
        ProxyPassReverse / http://localhost:7778/website
    
    </VirtualHost>
    

您可能需要调整的内容

  • 日志文件目录
  • 证书文件目录
  • LogLevel,一旦工作就删除调试模式
  • 确保已加载所需的模块。 apachectl -t如果您遗漏任何内容,会通知您。

推荐阅读