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

mor*_*ous 1 apache ubuntu symfony1

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

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

假设我有以下网站:

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

按照这里的文档,这里这里(没有一个对我有用),我做了以下事情:

答:我修改了我的/ etc/hosts文件,第一个条目为:

127.0.0.1 site1.localhost site2.localhost hpdtp-ubuntu910 localhost php.localhost

B.我修改了我的/etc/apache2/ports.conf文件(第一行),如下所示:

NameVirtualHost localhost:80收听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>
Run Code Online (Sandbox Code Playgroud)

D.我使用(它一直显示)禁用了默认的apache站点

E.由于我无法启用我启用的所有站点(如上面的文档链接),我已经决定一次启用一个站点,这样Apache就不会对运行哪个站点感到困惑.当我需要运行另一个站点时,我会禁用当前站点并启用我想要的站点.这(显然?)远非理想 - 但即使这种设置也不起作用 - 原因如下所示.

一世).当我重新启动Apache时,我收到以下警告:

  • 重新加载web服务器配置apache2 [2010年7月18日10:32:23] [warn] NameVirtualHost localhost:80没有VirtualHosts

ⅱ).当我导航到http://site1.localhost时, 我在FF中收到以下错误消息:

哎呀!此链接似乎已被破坏

III).我的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"
Run Code Online (Sandbox Code Playgroud)

我的问题是:

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

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

Pas*_*TIN 11

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

我通常做的是:

编辑hosts文件

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

例如,我会添加:

127.0.0.1       tests
127.0.0.1       blog
Run Code Online (Sandbox Code Playgroud)

等等,我希望每个域名都有一行.


将新的VirtualHost添加到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>
Run Code Online (Sandbox Code Playgroud)

这里有几点需要注意:

  • 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>
Run Code Online (Sandbox Code Playgroud)

它基本上完全一样; 只有两个区别:

  • ServerName指令对应于我的第二个域名 - 当然
  • 而且DocumentRoot不一样


其他文件 ?

我没有真正改变Apache的默认配置(我在Ubuntu,如果这很重要).

例如,我不更改ports.conf文件中的任何内容:我仍然有默认NameVirtualHostListen指令:

NameVirtualHost *:80
Listen 80
Run Code Online (Sandbox Code Playgroud)

我只做了一些重要的修改就是启用一些模块,比如重写,过期,......但这与你的VirtualHosts问题没什么关系;-)


结果?

如果我打开浏览器然后去http://tests/,我会从我的tests域中得到我想要的东西- 这里有目录和文件列表.

如果我打开浏览器然后去http://blog/,我会得到我博客的开发实例 - 好吧,还有错误页面,说我忘了设置数据库^^