Назад | Перейти на главную страницу

Apache2 VirtualHost с таким же именем, как у машины

Я использую Debian, у меня есть сервер с каноническим именем (определено в /etc/hostname и в обратном DNS) server.example.com

корень @ сервер: ~ # uname -a
Linux server.example.com 3.16.0-4-amd64 # 1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU / Linux

Сервер Apache / 2.4.10 (Debian) на server.example.com порт 80

Теперь я установил apache2 и выполнил базовую настройку. Затем я добавил VirtualHosts в /etc/apache2/sites-available с символическими ссылками в sites-enabled. Все работает нормально кроме VirtualHost с участием ServerName server.example.com. Когда я пытаюсь получить доступ к этому URI в проводнике, я получаю содержимое виртуального хоста по умолчанию (без ServerName указано). Если я изменю server.example.com.confServerName на что-то другое (например, test.example.com) и перезагрузите конфигурацию apache, тогда я смогу без проблем добраться до URI. Я хотел бы знать, что не так с VirtualHost ServerName то же, что и каноническое имя машины.

Более того, server.example.com.conf имеет DocumentRoot /var/www/subs/server который содержит index.html и munin папка. VirtualHost по умолчанию имеет DocumentRoot /var/www/html который не имеет munin папка в нем. Однако, когда я пытаюсь получить доступ http://server.example.com/munin Я могу попасть в /var/www/subs/server/munin, пока http://server.example.com/index.html приносит мне /var/www/html/index.html.

Наконец, когда я поставил Redirect 404 / по умолчанию VirtualHost, я получу 404 когда я пытаюсь получить доступ к обоим http://server.example.com/ и http://server.example.com/munin

Добавлена ​​конфигурация VirtualHosts.

/etc/apache2/sites-available/forum.example.com.conf :

# Working subdomain configuration
<VirtualHost *:80>
        ServerName forum.example.com
        ServerAdmin zereges@example.com
        DocumentRoot /var/www/subs/forum
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

/etc/apache2/sites-available/server.example.com.conf :

# Not working server.example.com configuration
<VirtualHost *:80>
        ServerName server.example.com
        ServerAdmin zereges@example.com
        DocumentRoot /var/www/subs/server
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

/etc/apache2/sites-available/default.conf :

# Default VirtualHost configuration 
<VirtualHost *:80>
        ServerAdmin zereges@example.com
        DocumentRoot /var/www/html
        #Redirect 404 /
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

корень @ сервер: ~ # apache2ctl -t
Синтаксис ОК


Добавлен выход root@server:~# apache2 -S

[Tue Aug 11 11:07:32.705684 2015] [core:warn] [pid 20215] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Tue Aug 11 11:07:32.706119 2015] [core:warn] [pid 20215] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Tue Aug 11 11:07:32.706250 2015] [core:warn] [pid 20215] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Tue Aug 11 11:07:32.706406 2015] [core:warn] [pid 20215] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Tue Aug 11 11:07:32.706566 2015] [core:warn] [pid 20215] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
(... repeating few more times)
[Tue Aug 11 11:07:32.744292 2015] [core:warn] [pid 20215] AH00111: Config variable ${APACHE_LOG_DIR} is not defined

AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}

Пока,

/etc/apache2/apache2.conf:74:Mutex file:${APACHE_LOCK_DIR} default
/etc/apache2/envvars:21:export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX


После запуска /etc/apache2/envvar Я получаю это, выполняя apache2 -S

VirtualHost configuration:
*:80     is a NameVirtualHost
         default server server.example.com (/etc/apache2/sites-enabled/default.conf:1)
         port 80 namevhost server.example.com (/etc/apache2/sites-enabled/default.conf:1)
         port 80 namevhost download.example.com (/etc/apache2/sites-enabled/download.example.com.conf:1)
         port 80 namevhost example.com (/etc/apache2/sites-enabled/example.com.conf:1)
                 alias www.example.com
         port 80 namevhost forum.example.com (/etc/apache2/sites-enabled/forum.example.com.conf:1)
         port 80 namevhost forumold.example.com (/etc/apache2/sites-enabled/forumold.example.com.conf:1)
         port 80 namevhost forumtest.example.com (/etc/apache2/sites-enabled/forumtest.example.com.conf:1)
         port 80 namevhost mail.example.com (/etc/apache2/sites-enabled/mail.example.com.conf:1)
         port 80 namevhost ro.example.com (/etc/apache2/sites-enabled/ro.example.com.conf:1)
         port 80 namevhost server.example.com (/etc/apache2/sites-enabled/server.example.com.conf:1)
         port 80 namevhost anotherexample.com (/etc/apache2/sites-enabled/anotherexample.com.conf:1)
                 alias www.anotherexample.com
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

В дистрибутивах на основе Debian виртуальный хост по умолчанию не указывает имя сервера вообще, что фактически означает, что в качестве имени сервера используется имя хоста системы.

Поскольку он указан первым, он будет прикрывать любой более поздний vhost с тем же именем ServerName.

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

Из apache-doc: если ServerName не указан, сервер пытается определить имя хоста, выполняя обратный поиск по IP-адресу. Если в ServerName не указан порт, то сервер будет использовать порт из входящего запроса. Для оптимальной надежности и предсказуемости вы должны указать явное имя хоста и порт с помощью директивы ServerName.

+

По сути, главный сервер рассматривается как «настройки по умолчанию» или «база», на которой будет строиться каждый виртуальный хост. Но расположение этих определений основного сервера в файле конфигурации в значительной степени не имеет значения - вся конфигурация основного сервера была проанализирована, когда произошло это окончательное слияние. Таким образом, даже если определение основного сервера появляется после определения виртуального хоста, это может повлиять на определение виртуального хоста.