Tomcat:反向代理需要哪些server.xml连接器?

5uzkadbs  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(165)

我在端口8080上有一个工作的Tomcat应用程序(Alfresco),我需要在端口443上运行,从Apache转发(Apache已经在此服务器上处理许多其他SSL端点)。
这工作,但我不太明白为什么.我的设置是:
1.带有mod_jk的Apache。连接器处理URL https://example.com/alfrescohttps://example.com/share,这两个URL以前显式地位于端口8080上。worker.properties被设置为转发到端口8009

  1. Tomcat的server.xml包含以下连接器定义:
<!-- Question: what is this for? -->
 <Connector port="8080" protocol="HTTP/1.1"
        URIEncoding="UTF-8" connectionTimeout="20000"
        maxHttpHeaderSize="32768" redirectPort="8443"
        enableLookups="false" xpoweredBy="false" server="AlfrescoECM"
        maxParameterCount="1000"/>

<!-- Alfresco requires an HTTPS connection to Solr on port 8443 -->
<Connector port="8443" protocol="HTTP/1.1"
               SSLEnabled="true" maxThreads="150" scheme="https"
               ... 
               sslProtocol="TLS" />

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3"
           port="8009" redirectPort="8443"
           maxParameterCount="1000" secretRequired="false" />

字符串

如果我省略了端口8080的连接器,这将不起作用:

INFO  [webscripts.connector.RemoteClient] [ajp-nio-127.0.0.1-8009-exec-3] Exception calling (GET) http://localhost:8080/alfresco/s/api/admin/restrictions?guest=true
org.apache.http.conn.HttpHostConnectException: Connect to localhost:8080 [localhost/127.0.0.1] failed: Connection refused
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156) ~[httpclient-4.5.13.jar:4.5.13]
...
Caused by: java.net.ConnectException: Connection refused


问:为什么我仍然需要一个连接器用于端口8080?这一切不应该由AJP处理吗?

已编辑

刚刚做了一些调试,通过运行netstat/lsof/fuser来找出端口8080上到底发生了什么。Tomcat/Alfresco正在监听8080,但是lsof将其标记为CLOSE_WAIT,所以它是未使用的,Alfresco应该关闭它,但是它没有。
我通常运行Keycloak/Quartus,我不得不关闭它来运行上面的测试。如果我运行Keycloak,它实际上会与8080上的Apache进行对话,所以8080 * 是 * 使用的,但不是Alfresco。事实上,Alfresco在Keycloak运行时正常运行,尽管Alfresco仍然认为它使用的是8080。
所以,除非我错过了什么,否则显而易见的结论是server.xml不需要8080的条目,而Alfresco(稍微)坏了。

rnmwe5a2

rnmwe5a21#

在您的例子中,tomcats端口8009上的ajp连接器仅用于来自apache的最终用户请求,充当反向代理。如果您需要处理443上的最终用户请求,您应该仅在apache端定义。在Alfresco的情况下,端口8080/8443上的连接器用于组件间请求。(ShareUI > Repository,Solr tracker > repository).如果你不知道你在做什么,不要修改这些连接器/密钥库.反过来:你可以配置8080/8443的连接器只在localhost上侦听,以强制任何最终用户通过Apache请求.

相关问题