Apache2 - 虚拟主机 - 错误 404 未找到

Apache2 - 虚拟主机 - 错误 404 未找到

刚刚在开发机上安装了 Apache2,无法通过互联网访问。安装后,我可以从客户端 (MAC) 打开浏览器访问 IP 地址,它确实显示默认的“Apache2 Ubuntu 默认页面”。

我正在尝试设置虚拟主机。找到了很多参考资料,但似乎无法实现。

/etc/apache2/sites-available在我创建的目录中,audio-site.conf它有以下内容

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /home/jason/web

    <Directory />
        Options FollowSymLinks
        AllowOverride All
        Order Allow,Deny
    </Directory>

    <Directory /home/jason/web/>
        AllowOverride all
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

然后运行命令

sudo a2ensite audio-site
sudo /etc/init.d/apache2 restart

在客户端浏览器中,我尝试使用 进行访问http://IP-address/audio-site。根据研究,我尝试了几种不同的设置,但似乎没有任何效果。

对于我所遗漏的内容,任何帮助都将不胜感激。

答案1

恐怕虚拟主机的工作方式不是这样的;)虚拟主机用于在同一个 Web 服务器上托管多个独立站点。

“过去”,一台机器在一个地址下托管一个网站。假设您的网络服务器托管网站“www.my-site.tld”。该网站的文件(html、css、javascript、图像、脚本等)存储在/var/www/。因此,在 Apache 配置中,DocumentRoot将被设置为该目录/var/www/

如果您现在将浏览器指向http://www.my-site.tld/welcome.html,它将显示文件/var/www/welcome.html。要构建您的网站,您可以使用子文件夹。因此,例如,如果您将浏览器指向http://www.my-site.tld/holidays/summer2001.html,它将显示文件/var/www/holidays/summer2001.html

到目前为止一切顺利。但是,如果您想在同一台机器、同一台主机上托管多个网站,该怎么办?多个网站位于不同的地址下,(如果您从“外部”的角度来看)它们彼此完全独立,而不仅仅是同一网站内的不同子目录?这就是虚拟主机发挥作用的地方。

在虚拟主机配置中,你可以设置许多指令,这些指令不是针对整个 Web 服务器全局设置的,而是每个网站。假设您在同一个网络服务器上托管两个网站“www.my-site.tld”和“www.my-other-site.tld”。为此,您可以使用两个虚拟主机配置,例如

<VirtualHost *:80>
  DocumentRoot /var/www/my-site/
  ServerName www.my-site.tld
  ServerAlias my-site.tld
  DirectoryIndex welcome.html
  CustomLog /var/log/apache2/my-site.access.log "combined"
  ErrorLog /var/log/apache2/my-site.error.log
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/my-other-site/
  ServerName www.my-other-site.tld
  ServerAlias my-other-site.tld
  DirectoryIndex index.html
  CustomLog /var/log/apache2/my-other-site.access.log "combined"
  ErrorLog /var/log/apache2/my-other.error.log
</VirtualHost>

您会看到,DocumentRoot在每个虚拟主机中,的定义都不同,对于也是一样ServerName,对于也是一样,ServerAlias等等。

我希望我能阐明虚拟主机的概念,以及为什么虚拟主机和同一主机内的子目录是两回事。为了使其更加复杂,您可以在虚拟主机内拥有子目录;)例如,http://www.my-other-website.tld/tournaments/finals2015.html具有上述配置的地址将指向/var/www/my-other-site/tournaments/finals2015.html

您可能还会遇到其他一些事情,但我无法在此详细介绍:

如果您使用地址、域名等,您需要确保每个人都知道在哪里可以找到它们。仅仅设置ServerName my-cool-site.com并不能让“互联网”知道将请求定向到哪里my-cool-site.com;)为此,您通常会通过购买 DNS(事实上,它大多更租房,因为你需要时不时地更新它)域名并设置一个 DNS 条目,效果是“如果有人在寻找my-cool-site.com,就把他们发送到某某服务器”。

例如,当您使用 IP 地址而不是域名时http://127.0.0.1/webstuff/how-dns-works.html,它不会改变上述原则。事实上,如果您的服务器已分配多个 IP,您可以在虚拟主机中区分它们。192.168.2.101 192.168.2.102仅适用于指向 192.168.2.101 <VirtualHost *:80>' means "apply this to requests for any ip, on port 80". If your server has192.168.2.102的请求。andassigned to it, you can differentiate between those ips in your virtual hosts., not for requests directed to

如果您想从运行 Web 服务器的同一台机器调用它,而不想直接使用 IP,通常只需说“在本地主机上显示我现在所在的同一主机上的网页”。为此,通常会localhost配置特殊主机名。因此,您可以输入类似 `http://localhost/thats-a-long-answer.html' 输入到浏览器的地址栏中。

通常,您有一个公共的“父目录”,所有虚拟主机DocumentRoot都位于该目录中。例如,您可以将所有虚拟主机作为 的子目录/var/www/。使用这种结构并不是绝对必要的,但事实证明,与将网站存储在各处相比,它可以帮助您跟踪事物 ;)

要包含虚拟主机外部的目录DocumentRoot,您可以使用Alias。例如,您在“www.my-site.tld”的虚拟主机配置中添加如下指令

Alias /sports /home/john/some-sports

在这种情况下,http://www.my-site.tld/sports/soccer.html将指向/home/john/some-sports/soccer.html

但这种情况很容易出现权限问题。 中的文件/home/john/some-sports通常归用户所有john,因此运行 Web 服务器软件 (Apache) 的用户可能无法访问它们。

所有这些内容可能有点难以一下子消化,但这些是成功运行网络服务器所需了解的一些基本概念。它并不像乍一看那么复杂。

相关内容