Я пытаюсь добавить второй виртуальный хост в свою конфигурацию apache, но не могу использовать новый виртуальный хост.
Мой httpd.conf
просто содержит следующую строку:
ServerName radiofreebrighton.org.uk
У меня также есть ports.conf
файл, который содержит следующее:
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
У меня есть два файла в sites-available
которые были связаны с sites-enabled
по a2ensite
:
Содержание первого:
<VirtualHost _default_:80>
DocumentRoot /home/tom/www
ServerAdmin tom@radiofreebrighton.org.uk
ServerName radiofreebrighton.org.uk
ServerAlias www.radiofreebrighton.org.uk
<Directory /home/tom/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel error
CustomLog /var/log/apache2/access.log combined
Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>
Содержимое последнего:
<VirtualHost *:80>
DocumentRoot /home/tom/tata-www
ServerAdmin admin@trafalgararches.co.uk
ServerName trafalgararches.co.uk
ServerAlias www.trafalgararches.co.uk
<Directory /home/tom/tata-www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
logLevel error
ErrorLog /var/log/apache2/error.log
</VirtualHost>
Но каждый раз, когда я запрашиваю страницу с trafalgararches.co.uk, мне предоставляется страница с radiofreebrighton.org.uk. Почему это могло происходить? Как я могу это исправить?
Редактировать:
Конфигурация виртуального хоста в понимании apache:
tom@rfb:/usr/local$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
port 80 namevhost radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
port 80 namevhost trafalgararches.co.uk (/etc/apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK
(Получено через apache2ctl -S
он же httpd -S
.)
Это может быть очевидно, но не забудьте перезапустить службу apache после включения дополнительного виртуального хоста.
После выполнения a2ensite
для второго виртуального хоста вывод apache2ctl -S
означает, что оба сайта настроены (и один из них используется по умолчанию), но он не будет работать, пока вы не перезагрузите apache.
Допустим, у вас есть два виртуальных хоста - site1 и site2. Ты бежишь a2ensite site1
а затем перезагрузите службу apache. Теперь вы можете получить доступ http://site1
и это значение по умолчанию. Теперь ты бежишь a2ensite site2
, но забудьте перезапустить apache. Выход apache2ctl -S
будет:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server site1 (/etc/apache2/sites-enabled/site1:1)
port 80 namevhost site1 (/etc/apache2/sites-enabled/site1:1)
port 80 namevhost site2 (/etc/apache2/sites-enabled/site2:1)
Syntax OK
Но когда вы пытаетесь загрузить http://site2
, он фактически загрузит сайт по умолчанию (site1), поскольку конфигурация не загружена.
У меня была аналогичная проблема, когда все мои дополнительные хосты на порту 443 (SSL / HTTPS) были направлены в каталог первого указанного хоста. Apache по существу игнорировал свойство servername и соответствовал только ip: port.
Оказывается, мне не хватало команды NameVirtualHost *: 443, чтобы включить именованный виртуальный хостинг для порта 443.
'NameVirtualHost *: 443' просто нужно вызвать один раз, и он должен быть определен над вашими vhosts для порта 443. Я поместил свое определение в файл ports.config, чтобы оно выглядело так:
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
NameVirtualHost *:443
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
NameVirtualHost *:443
Listen 443
</IfModule>
Не забывайте перезапускать apache после любых изменений.
Мои 2 цента: так как я должен придерживаться IP-адреса (я не хочу, чтобы сайт обслуживался во всех установленных сетях), случилось так, что после изменения локального частного IP-адреса сервера я забыл изменить его здесь:
NameVirtualHost 192.168.100.20:80
<VirtualHost 192.168.100.20:80>
Конечно, это не проблема Apache, чтобы вы знали, что IP не существует локально.
Том, пожалуйста, посмотри сюда http://httpd.apache.org/docs/2.0/en/mod/core.html#namevirtualhost
Заметка
Обратите внимание, что «главный сервер» и любой дефолт серверы будут никогда быть служил для запроса на IP-адрес NameVirtualHost (если по какой-либо причине вы не укажете NameVirtualHost, но не определите VirtualHosts для этого адреса).
Так что ничего страшного, если вы измените дефолт на ip-адрес вашего сервера.
Я нахожу ответ отсюда: http://alexking.org/blog/2007/11/01/apache-2-only- sizes-first-virtual-host
Поместите 2 имени сервера в один и тот же тег 1 VirtualHost, как показано ниже:
<VirtualHost *:80>
ServerName beta-site-1.com
DocumentRoot "/Library/WebServer/beta-site-1"
ServerName beta-site-2.com
DocumentRoot "/Library/WebServer/beta-site-2"
</VirtualHost>
У меня возникли проблемы со вторым сайтом, потому что у меня было два блока тегов VirtualHost.
Я обнаружил, что источником этой проблемы была запись в / etc / hosts на моем сервере с URL-адресом, указывающим на внешний IP-адрес сервера.
В какой-то момент я, должно быть, настраивал его до того, как DNS был готов, поэтому я ввел запись / etc / hosts на моем сервере, указывающую на его собственный внешний IP-адрес:
1.2.3.4 vhost.example.com
Затем я настроил ServerAlias на существующий сайт для "vhost.example.com".
Но я ничего не мог сделать, чтобы остановить Apache, обслуживающего сайт default-ssl.conf для SSL-запросов к vhost.example.com. Порт 80 HTTP работал нормально, но SSL всегда показывал сайт по умолчанию. В конце концов, этот тред заставил меня попробовать "apachectl -S", который показывает сайты, и, наконец, я смог это понять.
Поэтому, если вы получаете сайт SSL по умолчанию вместо ожидаемого сайта, убедитесь, что вы не добавили внешний IP-адрес вашего сервера в запись / etc / hosts! Оглядываясь назад, это было довольно странно, но, надеюсь, это поможет кому-то другому!
У меня возникла проблема с переносом сайтов на новый сервер Ubuntu 16. Немного поцарапав голову, я понял, что модуль SSL не включен по умолчанию, поэтому все внутри <IfModule mod_ssl.c>
блоки, конечно, игнорируются.
Несколько лет назад я обернул все свои SSL-хосты в это условие, и на этот раз я просто скопировал файлы конфигурации на новый сервер.
Я исправил это, включив модуль:
sudo a2enmod ssl