Я пытаюсь добиться следующего:
http: // site.com -> основной сайт (с переписыванием www.site.com без www)
https: // predploy.site.com -> второй сайт (защищен паролем и SSL)
https: // site.com -> в соединении отказано
http: //preploy.site.com -> в соединении отказано
DNS для поддоменов выполняется с использованием записей A, а не CNAME, поскольку они, по-видимому, являются предпочтительным методом для серверов имен Linode. И site.com, и Preploy.site.com относятся к одному и тому же IP-адресу.
У меня настроено два хоста:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName site.com
ServerAlias www.site.com
DocumentRoot /var/www/site.com
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</VirtualHost>
NameVirtualHost *:443
<VirtualHost *:443>
ServerName predeploy.site.com
DocumentRoot /var/www/predeploy.site.com
SSLEngine on
... # Basic auth and SSL stuff, which works
</VirtualHost>
Проблема в том, что https: // site.com обслуживает второй сайт (так же, как https: // prevploy.site.com, и требует аутентификации), а http: // predploy.site.com обслуживает главный сайт ( то же, что и http: // site.com). Я считаю, что это означает, что vhosts ошибаются. Как мне их исправить?
Он ведет себя так, как вы его настроили. позволь мне объяснить:
SSL основан на порте, и «NameVirtualHost» на самом деле не существует под SSL, если вы не используете сертификаты UCC. Это означает, что если вы используете один и тот же IP-адрес для обоих сайтов, он всегда будет показывать ваш настроенный сайт SSL, поскольку он привязывается к порту.
Вы не создали VirtualHost для Preploy.site.com для порта 80, что означает, что по умолчанию он будет использовать первый. Если вы хотите выполнить предварительное развертывание без SSL для перенаправления на предварительное развертывание с помощью ssl, вам нужно будет создать для него виртуальный хост на порту 80, а затем выполнить перенаправление внутри этого виртуального хоста.