通过 IP 和端口转发访问时显示来自网络服务器的正确网站

通过 IP 和端口转发访问时显示来自网络服务器的正确网站

我已经设置了端口转发以指向我的工作网络服务器,以便选定的用户在离站时可以通过我们的外部 IP 地址访问网站。转发到服务器是可行的,但此服务器上有多个配置,目前它只停留在第一个配置上,因此显示了错误的网站。

例如,以这两个配置为例,我们的外部 IP 地址是11.22.33.44- 我希望能够转到http://11.22.33.44:789(随机端口,可以是任意端口)并显示配置 1 中的网站。但是,配置 2 中的网站正在显示,因为它在配置列表中按字母顺序排在第一位。有没有办法(类似于 ServerAlias)可以检查哪个端口已被访问并使用相应的配置?

配置 1

Listen *:789
NameVirtualHost *:80
NameVirtualHost *:789

<VirtualHost *:80 *.789>
        ServerName test.dynedrewett.com
        DocumentRoot /var/www/html/website/test
        ErrorLog /var/log/httpd/test.dynedrewett.com-error
        CustomLog /var/log/httpd/test.dynedrewett.com-access combined
        ErrorDocument 401 /wp-content/themes/dyne_drewett/401.php
</VirtualHost>

配置 2

<VirtualHost *:80>
        ServerName dummy.dynedrewett.com
        ServerAlias dummy
        DocumentRoot /var/www/html/intranet/intranet_test
        ErrorLog /var/log/httpd/dummy.dynedrewett.com-error
        CustomLog /var/log/httpd/dummy.dynedrewett.com-access combined
        ErrorDocument 403 /wp-content/themes/dyne_drewnett/403.php
</VirtualHost>

有什么方法可以修改配置,以便在执行此操作时显示正确的网站?谢谢。

答案1

当您在同一 IP 地址上托管多个域名时,Web 服务器将使用请求标头中存在的域来确定要提供哪些内容。大多数 Apache 安装都默认带有“VirtuaHost”配置,即使它只为一个站点提供服务。

当请求没有足够的信息来选择正确的 VirtualHost 时,您可以将一个站点设为默认站点,请检查有关默认虚拟主机的 Apache 文档配置。

另一种方法是将某个域名指向外部 IP,并使用 ServerAlias 指令将该域名包含在 VirtualHost 配置中。

[更新]

您无法使用基于名称的虚拟主机在同一个 IP / 端口上为多个网站提供服务,但您可以在备用 TCP 端口(或 IP 地址,如果您有多个可用)上为它们提供服务。

如果您无法设置外部 DNS,为了使用基于名称的虚拟主机,您可以采用以下技巧:编辑客户端机器 /etc/hosts(或%WINDIR%\system32\drivers\etc\host)文件以将相同的内部 DNS 名称指向您的外部 IP。

相关内容