我正在尝试使用 Apache 和与 JIRA 捆绑在一起的 Tomcat 实例设置反向代理。我已遵循方向在 JIRA wiki 上完全正确。该网站显示得很好http://ourdomain:8080/jira
,所以我知道 Tomcatserver.xml
文件已根据他们的指示正确设置。
然而,我无法让 Apache 反向代理工作,尽管读了很多资料,但我仍不明白原因。
我在 Ubuntu 上运行 Apache2.2,当然启用了 mod_proxy 和 mod_proxy_http。网站default
运行正常;我的网站配置只是它的修改版本。以下是我的jira
虚拟主机配置/etc/apache2/sites-enabled/jira
:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName ourdomain.com
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
# JIRA Proxy Configuration
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /jira http://ourdomain.com:8080/jira
ProxyPassReverse /jira http://ourdomain.com:8080/jira
</VirtualHost>
当我在浏览器中访问该网站时,我得到了一个404 未找到使用以下(标准)文本:
此服务器上未找到请求的 URL /jira
ourdomain.com 端口 80 上的 Apache/2.2.22 (Ubuntu) 服务器
同时,输出apachectl -S
为:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server ourdomain.com.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost ourdomain.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost ourdomain.com (/etc/apache2/sites-enabled/jira:1)
因此,我可以在 正常访问该网站,ourcomain.com:8080/jira
但不能在 访问ourdomain.com/jira
。
最后一行可能表明了问题 - 它是否应该监听port 8080
,并且我是否应该更改上面的 vhost 条目?
显然我有问题,但我没有看到;我的配置出现与 JIRA wiki 上的说明完全匹配。如果能得到帮助,我将不胜感激。我在这里浏览了其他几个答案,但都没有成功。
答案1
您ServerName ourdomain.com
在 中有一个/etc/apache2/sites-enabled/000-default
,ServerName ourdomain.com
在 中有一个/etc/apache2/sites-enabled/jira
。000-default
第一个优先,因为它按字母顺序排在第一位;您的 jira 配置未被使用。
更改文件ServerName ourdomain.com
中的行000-default
,或者如果您不使用它,那么只需a2dissite default
。
答案2
尽管通过代理连接到安全站点,我还是按照几乎相同的方式设置了我们的 JIRA。
我发现我的配置和你的配置之间的唯一区别是我保留了现有的 /etc/apache2/sites-enabled/000-default:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
但随后添加了一个新文件 /etc/apache2/sites-enabled/jira-mod_proxy,其中包含
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine on
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /jira https://localhost:8443/jira
ProxyPassReverse /jira https://localhost:8443/jira
如果忽略我用于 SSL 的 8443 端口,那么我能看到的唯一区别是
使用 localhost 而不是 FQDN,但这并不重要,因为你可以访问你的网站,所以
http://ourdomain:8080/jira
tomcat 显然正在监听你的真实 IP 地址<Proxy>
在元素外部进行配置<VirtualHost>
。
因此也许代理配置需要位于虚拟主机设置之外?