我们有两个 Web 服务器,一个托管我们的帮助台 Web 门户 (helpdesk.domain.com),另一个托管我们公司的 Intranet (intranet.domain.com)。我正在尝试配置托管在帮助台机器 (helpdesk.domain.com) 上的 Apache Web 服务器,以将非 helpdesk.domain.com 发送到 intranet.domain.com。我感觉我错过了一些简单的东西,因为当尝试在本地网络之外访问 helpdesk.DOMAIN.com 时会导致重定向到 intranet.DOMAIN.com。
这是我当前的 helpdesk.DOMAIN.com apache 网络服务器的配置文件。
<VirtualHost *:80>
ServerName intranet.DOMAIN.com
ProxyPass http://intranet.DOMAIN.com http://192.0.1.22/ nocanon
ProxyPassReverse http://intranet.DOMAIN.com http://192.0.1.22/
ProxyPreserveHost on
ErrorLog ${APACHE_LOG_DIR}/intranet_error.log
CustomLog ${APACHE_LOG_DIR}/intranet_error.log common
</VirtualHost>
<VirtualHost *:80>
ServerName helpdesk.DOMAIN.com
ServerAlias helpdesk.DOMAIN helpdesk.DOMAIN www.helpdesk.DOMAIN.com
ServerAdmin [email protected]
DocumentRoot /var/www/helpdesk.DOMAIN.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
答案1
首先,您需要确保启用了两个 Apache 模块,您可以使用以下命令执行此操作。
a2enmod proxy
a2enmod proxy_http
下面是一个示例配置,用于执行您要求的操作
<VirtualHost *:80>
ServerName helpdesk.DOMAIN.com
ServerAlias helpdesk.DOMAIN helpdesk.DOMAIN www.helpdesk.DOMAIN.com
ServerAdmin [email protected]
DocumentRoot /var/www/helpdesk.DOMAIN.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName intranet.DOMAIN.com
# If someone tries to access any other domain, send them to the intranet site.
ServerAlias *
ProxyPass / http://192.0.1.22/
ProxyPassReverse / http://192.0.1.22/
ProxyPreserveHost On
ErrorLog ${APACHE_LOG_DIR}/intranet_error.log
CustomLog ${APACHE_LOG_DIR}/intranet_error.log common
</VirtualHost>
- helpdesk.DOMAIN.com 的 VirtualHost 位于内联网之上。这将确保在访问 helpdesk.DOMAIN.com 域时,Apache 首先匹配此配置。
- 内部网的 VirtualHost 配置了通配符 ServerAlias (ServerAlias *)。这意味着它将匹配另一个 VirtualHost 中未明确提及的任何域(在本例中,是除 helpdesk.DOMAIN.com 之外的任何域)。
不要忘记重新启动 Apache 以使此配置生效。