apache - Apache httpd 背后的 Tomcat 通过 SSL(httpd 工作,tomcat 返回错误 500)

标签 apache tomcat ssl proxy ajp

我有一个 tomcat,监听 8080 端口,还有一个 apache httpd 监听 80 和 443 端口。

The httpd proxies the client through to tomcat via ajp. This works like a charm.

我在上面引用的声明是错误的。我错误地假设我将代理设置为使用 ajp 协议(protocol),但我确实使用了纯 http。 这也引出了这个问题的答案。

但如果我尝试通过 https 连接,我会得到一个安全连接,该连接显示未在任何地方记录的错误 500。我的猜测是,与 httpd (443) 的 https 连接正在运行,ajp 代理也可以运行,但 tomcat 需要一些我不知道的东西。

我已经尝试将代理连接到端口 8443 和 8080。在我看来,在端口 8080 上访问 tomcat 就足够了,因为无论如何所有流量都通过 httpd 重定向。

配置如下:

/etc/apache2/sites-available/default-ssl

<IfModule mod_ssl.c>
    ErrorLog /var/log/apache2/ssl_engine.log
    LogLevel error

    NameVirtualHost *:443

    <VirtualHost *:443>
            ServerName www.doma.in
            ServerAlias doma.in

            ServerSignature Off
            SSLEngine on

            SSLCertificateFile /etc/ssl/certs/ssl_certificate.crt
            SSLCertificateKeyFile /etc/ssl/certs/ssl_certificate.key
            SSLCertificateChainFile /etc/ssl/certs/intermediate_ca.crt

            ProxyPass / ajp://localhost:8080/ retry=0 timeout=240
            ProxyPassReverse / ajp://localhost:8080/
    </VirtualHost>
</IfModule>

/etc/tomcat7/server.xml

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.core.JasperListener" />
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

    <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"                    type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />
    </GlobalNamingResources>

    <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />

        <!-- Define an AJP 1.3 Connector on port 8009 -->
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URLEncoding="UTF-8" />
        <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8080" URLEncoding="UTF-8" /> also tried this, but same result. -->

        <Engine name="Catalina" defaultHost="localhost">
            <Realm className="org.apache.catalina.realm.LockOutRealm">
                <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
            </Realm>

            <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"></Host>
        </Engine>
    </Service>
</Server>

很遗憾,我无法提供任何日志,因为错误没有出现在任何日志中。

关于如何使这项工作有任何想法吗?

真诚的 z

最佳答案

答案很简单。我不使用 ajp,而是在未加密的网站上做一个简单的 http-proxy。

所以最终有效的代码是:

<IfModule mod_ssl.c>
    ErrorLog /var/log/apache2/ssl_engine.log
    LogLevel error

    NameVirtualHost *:443

    <VirtualHost *:443>
            ServerName www.doma.in
            ServerAlias doma.in

            SSLEngine on
            SSLCertificateFile /etc/ssl/certs/ssl_certificate.crt
            SSLCertificateKeyFile /etc/ssl/certs/ssl_certificate.key
            SSLCertificateChainFile /etc/ssl/certs/intermediate_ca.crt

            ProxyPass / http://127.0.0.1:8080/
            ProxyPassReverse / http://127.0.0.1:8080/
    </VirtualHost>
</IfModule>

虽然在性能方面,ajp 协议(protocol)会比这个更可取。

关于apache - Apache httpd 背后的 Tomcat 通过 SSL(httpd 工作,tomcat 返回错误 500),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39656766/

相关文章:

laravel - 无法通过 Docker 中的 Apache 访问我的 Laravel 项目 -/var/www/directory 为空

java - 从 Eclipse 运行 Tomcat 6 时出现 ClassCircularityError

c# - 集成使用 SSL 连接机器的 API

ssl - DataStax 接收器连接器 (kafka-connect-dse) 抛出 javax.net.ssl.SSLException : SSLEngine closed already

PHP 电子邮件脚本只打开 PHP 文件

java - 更改 HttpTransportFactory cxf 2.7.3

php - 防止直接访问 PHP 页面

file - 从网页访问服务器上的文件

windows - 如何在 Docker Windows Server 容器中安装 Tomcat?

ssl - 使用带 Arduino IDE 的 ESP8266 启动 TLS 握手