Symfony - виртуальные серверы на основе имен на локальном хосте - возможно ли это? - PullRequest
1 голос
/ 18 июля 2010

Я быстро прихожу к выводу, что это невозможно, хотя по какой-то причине люди - скорее всего, которые не выполнили «совет», который они дают, похоже, думают, что это возможно.

Сценарий довольно прост. Я занимаюсь разработкой веб-сайтов Symfony на своем локальном компьютере, работающем под управлением Ubuntu 10.0.4 LTS. Я хочу иметь возможность запускать и тестировать несколько сайтов локально.

Предположим, у меня есть следующие сайты:

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

Следуя документации здесь , здесь и здесь (ни одна из которых не работает для меня), я сделал следующее:

A. Я изменил свой файл / 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

Один такой файл конфигурации (для site1.localhost) в / etc / apache2 / sites-available / site1 выглядит следующим образом:

<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 не запутался в том, какой сайт запускать. Когда мне нужно запустить другой сайт, я отключаю текущий и включаю тот, который хочу. Это (очевидно?) Далеко от идеала - но даже эта настройка не работает - по причинам, перечисленным ниже.

я). Когда я перезагружаю Apache, я получаю следующее предупреждение:

  • Перезагрузка конфигурации веб-сервера apache2 [Вс 18 июля 10:32:23 2010] [предупредить] NameVirtualHost localhost: 80 не имеет VirtualHosts

б). когда я перехожу на http://site1.localhost Я получаю следующее сообщение об ошибке в FF:

Oops! Эта ссылка не работает

Ш). Мои ошибки, связанные с 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 для обработки нескольких виртуальных хостов на локальном хосте? В конце концов, все примеры, которые я видел до сих пор, включают настройку Apache с публичными IP-адресами

  2. Если Apache действительно может обрабатывать несколько сайтов на локальном хосте, что из перечисленных выше шагов я делаю неправильно ?. AFAICT, я следовал за документацией к письму.

Ответы [ 2 ]

11 голосов
/ 18 июля 2010

Да, у вас может быть несколько VirtualHosts на локальном компьютере - это точно так же, как при работе на удаленном сервере, за исключением того, что IP-адрес и доменное имя не совпадают.

Что я обычно делаю:

Редактировать файл hosts

Чтобы добавить новые доменные имена, которые я хочу обслуживать с моего локального компьютера.

Например, я бы добавил:

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


Конечно, до вас, чтобы убедиться, что этот VirtualHost виден Apache - либо поместив его конфигурацию в загруженный файл (не рекомендуется), либо:

  • Размещение этой конфигурации в новом файле в /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/, я получу экземпляр разработки моего блога - ну и страницу с ошибкой, сообщающую, что я забыл настроить базу данных ^^

0 голосов
/ 18 июля 2010

Вы создали ссылку из / etc / apache2 / sites-available / site1 на / etc / apache2 / sites-enabled / site1 ?

Я использую nginx вместо apache, но в Ubuntu есть стандартизированный способ настройки. Обычно доступные сайты включают в себя все ваши конфигурации, которые не включены Apache. Он только ищет конфигурации, связанные в каталоге с поддержкой сайтов.

Я также не думаю, что вам нужно включать один сайт за раз. Все должно работать. У всех разные доменные имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...