Apache默认VirtualHost

Tid*_*ddo 29 apache virtualhost

如何在apache中设置默认的VirtualHost?我希望默认主机不要与ip地址主机相同.现在我有这样的事情:

NameVirtualHost *

<VirtualHost *>
ServerAdmin admin@domain.com
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
ServerAdmin admin@domain.com
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost *>
Run Code Online (Sandbox Code Playgroud)

如果域转发到我的服务器,但不在此vhost.conf文件中,则会按预期加载/ someOtherDir /中的文件.但我希望能够为ip-address本身和未添加到vhost.conf文件中的域使用不同的根(尚未).这可能吗?

编辑:纠正了我的代码,所以它看起来更像实际的vhost.conf文件

Tid*_*ddo 46

我找到了答案:我记得如果没有找到其他匹配块,Apache会使用第一个块,所以我在块serveralias的顶部添加了一个没有a 的块:

NameVirtualHost *

<VirtualHost *>
DocumentRoot /defaultdir/
</VirtualHost>

<VirtualHost *>
ServerAdmin admin@domain.com
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
ServerAdmin admin@domain.com
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

  • 文件的顺序已更改(按字母顺序排序),因此我的默认设置突然停止工作.我建议把配置放在````000-default.conf```文件中. (7认同)
  • 在我放置端口号80之前,我没有工作.即.<VirtualHost*:80>而不仅仅是<VirtualHost*>.我在CentOS 7上使用Apache 2.4. (5认同)
  • 实际上 - 我不得不将 `ServerName fake.example.com` 添加到“默认”虚拟主机。 (2认同)

小智 8

如果您使用的是Debian样式的虚拟主机配置(sites-available/sites-enabled),设置Default VirtualHost的一种方法是首先在httpd.conf或apache.conf中包含特定的配置文件(或者您的主要配置是什么)文件).

# To set default VirtualHost, include it before anything else.
IncludeOptional sites-enabled/my.site.com.conf

# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

# Load virtual host config files from "/etc/httpd/sites-enabled/".
IncludeOptional sites-enabled/*.conf
Run Code Online (Sandbox Code Playgroud)


Lui*_*MPF 6

实际上,我在 EC2 Linux AMI 上使用 Apache/2.4.39 (Amazon) 的虚拟主机配置(站点可用/站点启用)。因此,我有 1 个 EC2 实例来为许多站点(域)提供服务。

考虑到您已经安装并运行了虚拟主机。在我的文件夹中/etc/httpd/sites-available,我有一些带有域名(后缀.conf)的文件,例如:example.com.conf. 像这样创建一个新文件。

sudo nano /etc/httpd/sites-available/example.com.conf

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/html/domain
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

对于每个file.conf可用站点,我创建一个符号链接:

sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

这是默认配置,因此,如果直接通过服务器的 IP 访问,您将被重定向到.confsite-available 文件夹中第一个文件 ( ) 的 DocumentRoot,按文件名排序。

要在通过 IP 访问时拥有默认的 DocumentRoot 文件夹,您必须创建一个名为 的文件0a.conf,然后 Apache 将为该站点提供服务,因为这个新文件将是站点可用文件夹中的第一个。

您必须创建一个符号链接:

sudo ln -s /etc/httpd/sites-available/0a.conf /etc/httpd/sites-enabled/0a.conf

要检查服务顺序,请使用它:

sudo apachectl -S

现在,重新启动 Apache,并检查它。

  • 当您从软件包安装时,在启用站点和可用站点之间创建/删除符号链接是由与 apache 一起安装的实用程序负责的。`sudo a2ensite your_domain.conf` 将在启用站点中创建符号链接(从而启用虚拟主机),`sudo a2dissite your_domain.conf` 将删除符号链接(从而禁用虚拟主机) (2认同)

Art*_*are 5

这里的其他答案对我不起作用,但我找到了一个非常简单的解决方案。

我将默认值设置为列出的最后一个,然后我给了它ServerAlias *

例如:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.secondwebsite.com
    ServerAlias secondwebsite.com *.secondwebsite.com
    DocumentRoot /home/secondwebsite/web
</VirtualHost>

<VirtualHost *:80>
    ServerName www.defaultwebsite.com
    ServerAlias *
    DocumentRoot /home/defaultwebsite/web
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

如果访问者没有明确选择转到以 结尾的内容secondwebsite.com,他们将获得默认网站。