Как настроить виртуальные хосты «на основе имени» с помощью Ubuntu 12.04?
Я следовал инструкциям, приведенным на https://help.ubuntu.com/12.04/serverguide/httpd.html. # http-configuration .
Я сделал следующее ...
cp default newsite
После некоторых исследований я нашел запись в блоге, в которой говорилось, что мне нужно отключить сайт по умолчанию с помощью a2dissite default
. После того, как я это сделал, это сработало. Это верно? Это никогда не упоминается в руководстве по серверу Ubuntu. Руководство также включает эту строку ...
«В виртуальном хосте по умолчанию не указана директива ServerName, поэтому он будет отвечать на все запросы, которые не соответствуют директиве ServerName в другом виртуальном хосте». [ 1114] blockquote>
Из этого следует, что сайт по умолчанию и другие могут сосуществовать.
Я запускаю свежую установку Сервера 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
Это больше вопрос конфигурации Apache, чем вопрос Ubuntu.
Да, вы можете запускать несколько виртуальных серверов на одном хосте, каждый из которых обслуживает отдельный контент, при условии, что все они отображаются (например, через DNS) на один и тот же сервер.
Официальную документацию по созданию виртуальных серверов (версия 2.2, но эта функция принципиально не изменилась между версиями) можно найти здесь:
httpd.apache.org/docs /2.2/vhosts/
blockquote>Краткий ответ: вам необходимо:
- определить ваши виртуальные хосты
- включить некоторое отображение между вашими имена хостов и обслуживаемый ими контент
Это делается путем добавления предложения виртуального хоста в некоторый файл конфигурации 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.
Используя 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
Хорошо я имел эту проблему и сделал то, что другие предложенные ответы, мой случай - то, что я хочу выполнить несколько проектов на своей среде разработки и доступе каждый из них 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>
Просто, чтобы добавить к сообщению Дэвида, хотя я не использую 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.
Я не знаю, почему это часто скрывается, но важное ключевое слово в файле конфигурации вашего сайта - «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>
. @Corey
Похоже, у вас есть дескриптор файлов конфигурации Apache. И вы знаете, где искать документацию. Если я правильно понимаю, вы не уверены в использовании утилиты a2ensite. Согласно справочным страницам a2ensite:
a2ensite - это скрипт, который включает указанный сайт (который содержит блок) в конфигурации apache2. Это делается путем создания символических ссылок внутри / и т.д. / apache2 / сайты с поддержкой. Аналогично, a2dis- site отключает сайт, удаляя эти символические ссылки. Не является ошибкой включить сайт, который уже включен, или отключить сайт, который уже отключен
blockquote>.
Любую помощь, которая может вам понадобиться, можно найти на веб-сайте Apache . Это очень краткая и сухая документация, но она стоит вашего времени, чтобы ознакомиться с ней