Apache默认虚拟主机
如何在Apache中设置默认VirtualHost 最好,我希望默认主机不与IP地址主机相同。现在我有这样的东西:Apache默认虚拟主机,apache,virtualhost,Apache,Virtualhost,如何在Apache中设置默认VirtualHost 最好,我希望默认主机不与IP地址主机相同。现在我有这样的东西: NameVirtualHost * <VirtualHost *> ServerAdmin admin@domain.com DocumentRoot /someOtherDir/ ServerAlias ip.of.the.server </VirtualHost> <VirtualHost *> Serve
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 *>
NameVirtualHost*
服务器管理员admin@domain.com
DocumentRoot/someOtherDir/
服务器别名ip.of.the.server
服务器管理员admin@domain.com
DocumentRoot/someroot/
ServerAlias domain.com*.domain.com
如果某个域被转发到我的服务器,但不在此vhost.conf文件中,则会按预期加载/someOtherDir/中的文件。但是我希望能够为IP地址本身和未添加到vhost.conf文件的域使用不同的根。这可能吗?该选项将是一个不错的选项。我找到了答案:我记得如果没有找到其他匹配的块,Apache将使用第一个块,因此我在块的顶部添加了一个不带
serveralias
的块:
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>
NameVirtualHost*
DocumentRoot/defaultdir/
服务器管理员admin@domain.com
DocumentRoot/someOtherDir/
服务器别名ip.of.the.server
服务器管理员admin@domain.com
DocumentRoot/someroot/
ServerAlias domain.com*.domain.com
另一种设置是将默认虚拟主机放在配置文件的末尾而不是开头。这样,在与默认虚拟主机匹配之前,将检查所有备选虚拟主机
例如:
NameVirtualHost *:80
Listen 80
...
<VirtualHost *:80>
ServerName host1
DocumentRoot /someDir
</VirtualHost>
<VirtualHost *:80>
ServerName host2
DocumentRoot /someOtherDir
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /defaultDir
</VirtualHost>
NameVirtualHost*:80
听80
...
服务器名主机1
DocumentRoot/someDir
服务器名主机2
DocumentRoot/someOtherDir
DocumentRoot/defaultDir
如果您使用的是Debian风格的虚拟主机配置(站点可用/站点启用),设置默认虚拟主机的一种方法是首先在httpd.conf或apache.conf(或主配置文件)中包含特定的配置文件
这里的其他答案对我不起作用,但我找到了一个非常简单的解决方案 我将默认值设置为最后列出的值,并将其设置为
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>
NameVirtualHost*:80
服务器名www.secondwebsite.com
ServerAlias secondwebsite.com*.secondwebsite.com
DocumentRoot/home/secondwebsite/web
服务器名www.defaultwebsite.com
服务器别名*
DocumentRoot/home/defaultwebsite/web
如果访问者没有明确选择访问以
secondwebsite.com
结尾的网站,他们将获得默认网站。我会说什么对我有效,上面的其他答案对我的情况毫无帮助。我希望它能帮助别人
事实上,我在EC2LinuxAMI和Apache/2.4.39(Amazon)上使用虚拟主机配置(站点可用/站点启用)。因此,我有一个ec2实例来服务许多站点(域)
考虑到您已经安装并运行了虚拟主机。在我的/etc/httpd/sites文件夹中,我有一些带有域名(后缀.conf)的文件,例如:domain.com.conf。创建一个这样的新文件
sudo nano/etc/httpd/sites available/domain.com.conf
服务器名www.domain.com
ServerAlias domain.com
DocumentRoot/var/www/html/domain
对于站点中可用的每个file.conf,我创建一个符号链接:
sudo ln-s/etc/httpd/sites available/domain.com.conf/etc/httpd/sites enabled/domain.com.conf
这是默认配置,因此,如果通过服务器的IP直接访问,您将被重定向到sites available文件夹中第一个文件(.conf)的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,并检查它
快乐=)我也有同样的问题。我可以通过在虚拟主机的IncludeOptional指令之前的httpd.conf中添加以下内容来修复它。现在localhost和ip192.168.x.x都指向Apache的默认测试页面。所有其他虚拟主机都按预期工作
<VirtualHost *:80>
DocumentRoot /var/www/html
</VirtualHost>
DocumentRoot/var/www/html
参考资料:强制性-之前的答案对我都不适用。在这个Apache配置中,我继承了一个奇怪的组合:基于IP地址的虚拟主机和*vHost(未分配/捕获所有IP地址)的虚拟主机 我希望Apache为未配置的主机提供相同的页面 我有:未配置的主机转到
000 default.conf
之后的第一个vhost。不管我将*:80捕获所有定义为第一个vhost,Apache都会加载第一个定义的站点,而不是默认的vhost:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
</VirtualHost>
通知—在这样的配置中,*vhost无法工作,因此您需要将IP地址应用于所有vhost。解决方案是:
#apache2.conf
#@警告这是apache 2.2特有的
名称虚拟主机*:80
听80
# ...
#aaaa.com.conf
ServerName aaaa.com
DocumentRoot/defaultDir
#host1.conf
服务器名主机1
DocumentRoot/someDir
#host2.conf
服务器名主机2
DocumentRoot/someOtherDir
在我的例子中,为了工作,我创建了一个
VirtualHost
(即VirtualHost
perCNAME
)名为aaaa.com
,因为我对不同的VirtualHost
有不同的文件,并且知道Apache按字母顺序读取它们。你能提供一个例子吗?我在本文档顶部已经有了行名VirtualHost*。如果我想有一个默认页面,我需要如何更改它?你能扩展你的答案吗?By(不带“编辑:”、“更新:”,或类似内容-答案应显示为已编写
<VirtualHost *:80>
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost 192.168.10.10:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost 192.168.10.10:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
SSLEngine On
...
</VirtualHost>
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/sites-enabled/000-default.conf:50
192.168.10.10:80 is a NameVirtualHost
default server server.tld (/etc/apache2/sites-enabled/000-default.conf:34)
port 80 namevhost server.tld (/etc/apache2/sites-enabled/000-default.conf:34)
port 80 namevhost some-site.tld (/etc/apache2/sites-enabled/100-some-site.tld.vhost:7)
...
46.23.86.103:443 is a NameVirtualHost
default server server.tld (/etc/apache2/sites-enabled/000-default.conf:38)
port 443 namevhost server.tld (/etc/apache2/sites-enabled/000-default.conf:38)
port 443 namevhost some-site.tld (/etc/apache2/sites-enabled/100-some-site.tld.vhost:182)
...
*:80 is a NameVirtualHost
default server server.tld (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost server.tld (/etc/apache2/sites-enabled/000-default.conf:1)