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

7

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

Я выполнил инструкции, приведенные в Ссылка .

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

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

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

  

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

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

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

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

/ etc / apache2 / sites-available $ cat default

<VirtualHost *:80>
        ServerAdmin [email protected]

        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-enabled # ls -l

[email protected]:/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
    
задан Corey 08.03.2013 в 00:01
источник

6 ответов

5

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

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

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

  

Ссылка

Короткий ответ: вам нужно:

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

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

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 становится ясно, что все, что она делает, это удаление символической ссылки с / etc / apache2 / sites-enabled / .  Ключ должен понять, что order , в котором эти конфигурации обрабатываются, может повлиять на конечный результат. Сайт по умолчанию называется 000-default для загрузки. Если он соответствует всем сайтам, т. Е. Действует как подстановочный символ «ничего другого», вы не увидите других. Попробуйте переименовать ссылку, чтобы иметь более высокое число, например 999 по умолчанию , поэтому оно загружается последним (после согласования других сайтов).

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

РЕДАКТИРОВАТЬ 3: Порядок появления имен серверов, его важность и многое другое документируется на странице этой страницы apache в раздел Основанный на имени 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.
    
ответ дан arielf 10.03.2013 в 22:33
2

Используя 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 
     

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

, что означает

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

, если запрос приходит на что-то. что-то на ваш сервер, и он читает файлы vhosts в алфавитном порядке в     / И т.д. / apache2 / сайты с поддержкой /

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

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

<virtualhost *:80>

    ServerAdmin [email protected]
    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 и т. д. вам не нужны другие строки в тегах, если они вам не нужны в вашей настройке, возможно, вы можете взглянуть на эту ссылку Ссылка     

ответ дан Registered User 15.03.2013 в 10:48
1

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

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>
    
ответ дан David 18.03.2013 в 01:19
1

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

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

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

Имя_сервера www.domain.com

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

Имя_сервера domain.com ServerAlias ​​www.domain.com

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

    
ответ дан deandownsouth 16.08.2014 в 01:49
0

@Corey

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

  

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

.

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

    
ответ дан noel 12.03.2013 в 04:39
0

Ну, у меня была эта проблема, и я сделал другие ответы, Мое дело в том, что я хочу запустить несколько проектов в своей среде разработки и получить доступ к каждому из них с помощью *.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>
    
ответ дан azerafati 08.12.2016 в 10:10