Vagrant出现问题 - "404 - Not Found"

7
我正在尝试使用Vagrant制作一个LAMP盒子。有人告诉我它很容易使用。我对网络和虚拟机完全不熟悉,对Linux/Ubuntu也缺乏经验。目前,我已经尝试按照官方文档页面上的教程进行操作:http://docs.vagrantup.com/v2/getting-started/networking.html
我已经到达了文档中的网络部分,但好像无法让它工作起来。
现在问题是,由于我对网络和基于Linux的操作系统缺乏经验,我不知道从哪里开始排除故障。我会尽量提供尽可能多的信息。
我正在运行最新版本的Vagrant和Virtualbox,以及Windows 8.1。
根据教程,我的当前Vagrantfile是这样的:
Vagrant.configure(2) do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network :forwarded_port, host: 4567, guest: 80
end

我的bootstrap.sh文件如下:

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -f /vagrant /var/www
fi

当我访问http://127.0.0.1:4567时,出现错误页面并显示以下信息:

Not Found

The requested URL / was not found on this server.
===================================================
Apache/2.2.22 (Ubuntu) Server at 127.0.0.1 Port 4567

除非有解释,否则我不想编辑任何配置文件,因为我觉得那将是一个变通方法。但无论如何,任何帮助都将不胜感激。如果我需要打开一个端口,那么该怎么办?我现在已经考虑使用XAMPP了。

5个回答

13

我遇到了同样的问题。我尝试从Vagrant盒子重启Apache,但终端显示出以下警告。

vagrant@vagrant-ubuntu-trusty-64:~$ sudo service apache2 restart
 * Restarting web server apache2   

AH00112: Warning: DocumentRoot [/var/www/html] does not exist
AH00558: apache2: Could not reliably determine the server's fully qualified 
domain name, using 10.0.2.15. Set the 'ServerName' directive globally to suppress this message
创建一个 DocumentRoot 目录来解决404错误,方法是创建一个名为 /var/www/html 的目录。

1
简而言之:创建html文件夹。 - Ruben
谢谢Ruben。是的,我忘记创建html文件夹了,创建之后,一切都好了! - dalei19

9
问题出在/etc/apache2/sites-enabled的000-default文件。
Apache2将其指向var/www/html,而vagrant例子则指向var/www,只需删除/ html并执行sudo service apache2 restart即可。

1

bootstrap.sh中存在两个问题:

  1. 您需要启动网络服务。您也可以通过vagrant ssh手动启动。
  2. 您需要创建软链接,而不是硬链接。

因此,脚本将更新为:

$ cat bootstrap.sh
#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -s /vagrant /var/www
fi

service apache2 start

似乎那个不起作用了。但是软链接和硬链接是什么? - Dimi
如果您不知道软链接和硬链接是什么,请阅读此链接:http://askubuntu.com/questions/108771/what-is-the-difference-between-a-hard-link-and-a-symbolic-link - BMW
修复确实有效,但在得出结论之前,您需要审查您的环境。 - BMW
你有任何提示或线索吗? - Dimi
请继续自己寻找答案。实际上,我不确定你在评论中说的是什么。 - BMW
显示剩余2条评论

1

您能从虚拟机内部访问您的Web服务器吗?

例如,尝试使用curl localhost:80

如果未安装curl,请在Ubuntu上使用sudo apt-get install curl并重试。

此外,您是否检查了您的Apache虚拟主机? 在/etc/apache2/sites-available中是否有一个000-default文件?


我在主机内部实际上得到了完全相同的未找到消息。没有000-default文件,但有另外两个默认文件。 - Dimi
你能粘贴一下 ls -ls /etc/apache2/sites-enabled 的结果吗? - jiop
现在它确实正常工作了。感谢您的帮助。出于好奇,如果它没有出现,您会做出什么样的假设? - Dimi
我在想你的虚拟主机文件可能存在问题。 编码愉快! - jiop

0

我尝试了两种可行的解决方案:

第一种是更改文件/etc/apache2/sites-enabled/000-default.conf,将DocumentRoot/var/www/html修改为/var/www

第二种是更改Vagrant文件bootstrap.sh,具体方法如下:

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www/html ]; then
  rm -rf /var/www/html
  ln -fs /vagrant /var/www/html
fi

此外,由于某种原因,我不得不在Vagrantfile中更改端口转发的配置,添加了host_ip键,如下所示:

Vagrant.configure(2) do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network :forwarded_port, host: 4567, guest: 80, host_ip: "127.0.0.1"
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接