我在端口8080上有一个工作的Tomcat应用程序(Alfresco),我需要在端口443上运行,从Apache转发(Apache已经在此服务器上处理许多其他SSL端点)。
这工作,但我不太明白为什么.我的设置是:
1.带有mod_jk
的Apache。连接器处理URL https://example.com/alfresco
和https://example.com/share
,这两个URL以前显式地位于端口8080上。worker.properties
被设置为转发到端口8009
- 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(稍微)坏了。
1条答案
按热度按时间rnmwe5a21#
在您的例子中,tomcats端口8009上的ajp连接器仅用于来自apache的最终用户请求,充当反向代理。如果您需要处理443上的最终用户请求,您应该仅在apache端定义。在Alfresco的情况下,端口8080/8443上的连接器用于组件间请求。(ShareUI > Repository,Solr tracker > repository).如果你不知道你在做什么,不要修改这些连接器/密钥库.反过来:你可以配置8080/8443的连接器只在localhost上侦听,以强制任何最终用户通过Apache请求.