![Apache2 - 虚拟主机 - 错误 404 未找到](https://linux22.com/image/980822/Apache2%20-%20%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%20-%20%E9%94%99%E8%AF%AF%20404%20%E6%9C%AA%E6%89%BE%E5%88%B0.png)
刚刚在开发机上安装了 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 has
192.168.2.102的请求。and
assigned 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) 的用户可能无法访问它们。
所有这些内容可能有点难以一下子消化,但这些是成功运行网络服务器所需了解的一些基本概念。它并不像乍一看那么复杂。