Мы обновили нашу конфигурацию развертывания 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: //пример. com
) для загрузки и перенаправления, но среды разработки ( https://chris.example.com
) снова загружались из него. Первоначально я рассматривал возможность использования явного стартового правила:
ServerName ^example.com
, но я не могу найти нигде, говорящего, что имя сервера
принимает регулярное выражение. Есть ли способ сделать это, или у меня неправильный путь, и проблема в другом?
Вот результат 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
и другое для примера . com:443
, в первом случае все поддомены VirtualHost
, а во втором только одно для самого example.com
.
Сделав его единым с одним NameBasedVirtualHost *:443
, а также все поддомены и основной домен, ссылающиеся на него, исправили проблему.