Как настроить виртуальные хосты, основанные на имени, с помощью Ubuntu 12.04?

Как настроить виртуальные хосты «на основе имени» с помощью Ubuntu 12.04?

Я следовал инструкциям, приведенным на https://help.ubuntu.com/12.04/serverguide/httpd.html. # http-configuration .

Я сделал следующее ...

  1. cp default newsite
  2. заменить «/ var / www» на «/ var / www / newsite» в newsite
  3. добавить «ServerName newsite.example.com» в newsite

После некоторых исследований я нашел запись в блоге, в которой говорилось, что мне нужно отключить сайт по умолчанию с помощью a2dissite default. После того, как я это сделал, это сработало. Это верно? Это никогда не упоминается в руководстве по серверу Ubuntu. Руководство также включает эту строку ...

«В виртуальном хосте по умолчанию не указана директива ServerName, поэтому он будет отвечать на все запросы, которые не соответствуют директиве ServerName в другом виртуальном хосте». [ 1114]

Из этого следует, что сайт по умолчанию и другие могут сосуществовать.

Я запускаю свежую установку Сервера 12.04 и перезагружаю конфигурацию apache каждый раз, когда я делаю настройку.

В итоге ... после добавления нового файла в / etc / apache2 / sites-available (измененная копия файла «default» с добавленной директивой ServerName) и соответствующей символической ссылки в / etc / apache2 / sites-enabled, необходимо ли отключать или переименовывать символическую ссылку сайта по умолчанию, чтобы новый сайт функционировал? Документация и один ответ, приведенный ниже, показывают, что в этом нет необходимости, но если это так, что я сделал не так? Используя приведенный ниже конфиг, при попытке доступа к newsite.example.com я получаю сайт по умолчанию.

/ etc / apache2 / sites-available $ cat default

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

/ etc / apache2 / sites-available $ cat newsite

<VirtualHost *:80>

        DocumentRoot /var/www/newsite
        ServerName newsite.example.com
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/newsite/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

/ etc / apache2 / sites- включен # ls -l

root@sandbox:/etc/apache2/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 26 Mar 18 09:56 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root 26 Mar  7 13:36 newsite -> ../sites-available/newsite
7
задан 18 March 2013 в 18:00

6 ответов

Это больше вопрос конфигурации Apache, чем вопрос Ubuntu.

Да, вы можете запускать несколько виртуальных серверов на одном хосте, каждый из которых обслуживает отдельный контент, при условии, что все они отображаются (например, через DNS) на один и тот же сервер.

Официальную документацию по созданию виртуальных серверов (версия 2.2, но эта функция принципиально не изменилась между версиями) можно найти здесь:

httpd.apache.org/docs /2.2/vhosts/

Краткий ответ: вам необходимо:

  • определить ваши виртуальные хосты
  • включить некоторое отображение между вашими имена хостов и обслуживаемый ими контент

Это делается путем добавления предложения виртуального хоста в некоторый файл конфигурации apache, например в / etc / apache2 / sites-available / 000-add-my-virtual-hosts (имя, специально разработанное для того, чтобы предшествовать имени по умолчанию 000 в алфавитном порядке)

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName hostname1.mydomain.com
    DocumentRoot /home/www/hostname1
</VirtualHost>

<VirtualHost *:80>
    ServerName hostname2.mydomain.com
    DocumentRoot /home/www/hostname2
</VirtualHost>

Примечание что вам может также необходимо добавить ссылки из / etc / apache2 / sites-enabled / в / etc / apache2 / sites-available , если вам нужен сайт уже во втором, но не в первом.

РЕДАКТИРОВАТЬ 1:
После прочтения страницы руководства для a2dissite становится ясно, что все, что он делает, - это удаление символической ссылки из / и т.д. / apache2 / сайты с поддержкой / . Ключ должен понять, что порядок , в котором обрабатываются эти конфиги, может влиять на конечный результат. Сайт по умолчанию называется 000-default для первой загрузки. Если он соответствует всем сайтам, то есть действует как подстановочный знак «что-нибудь еще», остальные вы не увидите. Попробуйте переименовать ссылку, чтобы иметь более высокое число, например 999-default , чтобы она загружалась последней (после совпадения других сайтов).

РЕДАКТИРОВАТЬ 2: К вашему обновленному вопросу: да, необходимо переименовать или удалить сайт по умолчанию, поскольку имя его файла конфигурации начинается с '000', заставляя его загружаться первым и «захват» из-за сопоставления подстановочных знаков. Я полагаю, что документация может быть улучшена по этому вопросу.

РЕДАКТИРОВАТЬ 3: Порядок, в котором появляются имена серверов, их важность и многое другое, документировано на этой странице apache в разделе Name- на основе vhost В одном из соответствующих предложений говорится:

The first vhost on this list (the first vhost in the config file with the
specified IP address) has the highest priority and catches any request to
an unknown server name or a request without a Host: header field.

и позже в Наблюдения :

... the ordering of name-based vhosts for a specific address set is significant.
The one name-based vhosts that comes first in the configuration file has the
highest priority for its corresponding address set.
0
ответ дан 18 March 2013 в 18:00

Используя Ubuntu для хостинга Apache vhost определение в случае Debian основывало системы, на которых сделано определение веб-сайтов

/etc/apache2/sites-enabled/*.conf

где *conf соответствует

internal1.conf internal2.conf internal3.conf internal4.conf

vhost определение каждого из этих сайтов будет следующие

/etc/apache2/sites-enabled/internal1.example.conf

когда Вы говорите

The default virtual host has no ServerName directive specified, so it will 

ответьте на все запросы, которые не соответствуют директиве ServerName в другом виртуальном хосте.

это означает

То, когда апачские веб-сайты подач от многих vhost, это читает имена файлов в алфавитном порядке, который является причиной файл по умолчанию, который Вы упомянули, имели число, с 000 значениями по умолчанию настолько называющий из хостов, на самом деле важно.

если запрос прибывает для something.something в Ваш сервер, и он читает vhosts файлы в алфавитном порядке в/etc/apache2/sites-enabled/

и это не делает находит необходимый конфигурационный файл в поддерживающем сайты каталоге
это (apache2) будет служить в алфавитном порядке первому vhost файлу, таким образом, хороший совет должен будет всегда использовать файл с 000 значениями по умолчанию по умолчанию или пробел или указать на некоторую ошибочную страницу, как Вы хотите

Теперь у Вас может быть конфигурация следующим образом для internal1.example.com

<virtualhost *:80>

    ServerAdmin webmaster@yoursite
    DocumentRoot /var/www/yoursite <--this is an important place should be there
    ServerName yourservername
    ServerAlias www.mydomain.com  <-- if you do not need this do not put it
    ErrorLog /var/logs/apache2/yoursite/error_log  <--logs can be customized 
    CustomLog /var/logs/apache2/yoursite/access_log common
</VirtualHost>

как вышеупомянутый пример можно сделать internal2.example.conf, internal3.example.conf и так далее Вам не нужны другие строки в тегах, если Вам не нужны они в Вашей установке, можете быть Вы, может взглянуть на эту ссылку http://www.debian-administration.org/articles/18

2
ответ дан 18 March 2013 в 18:00

Хорошо я имел эту проблему и сделал то, что другие предложенные ответы, мой случай - то, что я хочу выполнить несколько проектов на своей среде разработки и доступе каждый из них a *.dev как объяснено здесь

Для дополнения ответов выше проблема для меня была этим foo.dev вмешивался в bar.dev и добавление следующей части решило его

<VirtualHost foo.dev:80> #<---- you can filter the requests here
ServerName foo.dev
ServerAlias *.foo.dev
DocumentRoot /home/dev/foo
</VirtualHost>
0
ответ дан 18 March 2013 в 18:00

Просто, чтобы добавить к сообщению Дэвида, хотя я не использую Ubuntu, я использую Apache, и я заметил, что могу попасть на сайт, используя полный www.domain.com, но когда я использовал его без www, это просто используйте первый определенный сайт (который используется по умолчанию). Обратите внимание, что DNS был задан правильно в том, что www имеет значение @ (имя хоста), так что это было правильно.

Таким образом, добавление директивы ServerAlias ​​решило проблему. Я все еще изучаю документацию, поэтому, возможно, есть и другие способы ее решения.

Мой файл конфигурации был (частично):

ServerName www.domain.com

Когда я изменил его на (добавив строку ServerAlias):

Домен ServerName .com ServerAlias ​​www.domain.com

, который решил проблему. Я планирую протестировать параметры конфигурации Дэвида и использовать только * .domain.com, чтобы работали такие файлы, как ftp.domain.com или smtp.domain.com.

0
ответ дан 18 March 2013 в 18:00

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

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
.
0
ответ дан 18 March 2013 в 18:00

@Corey

Похоже, у вас есть дескриптор файлов конфигурации Apache. И вы знаете, где искать документацию. Если я правильно понимаю, вы не уверены в использовании утилиты a2ensite. Согласно справочным страницам a2ensite:

a2ensite - это скрипт, который включает указанный сайт (который содержит блок) в конфигурации apache2. Это делается путем создания символических ссылок внутри / и т.д. / apache2 / сайты с поддержкой. Аналогично, a2dis- site отключает сайт, удаляя эти символические ссылки. Не является ошибкой включить сайт, который уже включен, или отключить сайт, который уже отключен

.

Любую помощь, которая может вам понадобиться, можно найти на веб-сайте Apache . Это очень краткая и сухая документация, но она стоит вашего времени, чтобы ознакомиться с ней

0
ответ дан 18 March 2013 в 18:00

Другие вопросы по тегам:

Похожие вопросы: