Я уверен, что это то, что я уже должен понять, но я запутался.
Конфиги в игре складываются в это:
NameVirtualHost *:80
Listen 80
<VirtualHost *:80>
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@domain.tld
ServerName domain.tld
ServerAlias *.domain.tld
DocumentRoot /var/www/domain.tld
<Directory /var/www/domain.tld>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
DNS работает правильно.
Проблема в том, что каждый вариант http: //*.domain.tld/ (включая http: //domain.tld/) работает правильно, кроме http: //www.domain.tld/ который бросает 403.
Состояние журналов: клиент отклонен конфигурацией сервера: / etc / apache2 / htdocs
Если я удалю первый блок VirtualHost из игры, все будет работать должным образом, включая http: //www.domain.tld. Это наводит меня на мысль, что по какой-то причине Apache не рассматривает www.domain.tld для соответствия второму блоку VirtualHost и, таким образом, отказывается все отрицать.
Это кажется неправильным. Разве второй блок не должен соответствовать www.domain.tld?
Мне удалось решить эту проблему, но я до сих пор не понимаю, почему. В моих исходных конфигурациях я использовал реальный IP-адрес сервера вместо *. Переключение всех экземпляров на *, как показано выше, заставило все работать должным образом.
Связано ли это с тем, как браузеры запрашивают ресурсы?
Я бы избегал подстановочного знака для www
запись.
Измените это:
ServerName domain.tld
ServerAlias *.domain.tld
К этому:
ServerName www.domain.tld
ServerAlias domain.tld subdomain.domain.tld etc.domain.tld
чтобы посмотреть, работает ли это. вызов имени сервера www.domain.tld
для тестирования подстановочного знака, чтобы увидеть, вызывает ли он проблемы.