摄影:
Arjun Kalra
Apache 的虚拟主机就是在一台服务器上运行多个网站,每个虚拟主机都可以绑定独立的域名,为这些域名可以指定单独的目录,访问这些域名的时候,Apache 会打开对应目录里面的东西。配置 Apache 的虚拟主机,只需要去修改 Apache 的配置文件。虚拟主机的英文是 virtual host,所以,你的 Apache 配置虚拟主机的文件可能是 httpd.conf ,也可能是跟 virtual host 这个名字相关的文件,比如 vhost.conf ,具体要使用哪一个配置文件,你需要自己去判断。
这个小练习我们在本地电脑上去模拟一下配置 Apache 虚拟主机的过程。
小练习 1 - 修改 hosts 文件
不管你用的是什么系统,windows, mac,电脑上都会有一个 hosts 文件,修改这个文件,可以改变主机名所对应的 ip 地址。比如你安装了 Web 开发环境(MAMP 或 WAMP),启动环境以后,访问
http://localhost 你就会打开环境的默认的目录,这个 localhost 就是在 hosts 文件里定义的,它所指向的 ip 地址是 127.0.0.1 ,这个 ip 地址表示本地的你正在使用的这台电脑,了解详细的内容,可以搜索一下 :)
修改这个 hosts 文件,我们可以手工的去指定任何主机名指向任何的 ip 地址,当然这个设置只影响你自己的电脑,比如我们可以随便造一个域名,比如 hello.com,让这个域名指向你的电脑,也就是 127.0.0.1 这个 ip 地址。这样你在浏览器中请求 hello.com ,打开的就是你在本地电脑上搭建的环境所指定的目录里的东西。为了测试 apache 的虚拟主机功能,你可以去虚拟几个这样的域名,这样在创建虚拟主机的时候,你可以让这些域名打开各自的目录。下面,我们先去修改这个 hosts 文件。
1. 找到 hosts 文件,windows 系统是在 Windows\System32\Drivers\etc 这个目录下,Mac 系统是在 /etc/hosts ,找到以后可以使用文本编辑软件打开它。
2. 在 hosts 文件里,新的一行上,先输入 ip 地址 127.0.0.1 ,然后空格,再输入一个主机名,这个主机名可以随便,比如 hello.com ,这样访问 hello.com 就会打开在你的电脑上的网站了。另起一行,再去定义一条,127.0.0.1 hola.com 。
3. 保存修改之后的 hosts 文件,然后启动在本地上的 Web 环境,打开浏览器,在地址栏上输入 hello.com ,还有 hola.com ,看看打开的是不是你在本地上的内容。现在,你看到的应该跟你使用
http://localhost 打开的是一样的东西。
小练习 2 - 配置 Apache 虚拟主机
现在,我们虚拟了两个域名,让它们指向了本地的电脑,访问它们,打开的是同一个目录里的内容,下面这个练习,我们通过修改 Apache 的配置文件,让访问不同域名的时候,打开的是不同的目录。你首先要判断一下配置 Apache 虚拟主机的配置文件,一般是在 httpd.conf 这个主配置文件里面,不过,很多环境都会单独把虚拟主机放在一个配置文件里面,然后在 httpd.conf 文件里指定一下,包含这个单独配置虚拟主机的文件。
1. 找到配置虚拟主机的配置文件,如果你用的是 WAMP 搭建的环境,先找到并打开 httpd.conf ,在这个文件里,搜索 # Virtual hosts ,它下面有一行代码, #Include conf/extra/httpd-vhosts.conf... 你可以去掉它前面的 # ,这样,Apache 启动以后,也会去加载这个httpd-vhosts.conf 配置文件,这样做的好处就是可以保持 Apache 相关设置的整洁。当然,你完全可以在主配置文件 httpd.conf 里面去设置虚拟主机。
2. 打开 httpd-vhosts.conf 这个文件,没有这个文件也可以去创建一个,或者直接在 httpd.conf 文件里面去配置虚拟主机。配置虚拟主机的东西应该像这样:
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/Applications/MAMP/Library/docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
3. 应该有两段这样的代码,每一段都是在配置一个虚拟主机,你可以复制其中的一段,然后粘贴到文件的最下面。再根据自己的需要去修改这段代码。理解它的意思,ServerAdmin 就是网站的管理员的邮箱,DocumentRoot 是虚拟主机的主目录,也就是访问这个虚拟主机所打开的那个目录,这个目录你可以自己去指定,要注意的是,你需要先去创建这个目录,然后再在这里去指定这个目录的位置。ServerName 是主机名,比如之前我们虚拟的那个主机名 hello.com,ServerAlias 是主机的别名,你可以指定一个其它的主机名,访问它的时候也会打开这个虚拟主机的目录里的东西。ErrorLog 是错误的日志,也就是发生错误的时候,会把错误记录到哪个文件里。CustomLog 是虚拟主机访问的日志。
这样自己新添加的虚拟主机看起来应该像这样:
<VirtualHost *:80>
ServerAdmin wahaha@hello.com
DocumentRoot "/Applications/MAMP/htdocs/hello
ServerName hello.com
ServerAlias www.hello.com
ErrorLog "logs/hello.com-error_log"
CustomLog "logs/hello.com-access_log" common
</VirtualHost>
4. 在浏览器里打开 hello.com ,访问的是这个虚拟主机的配置里 DocumentRoot 所指定的 /Applications/MAMP/htdocs/hello 这个目录里的东西,你可以在这个目录里面放点东西,比如一个 WordPress 或者 Drupal 的网站等等。
注:配置虚拟主机的时候,第一个虚拟主机是默认的,你需要留着,配置自己的虚拟主机,可以从第二个开始配置,也就是第二段
<VirtualHost>
代码。
相关视频
练习 运行环境
评论
谢谢分享!我按照你的步骤来做服务也重启了,可是仍然无效,在win下这样用过,用127.0.0.x来区分不同的独立项目。麻烦帮忙看看什么情况,我哪里做错了呢?
etc\hosts文件中增加
127.0.0.1 localhost
127.0.0.2 phpmyadmin
127.0.0.3 sqlitemanage
127.0.0.8 zhanba360
httpd.conf文件中增加如下
NameVirtualHost *
10 年 6 个月 以前
默认下,127.0.0.1 这个 ip 地址对应的主机名是 localhost,所以,你在安装了 web 运行环境以后,在浏览器可以通过 localhost 打开你的网站。编辑 hosts 文件,你可以自己去定义主机名,比如,你可以用自定义的主机名同样指向 127.0.0.1 这个 ip 。比如 127.0.0.1 ninghao.local,这样,你在浏览器上访问 ninghao.local 也会打开你在本地电脑上的网站。通过修改 apache 的 httpd.conf ,你可以为 ninghao.local 绑定它自己的目录。
10 年 6 个月 以前
皓哥,我想问下访问不到创建的主机名(hello.com)是什么原因,会不会跟练习四修改了apache的端口号为8080有关。
10 年 2 周 以前
访问不到有提示吗?你需要修改 hosts 文件才行,让 hello.com 指向你的电脑,也就是 127.0.0.1 。确认一下,你可以用 ping 命令,打开命令行工具,然后输入 ping hello.com ,看看能不能 ping 的通。如果返回来的内容,ip 地址是 127.0.0.1,就说明是可以的。
10 年 2 周 以前
修改了,是可以的。
10 年 2 周 以前
那应该在浏览器里,打开 http://hello.com ,访问的就是你在本地搭建的 Web 服务器。
10 年 2 周 以前
那我在配置虚拟主机的时候要不要配置IP地址呢?
10 年 2 天 以前
在配置虚拟主机的时候不需要 。用 * 号表示所有的 ip 地址。
10 年 2 天 以前
在vagrant搭建web服务器的时候有个访问用的IP地址,这个不处理的话不会有影响的吗?
10 年 2 天 以前
哦,你现在应该只需要修改文档的根目录就可以了。你可以先不用动这个虚拟主机,先去修改一下 DocumentRoot ,文档的根目录。改成 /vagrant/www ,这样你在 www 这个目录下面的 index.html 就可以在浏览器中访问到了。我建议你用 nginx 这款 web 服务器。
10 年 2 天 以前
esc 退出编辑模式,输入 : 号 ,wq ,保存并退出 ,这句执行不了。
10 年 2 天 以前