我很快得出的结论是,这是不可行的,尽管出于某种原因,人们 - 很可能没有实施他们给出的'建议',似乎认为这是可能的。
情景非常简单。我正在我的本地开发机器上开发symfony网站,运行Ubuntu 10.0.4 LTS。我希望能够在本地运行和测试多个站点。
假设我有以下网站:
根据文档here,here和here(这些都不适用于我),我已完成以下操作:
A。我修改了我的/ etc / hosts文件,第一个条目为:
127.0.0.1 site1.localhost site2.localhost hpdtp-ubuntu910 localhost php.localhost
B。我修改了我的/etc/apache2/ports.conf文件(第一行),如下所示:
NameVirtualHost localhost:80 Listen 80
C。我为每个网站(site1.localhost和site2.localhost)创建了配置网站。每个配置都是/ etc / apache2 / sites-available
中的单独文件/ etc / apache2 / sites-available / site1中的一个这样的配置文件(对于site1.localhost)如下所示:
<VirtualHost localhost:80>
ServerName site1.localhost
DocumentRoot "/home/morpheous/work/webdev/frameworks/symfony/sites/site1/web"
DirectoryIndex index.php
<Directory "/home/morpheous/work/webdev/frameworks/symfony/sites/site1/web">
AllowOverride All
Allow from All
</Directory>
Alias /sf /lib/vendor/symfony/symfony-1.3.6/data/web/sf
<Directory "/lib/vendor/symfony/symfony-1.3.6/data/web/sf">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
D。我已经使用(它一直显示)禁用了默认的apache网站
E。由于我无法启用我启用的所有网站(例如上面的文档链接) 我已经决定一次启用一个站点,这样Apache就不会对运行哪个站点感到困惑。当我需要运行另一个站点时,我会禁用当前站点并启用我想要的站点。这(显然?)远非理想 - 但即使这种设置也不起作用 - 原因如下所示。
i)中。当我重新启动Apache时,我收到以下警告:
- 重新加载Web服务器配置apache2 [Sun Jul 18 10:32:23 2010] [warn] NameVirtualHost localhost:80没有 VirtualHosts
ⅱ)。当我导航到http://site1.localhost时 我在FF中收到以下错误消息:
糟糕!此链接似乎已损坏
ⅲ)。我的apache相关错误出现在/var/log/apachche2/other_vosts.log
中morpheous@hpdtp-ubuntu910:~$ tail /var/log/apache2/other_vhosts_access.log
site1.localhost:80 127.0.0.1 - - [18/Jul/2010:10:08:38 +0100] "GET / HTTP/1.1" 404 506 "-" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6 GTB7.1"
site1.localhost:80 127.0.0.1 - - [18/Jul/2010:10:09:30 +0100] "GET / HTTP/1.1" 404 506 "-" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6 GTB7.1"
site1.localhost:80 127.0.0.1 - - [18/Jul/2010:10:09:31 +0100] "GET /favicon.ico HTTP/1.1" 404 505 "-" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6 GTB7.1"
site1.localhost:80 127.0.0.1 - - [18/Jul/2010:10:09:36 +0100] "GET /favicon.ico HTTP/1.1" 404 505 "-" "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6 GTB7.1"
我的问题是:
可以设置Apache来处理localhost上的多个虚拟主机吗?毕竟,到目前为止我看到的所有示例都涉及将Apache设置为面向公众的IP地址
如果Apache确实可以处理localhost上的多个站点,上面的哪个步骤我做错了? AFAICT,我已经按照文件写了这封信。
答案 0 :(得分:11)
是的,您可以在本地计算机上安装多个VirtualHost - 它与在远程服务器上工作时完全相同,但IP地址和域名不同。
我通常做的是:
从我的本地计算机添加我想要提供的新域名。
例如,我会添加:
127.0.0.1 tests
127.0.0.1 blog
依此类推,我希望每个域名都有一行。
然后,我将新的VirtualHosts添加到Apache的配置中。
例如,对于我的tests
域名,我会使用:
<VirtualHost *:80>
ServerName tests
DocumentRoot /home/squale/developpement/tests
<Directory /home/squale/developpement/tests>
AllowOverride All
Options Indexes FollowSymLinks MultiViews
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
这里需要注意几点:
VirtualHost
位于*:80
ServerName
指令
当然,由您来确保Apache可以看到这个VirtualHost - 通过将其配置放在加载的文件中(不推荐),或者通过:
/etc/apache2/sites-available/
a2ensite
启用该网站
/etc/apache2/sites-enabled/
中创建一个符号链接,指向您的新配置文件。
此处我将用于第二个域名的配置与blog
对应:
<VirtualHost *:80>
ServerName blog
DocumentRoot /home/squale/developpement/blog.pascal-martin.fr/www
<Directory /home/squale/developpement/blog.pascal-martin.fr/www>
AllowOverride All
Options Indexes FollowSymLinks MultiViews
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
基本上完全一样;只有两个不同之处:
ServerName
指令对应于我的第二个域名 - 当然是DocumentRoot
不一样
我没有真正改变Apache的默认配置(我在Ubuntu,如果这很重要)。
例如,我不会更改ports.conf
文件中的任何内容:我仍然使用默认的NameVirtualHost
和Listen
指令:
NameVirtualHost *:80
Listen 80
我所做的唯一重要修改是启用某些模块,例如重写,过期,......但这与您的VirtualHosts问题没有太大关系; - )
如果我打开浏览器并转到http://tests/
,我会在tests
域中获得我期望的内容 - 此处列出目录和文件。
如果我打开浏览器并转到http://blog/
,我会得到我的博客的开发实例 - 好吧和错误页面,说我忘了设置数据库^^
答案 1 :(得分:0)
您是否创建了从 / etc / apache2 / sites-available / site1 到 / etc / apache2 / sites-enabled / site1 的链接?
我使用的是nginx而不是apache,但ubuntu具有标准化的配置方式。通常,站点可用包括apache未包含的所有配置。它仅查找在启用站点的目录中链接的配置。
我也认为您不需要一次启用一个站点。一切都应该有效。所有域名都不同。