【问题标题】:Serving two websites with Apache with single domain name and single IP address使用 Apache 为两个网站提供单一域名和单一 IP 地址
【发布时间】:2023-03-27 04:03:01
【问题描述】:

我正在尝试使用 Apache 从同一 Ubuntu 服务器托管两个网站。我有一个 IP 地址,而我只有一个域(解析为 IP 地址)。所以我想请求域名给一个网站,请求IP地址给另一个。

我在 /etc/apache2/sites-enabled 中有两个文件的符号链接,指向我的两个站点的配置。

一个包含:

<VirtualHost 1.2.3.4:80>
    ServerName 1.2.3.4
    stuff
</VirtualHost>

而另一个包含

<VirtualHost domain.net:80>
    ServerName domain.net
    stuff
</VirtualHost>

但是,当我启动 Apache 时,我收到以下消息:

[warn] VirtualHost 1.2.3.4:80 overlaps with VirtualHost domain.net:80, the first has precedence, perhaps you need a NameVirtualHost directive

当我将浏览器指向 domain.net 或 1.2.3.4 时,我得到了我想要与该 IP 地址关联的站点。

如果我删除任何一个符号链接,那么将浏览器指向域名或 IP 地址都会给出唯一启用的网站。 (如您所愿。)

据我了解,启用站点的两个配置文件都会同时加载,并且包含 IP 地址的配置文件胜过包含域名的配置文件。该警告建议查看 NameVirtualHost 指令,但我可以在网上找到的所有帮助都是指您有两个域名指向同一个 IP 地址的情况。

一如既往,非常感谢您的帮助或建议。

(值得一提的是,这些网站都是 Rails 应用程序,我正在使用Passenger 进行部署,但我认为这在这里并不重要。)

【问题讨论】:

  • 仅供参考,此类问题最好在 serverfault.com 上提供

标签: apache


【解决方案1】:

这就是我的做法:

NameVirtualHost 1.2.3.4:80

<VirtualHost 1.2.3.4:80>
    ServerName localhost
    DocumentRoot /var/www/default
</VirtualHost>

<VirtualHost 1.2.3.4:80>
    ServerName mydomain.net
    DocumentRoot /var/www/mydomain
</VirtualHost>

Apache 为每个请求寻找合适的虚拟主机。如果它没有找到与ServerNameServerAliases 中的任何一个匹配的,那么它将采用第一个。在第一个 VirtualHost 中为 ServerName 使用什么并不重要,因为如果其他 VirtualHosts 都不匹配,它将始终使用。

【讨论】:

  • 谢谢谢谢谢谢!我一直在试图找出当有人发出 IP 请求时如何阻止 Apache 提供随机内容,现在我知道了。 :)
  • 所以你为 2 个域使用了一个虚拟主机文件?
【解决方案2】:

遇到这个问题,我就是这样做的:

编辑 httpd.conf

sudo vi /etc/apache2/httpd.conf

添加这一行

NameVirtualHost *:80

注意:您可以将 *:80 替换为 your_ip_address:80

现在创建域名配置文件。我使用 domain_name.com

sudo vi /etc/apache2/sites-available/domain.com

将此添加到文件中

<VirtualHost *:80>
     ServerAdmin admin@domain.com
     ServerName www.domain.com
     ServerAlias domain.com
     DocumentRoot /var/www/domain.com/public_html/
     ErrorLog /var/www/domain.com/logs/error.log
     CustomLog /var/www/domain.com/logs/access.log combined
</VirtualHost>

确保 domain.com 配置中的目录存在

/var/www/domain.com/public_html/
/var/www/domain.com/logs

注意:如果需要,请使用这样的 mkdir 命令

sudo mkdir /var/www/domain.com/public_html/
sudo mkdir /var/www/domain.com/logs

现在我们需要像这样启用新的配置文件

sudo a2ensite domain.com

你应该会看到重启 apache 的提示,使用这个命令

/etc/init.d/apache2 restart

现在我们需要一个测试文件来查看

sudo vi /var/www/domain.com/public_html/index.html

添加一些文字

Hello domain.com

打开您的网络浏览器并转到您的新域

http://domain.com

【讨论】:

    【解决方案3】:

    确保您有说明

    NameVirtualHost *:80
    

    在 /etc/apache2/ports.conf 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-23
      • 2015-01-17
      • 2012-11-30
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 2021-03-03
      • 2014-12-17
      相关资源
      最近更新 更多