Мы обновили конфигурацию развертывания Apache, чтобы разрешить запросы без www к нашему серверу (https://example.com
). Для https-соединений нам это нужно, потому что имя не соответствует сертификату. Это было хорошо, хотя недавно мы заметили безопасные среды локального развертывания (https://chris.example.com
) также указывают на это новое развертывание. Мы закомментировали новое развертывание, чтобы подтвердить, что это изменение вызвало его, и так оно и было. Мы предположили, что это было из servername
установка, которую мы установили. Вот наши начальные настройки:
NameVirtualHost example.com:443
<VirtualHost example.com:443>
ServerAdmin webmaster@example.com
DocumentRoot /var/www/html/www.example.com
ServerName example.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLProtocol all
SSLCertificateFile /usr/local/ssl/crt/example2017.cert
SSLCertificateKeyFile /usr/local/ssl/private/ssl2017.key
SSLCACertificateFile /usr/local/ssl/crt/example2017intermediate.pem
DirectoryIndex index.html
DirectoryIndex index.php
LogLevel notice
ErrorLog /var/log/httpd/www.example.com/error.log
LogFormat "%{%Y-%m-%d %H:%M:%S}t %a %u %A %p %m %U %q %>s \"%{User-agent}i\"" w3c_extended
CustomLog /var/log/httpd/www.example.com/access.log w3c_extended
</VirtualHost>
После того, как комментирование сработало, мы предположили, что это ServerName
мы читаем на сайте Apache следующее:
Иногда сервер работает за устройством, которое обрабатывает SSL, например обратным прокси, балансировщиком нагрузки или устройством разгрузки SSL. В этом случае укажите схему https: // и номер порта, к которому подключаются клиенты, в директиве ServerName, чтобы убедиться, что сервер генерирует правильные самореференциальные URL-адреса.
-http://httpd.apache.org/docs/2.2/mod/core.html#servername
Итак, мы обновили servername
запись в:
ServerName https://example.com:443
это позволило главной странице (https://example.com
) для загрузки и перенаправления, но среды разработки (https://chris.example.com
) снова загружались с него. Первоначально я подумывал попробовать явное стартовое правило:
ServerName ^example.com
но я нигде не могу сказать servername
принимает регулярное выражение. Есть ли способ сделать это, или у меня неправильный путь, и проблема в другом?
Вот httpd -S
вывод:
VirtualHost configuration:
192.168.0.0:443 is a NameVirtualHost
default server example.com (/etc/httpd/conf/httpd.conf:1065)
port 443 namevhost example.com (/etc/httpd/conf/httpd.conf:1065)
wildcard NameVirtualHosts and _default_ servers:
*:443 is a NameVirtualHost
default server *.example.com (/etc/httpd/conf.d/ssl.conf:74)
port 443 namevhost *.example.com (/etc/httpd/conf.d/ssl.conf:74)
port 443 namevhost www.example.com (/etc/httpd/conf/httpd.conf:1046)
port 443 namevhost chris.example.com (/etc/httpd/conf/httpd.conf:1096)
port 443 namevhost dan.example.com (/etc/httpd/conf/httpd.conf:1129)
port 443 namevhost rich.example.com (/etc/httpd/conf/httpd.conf:1159)
port 443 namevhost rich2.example.com (/etc/httpd/conf/httpd.conf:1189)
port 443 namevhost danny12.example.com (/etc/httpd/conf/httpd.conf:1219)
port 443 namevhost nick.example.com (/etc/httpd/conf/httpd.conf:1249)
port 443 namevhost cdn.example.com (/etc/httpd/conf/httpd.conf:1300)
port 443 namevhost origin_server.example.com (/etc/httpd/conf/httpd.conf:1316)
*:80 is a NameVirtualHost
default server www.example.com (/etc/httpd/conf/httpd.conf:1034)
port 80 namevhost www.example.com (/etc/httpd/conf/httpd.conf:1034)
port 80 namevhost dfw.example.com (/etc/httpd/conf/httpd.conf:1084)
port 80 namevhost chris.example.com (/etc/httpd/conf/httpd.conf:1114)
port 80 namevhost dan.example.com (/etc/httpd/conf/httpd.conf:1147)
port 80 namevhost rich.example.com (/etc/httpd/conf/httpd.conf:1177)
port 80 namevhost rich2.example.com (/etc/httpd/conf/httpd.conf:1207)
port 80 namevhost danny12.example.com (/etc/httpd/conf/httpd.conf:1237)
port 80 namevhost nick.example.com (/etc/httpd/conf/httpd.conf:1267)
port 80 namevhost origin_server.example.com (/etc/httpd/conf/httpd.conf:1279)
port 80 namevhost cdn.example.com (/etc/httpd/conf/httpd.conf:1290)
Syntax OK
Новое развертывание началось на строке 1064 и закончилось на 1081.
После более тщательного расследования в чате выяснилось, что были два NameBasedVirtualHost
заявления, один для *:443
и еще один для example.com:443
у первого есть все поддомены VirtualHost
декларации, а в последнем есть только одно для example.com
сам.
Делаем его единообразным NameBasedVirtualHost *:443
объявление и все поддомены и основной домен, ссылающиеся на него, устранили проблему.