Apache 作为具有子域的 Tomcat 的代理

标签 apache tomcat proxy confluence

尽管我在 SO 上发现了一些类似的报告,但没有任何建议可以解决我的问题。所以我决定自己提出一个问题。

我在 Ubuntu 上的 Tomcat 实例上将 Confluence(和 Jira)作为 WAR 运行。该应用程序可通过 http://localhost:8080/confluence 访问.我想将 apache 配置为代理以允许通过 http://confluence.<servername>.de 进行公共(public)访问.按照 https://confluence.atlassian.com/display/DOC/Using+Apache+with+mod_proxy#UsingApachewithmod_proxy-complex 上的说明进行操作我做了以下步骤:

  • 附加属性proxyName="confluence.<servername>.de"proxyPort="80"/var/lib/tomcat7/conf/server.xml 中的连接器元素。
  • /etc/apache2/sites-enabled/confluence.conf 中定义了一个虚拟主机

confluence.conf 包含以下内容:

<VirtualHost *:80>
  ServerName confluence.<servername>.de

  ProxyRequests Off
  ProxyPreserveHost On

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://localhost:8080/confluence
  ProxyPassReverse / http://localhost:8080/confluence

  ProxyHTMLURLMap / /confluence/

  <Location />
    Order allow,deny
    Allow from all
  </Location>
</VirtualHost>

使用此配置我无法调用 http://localhost:8080/confluence由于这个 (wget) 输出:

--2014-12-23 08:38:13--  http://localhost:8080/confluence
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:8080... failed: Connection refused.
Connecting to localhost (localhost)|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://confluence.<servername>.de/confluence/ [following]
--2014-12-23 08:38:13--  http://confluence.<servername>.de/confluence/
Resolving confluence.<servername>.de (confluence.<servername>.de)... 92.51.163.197
Connecting to confluence.<servername>.de (confluence.<servername>.de)|92.51.163.197|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2014-12-23 08:38:13 ERROR 404: Not Found.

如果我删除属性 proxyName 和 proxyPort,则可以进行此访问。但是,通过 http://confluence.<servername>.de 调用仍然会产生错误。 Apache 日志的输出表明 URL 重写已损坏:

[Tue Dec 23 08:50:47.952647 2014] [authz_core:debug] [pid 24715:tid 140609413170944] mod_authz_core.c(828): [client 37.201.226.149:11808] AH01628: authorization result: granted (no directives)
[Tue Dec 23 08:50:47.952809 2014] [proxy:debug] [pid 24715:tid 140609413170944] mod_proxy.c(1104): [client 37.201.226.149:11808] AH01143: Running scheme http handler (attempt 0)
[Tue Dec 23 08:50:47.952838 2014] [proxy:debug] [pid 24715:tid 140609413170944] proxy_util.c(2020): AH00942: HTTP: has acquired connection for (localhost)
[Tue Dec 23 08:50:47.952851 2014] [proxy:debug] [pid 24715:tid 140609413170944] proxy_util.c(2072): [client 37.201.226.149:11808] AH00944: connecting http://localhost:8080/confluence to localhost:8080
[Tue Dec 23 08:50:47.953069 2014] [proxy:debug] [pid 24715:tid 140609413170944] proxy_util.c(2206): [client 37.201.226.149:11808] AH00947: connected /confluence to localhost:8080
[Tue Dec 23 08:50:47.953176 2014] [proxy:debug] [pid 24715:tid 140609413170944] proxy_util.c(2483): (111)Connection refused: AH00957: HTTP: attempt to connect to [::1]:8080 (localhost) failed
[Tue Dec 23 08:50:47.953277 2014] [proxy:debug] [pid 24715:tid 140609413170944] proxy_util.c(2610): AH00962: HTTP: connection complete to [::1]:8080 (localhost)
[Tue Dec 23 08:50:47.956860 2014] [proxy:debug] [pid 24715:tid 140609413170944] proxy_util.c(2035): AH00943: http: has released connection for (localhost)
[Tue Dec 23 08:50:47.988123 2014] [authz_core:debug] [pid 24715:tid 140609402681088] mod_authz_core.c(828): [client 37.201.226.149:11808] AH01628: authorization result: granted (no directives)
[Tue Dec 23 08:50:47.988231 2014] [proxy:debug] [pid 24715:tid 140609402681088] mod_proxy.c(1104): [client 37.201.226.149:11808] AH01143: Running scheme http handler (attempt 0)
[Tue Dec 23 08:50:47.988250 2014] [proxy:debug] [pid 24715:tid 140609402681088] proxy_util.c(2020): AH00942: HTTP: has acquired connection for (localhost)
[Tue Dec 23 08:50:47.988264 2014] [proxy:debug] [pid 24715:tid 140609402681088] proxy_util.c(2072): [client 37.201.226.149:11808] AH00944: connecting http://localhost:8080/confluenceconfluence/ to localhost:8080
[Tue Dec 23 08:50:47.988277 2014] [proxy:debug] [pid 24715:tid 140609402681088] proxy_util.c(2206): [client 37.201.226.149:11808] AH00947: connected /confluenceconfluence/ to localhost:8080
[Tue Dec 23 08:50:47.990134 2014] [proxy:debug] [pid 24715:tid 140609402681088] proxy_util.c(2035): AH00943: http: has released connection for (localhost)

我错过了什么吗?顺便说一句,如果我以 URL http://<servername>.de/confluence 的方式调整虚拟主机配置用作代理一切正常。

如有任何建议,我们将不胜感激。

最佳答案

我个人的偏好是在子文件夹中部署应用程序并像这样设置代理:

ProxyPass "/confluence/" "http://localhost:8080/confluence/"
ProxyPassReverse "/confluence/" "http://localhost:8080/confluence/"

不需要 ProxyHTMLURLMap,这可能就是您看到“AH00944:连接 http://localhost:8080/confluenceconfluence/ 到 localhost:8080”的原因

按照您的预期进行设置可能有点棘手,因为您需要机器的完全限定域名为 confluence.servername.de 并且您还需要在本地 DNS 中有一个 A 记录。我支持 Slash 的问题:你能 ping confluence.servername.de 吗?

解决了这个问题后,您可能还想根据需要研究使用这些指令:

ProxyRequests Off
ProxyVia Off
RemoteIPHeader X-Forwarded-For
RequestHeader    unset  Accept-Encoding
ProxyHTMLEnable On
ProxyHTMLExtended On
<Proxy *>
    Require all granted
</Proxy>

关于Apache 作为具有子域的 Tomcat 的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27616460/

相关文章:

apache - 如何在 Apache 虚拟主机中使用来自 CloudFront 的自定义 header

java - 使用诸如TomCat之类的Java开源serverlet引擎在Windows下创建独立Web服务的教程

java - Tomcat JSP Jersey 应用程序中的罕见异常 (org.apache.catalina.core.StandardContext filterStart)

windows - Cntlm 拒绝除 1 个 IP 之外的所有 IP(Windows)

apache - 如何配置 Apache 主 Web 服务器来处理来自用户的 SSL 连接(Tomcat Servlet/JSP 容器)

php - 模拟域的最佳方法?

apache - 在 Apache 服务器 ubuntu 16.04 lts 中设置子域

java - Tomcat7 在WEB-INF/lib/lookHere.jar 中找不到类

git - 如果依赖项尝试从 Internet 下载,如何配置代理?

node.js - 如何在 node.js 中同时使用多个代理(代理)