如何在 Linux 上的 Apache 2.4 上配置基于名称的虚拟主机?

如何在 Linux 上的 Apache 2.4 上配置基于名称的虚拟主机?

我对 Linux 和 apache 都很陌生。

我有一个使用 apache 托管在我电脑上的网站。假设域名是www.myweb.com。现在我想创建 3 个子域名a.myweb.comb.myweb.com

我的第一个问题是,我可以使用虚拟主机来实现这一点吗?因为我能找到的所有虚拟主机示例都使用不同的域,所以我不确定它是否也适用于子域。

我的第二个问题是基于虚拟主机适用于子域。在我的文件中,的httpd.conf值为。在下,我创建了 3 个文件夹,和。这是我的:DocumentRoot/srv/http/srv/httpdefaultabhttpd-vhosts.conf

<VirtualHost myIP:80>
    ServerAdmin [email protected] 
    DocumentRoot "/srv/http/default/public"
    ServerName www.myweb.com
    ServerAlias myweb.com
    ErrorLog "/srv/http/default/logs/error.log"
    CustomLog "/srv/http/default/logs/access.log" combined
    <Directory />
        Options FollowSymLinks Indexes
        Require all granted
    </Directory> 
</VirtualHost>


<VirtualHost myIP:80>
    ServerAdmin [email protected] 
    DocumentRoot "/srv/http/a/public"
    ServerName a.myweb.com
    ErrorLog "/srv/http/a/logs/error.log"
    CustomLog  "/srv/http/a/logs/access.log" combined
</VirtualHost>


<VirtualHost myIP:80>
    ServerAdmin [email protected] 
    DocumentRoot "/srv/http/b/public"
    ServerName b.myweb.com
    ErrorLog "/srv/http/b/logs/error.log"
    CustomLog  "/srv/http/b/logs/access.log" combined   
    <Directory />
        Options FollowSymLinks Indexes
        Require all granted
    </Directory> 
</VirtualHost>

现在的问题是,当我在浏览器中输入www.myweb.commyweb.coma.myweb.comb.myweb.com,我总是被带到DocumentRoot,也就是/srv/http。那么我做错了什么还是子域名不能这样工作?非常感谢。

答案1

我注意到您<VirtualHost myIP:80>在虚拟主机部分的开头使用了。我<VirtualHost *:80>为所有基于命名的虚拟主机使用了 - 请参阅如何设置 Apache 虚拟主机配置(附示例)了解为基于名称的虚拟主机和基于 IP 的虚拟主机配置服务器之间的区别。如果服务器有多个 IP 地址,而您希望站点响应不同的 IP 地址,我认为您应该输入一个 IP 地址,但如果所有站点都应该使用服务器正在监听的任何 IP 地址进行访问,那么请尝试在虚拟主机部分中使用“*”而不是 IP 地址,看看这是否有区别。否则,您的配置看起来与我自己的类似。您还可以尝试httpd -S检查 VirtualHost 配置语法,如该文章中建议的那样,看看 Apache 通过该检查报告的任何内容是否看起来不对劲。

答案2

您必须按照“目录”指令的要求使用完整路径Apache 文档。通过您的配置,您实际上是在配置从相应主机名对 httpd.conf 中配置的“DocumentRoot”路径的访问。

您的默认网站(www)的“目录”配置部分可能如下所示:

<Directory /srv/http/default/public>
    Options FollowSymLinks Indexes
    Require all granted
</Directory>

还要注意的是,目录“/”的默认访问权限是允许所有访问,这意味着 Apache httpd 将为从 URL 映射的任何文件提供服务。因此,根据文档中的建议,您可能需要在 httpd.conf 中将其更改为更受限制的内容。

<Directory "/">
    Require all denied
</Directory>

相关内容