Назад | Перейти на главную страницу

Проблема с поддоменами в конфигурации Apache

Я пытаюсь добиться следующего:

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, а затем выполнить перенаправление внутри этого виртуального хоста.