我正在为内部服务设置一个 Apache 2.2 Ubuntu Web 服务器,该服务器也应该可以从 LAN 外部访问。我们的 LAN 有一个外部 IP,即 RV042 Cisco 路由器的外部 IP。
我们在外部 DNS 服务器上设置了几个指向该 IP 的 A 记录。
我们的内部 DNS 服务器将相同的记录解析为我们 Web 服务器的内部 IP,因此网络内部的计算机可以使用与外部相同的地址访问它们。
我们将路由器的外部 80 端口转发到我们的 Web 服务器的 80 端口。
我为列表中的每个域名设置了一个虚拟主机,我的 httpd.conf 如下所示:
ServerName web.domain.com
NameVirtualHost *:80
<VirtualHost *:80>
ServerName alfresco.domain.com
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /alfresco http://localhost:8080/alfresco
ProxyPassReverse /alfresco http://localhost:8080/alfresco
ProxyPass /share http://localhost:8080/share
ProxyPassReverse /share http://localhost:8080/share
</VirtualHost>
<VirtualHost *:80>
ServerName crm.domain.com
DocumentRoot /var/www/sugarcrm
</VirtualHost>
现在,如果我们在局域网中,它就可以正常工作。
然而,如果我们在 LAN 之外,我们就会到达我们的 Web 服务器的默认页面,其中显示:
It Works! This is the default web page for this server.
但是我们无法访问虚拟主机,就好像路由器将数据包转发到 Web 服务器时没有保留域名一样。
我做错了什么吗?我该如何检查发生了什么?应该进行哪些设置才能使其从外部工作?
答案1
尝试打开 ProxyPreserveHost 并将端口 80 替换为 *。
像这样:
<VirtualHost *:*>
ServerName alfresco.domain.com
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass /alfresco http://localhost:8080/alfresco
ProxyPassReverse /alfresco http://localhost:8080/alfresco
ProxyPass /share http://localhost:8080/share
ProxyPassReverse /share http://localhost:8080/share
</VirtualHost>