Symfony - localhost上基于名称的虚拟服务器 - 这可能吗?

时间:2010-07-18 09:43:39

标签: apache ubuntu symfony1

我很快得出的结论是,这是不可行的,尽管出于某种原因,人们 - 很可能没有实施他们给出的'建议',似乎认为这是可能的。

情景非常简单。我正在我的本地开发机器上开发symfony网站,运行Ubuntu 10.0.4 LTS。我希望能够在本地运行和测试多个站点。

假设我有以下网站:

  • site1.localhost
  • site2.localhost
  • site3.localhost

根据文档hereherehere(这些都不适用于我),我已完成以下操作:

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"

我的问题是:

  1. 可以设置Apache来处理localhost上的多个虚拟主机吗?毕竟,到目前为止我看到的所有示例都涉及将Apache设置为面向公众的IP地址

  2. 如果Apache确实可以处理localhost上的多个站点,上面的哪个步骤我做错了? AFAICT,我已经按照文件写了这封信。

2 个答案:

答案 0 :(得分:11)

是的,您可以在本地计算机上安装多个VirtualHost - 它与在远程服务器上工作时完全相同,但IP地址和域名不同。

我通常做的是:

编辑主机文件

从我的本地计算机添加我想要提供的新域名。

例如,我会添加:

127.0.0.1       tests
127.0.0.1       blog

依此类推,我希望每个域名都有一行。


将新的VirtualHosts添加到Apache的配置

然后,我将新的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文件中的任何内容:我仍然使用默认的NameVirtualHostListen指令:

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未包含的所有配置。它仅查找在启用站点的目录中链接的配置。

我也认为您不需要一次启用一个站点。一切都应该有效。所有域名都不同。