Apache的反向代理有时不工作

我正在使用数字海洋液滴(Ubuntu 14.04.2 LTS(GNU / Linux 3.13.0-52-generic x86_64))来承载jira和confluence。 它们在相同的IP但不同的端口上启动。 我想要使​​用jira.team.domain.com和confluence.team.domain.com访问它们,所以我去了反向代理解决scheme,使用Apache 2.4.7。

事情真的很好,我让他们工作得很快。 问题是,几天后,一段时间,反向代理不工作,我在浏览器中得到“主机名未解决”。 我检查了jira和confluence应用程序可以在ip:port地址(端口8081和8091)访问。 过了一会儿,不知道到底有多less,才重新开始工作。

设置如下:

Jira server.xml包含两个连接器:

<Connector port="8080" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true" proxyName="jira.team.domain.com" proxyPort="80"/> <Connector port="8081" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true"/> 

Confluence server.xml也有2个连接器:

 <Connector port="8091" connectionTimeout="20000" redirectPort="8443" maxThreads="200" minSpareThreads="10" enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8" protocol="org.apache.coyote.http11.Http11NioProtocol" /> <Connector port="8090" connectionTimeout="20000" redirectPort="8443" maxThreads="200" minSpareThreads="10" enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8" protocol="org.apache.coyote.http11.Http11NioProtocol" proxyName="confluence.team.domain.com" proxyPort="80" /> 

和/etc/apache2/sites-enabled/000-default.conf看起来像这样:

 <VirtualHost *:*> ServerName localhost # DocumentRoot /var/www/html <Proxy *> Require all granted </Proxy> # ProxyRequests Off ProxyPreserveHost On ProxyPass / http://jira.team.domain.com:8080/ ProxyPassReverse / http://jira.team.domain.com:8080/ </VirtualHost> <VirtualHost *:*> ServerName confluence.team.domain.com DocumentRoot /var/www/html <Proxy *> Require all granted </Proxy> ProxyRequests Off ProxyPreserveHost On ProxyPass / http://confluence.team.domain.com:8090/ ProxyPassReverse / http://confluence.team.domain.com:8090/ </VirtualHost> 

任何人都可以帮我解决这个问题吗?

这听起来有些类似于反向代理的问题,Atlassian应用程序的特点是由于Apache的间歇性问题,而Tomcat实例看起来很好。 在浏览器中的“主机名未解决”不会与这样做,所以也许没有,但你可以给这些一枪。 这不会伤害任何东西尝试。

如果Apache服务器本身有时会遇到问题,那么使用主机文件来parsingDNS查询将非常简单。 确保fqdn位于分配给回送(127.0.0.1)的/etc/hosts ,或者你有任何JIRA / Confluence监听的接口:

 127.0.0.1 localhost jira.team.domain.com confluence.team.domain.com 

如果将其分配给回送,则需要确保JIRA和Confluence正在回送接口(或所有接口)上进行监听。

我经常看到一个问题(通常向用户返回503错误)是Apache检测到后端的某种问题。 当它回退60秒默认情况下。 这可能是一个有用的线索,JIRA和/或Confluence存在资源争用问题,所以不应该被忽略,但是每当后端出现故障时60秒的停机时间是非常多的。 您可以通过在ProxyPass指令上configuration重试参数来禁用此function:

 <VirtualHost *:*> ServerName localhost # DocumentRoot /var/www/html <Proxy *> Require all granted </Proxy> # ProxyRequests Off ProxyPreserveHost On ProxyPass / http://jira.team.domain.com:8080/ retry=0 ProxyPassReverse / http://jira.team.domain.com:8080/ </VirtualHost> <VirtualHost *:*> ServerName confluence.team.domain.com DocumentRoot /var/www/html <Proxy *> Require all granted </Proxy> ProxyRequests Off ProxyPreserveHost On ProxyPass / http://confluence.team.domain.com:8090/ retry=0 ProxyPassReverse / http://confluence.team.domain.com:8090/ </VirtualHost> 

从mod_proxy文档:

连接池工作人员重试超时秒数。 如果连接池工作者到后端服务器处于错误状态,则Apache httpd不会将任何请求转发到该服务器,直到超时到期。 这样可以closures后端服务器进行维护,并在以后重新联机。 值为0意味着总是重试工作在错误状态,没有超时。

https://httpd.apache.org/docs/2.4/mod/mod_proxy.html

如果这不起作用,请尝试使用浏览器的“开发工具”来查看Apache正在返回的内容,以及正在设置的标头。 使用tail -f /path/to/logs/goes/here查看Apache日志时,刷新刷新button也不会造成任何影响。