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

Проблемы с перенаправлением поддомена на другой порт с прокси-сервером Apache

У меня есть сервер под управлением Apache с сайтом HTTPS, работающим на www.example.com и example.com. Я пытаюсь добавить новый сайт, который будет пересылать newsite.example.com на другой порт на том же сервере (контейнер Docker прослушивает этот другой порт).

Мои сайты Apache настроены следующим образом:

www.example.com.conf:

<VirtualHost *:80>
        ServerName www.example.com
        ServerAlias example.com
        Redirect permanent / https://www.example.com/
</VirtualHost>
<VirtualHost *:443>
       ServerName www.example.com
       ServerAlias example.com
       ServerAdmin support@example.com
       DocumentRoot /home/webadmin/www.example.com/

       <Directory /home/webadmin/www.example.com/>
                Order allow,deny
                Allow from all
                Require all granted
                Allowoverride All
       </Directory>

       SSLEngine on
       SSLCertificateFile    /etc/apache2/ssl/example.com.crt
       SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
       SSLCACertificateFile /etc/apache2/ssl/example.com.ca.crt
       Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

newsite.example.com.conf:

<VirtualHost *:443>
        ServerName newsite.example.com
        ServerAlias newsite.example.com
        ProxyPreserveHost On
        ProxyRequests Off
        ProxyPass / https://localhost:3000
        ProxyPassReverse / https://localhost:3000
        <Proxy *>
                Order allow,deny
                Allow from all
        </Proxy>
</VirtualHost>

Сертификат SSL для newsite.example.com обрабатывается приложением docker.

После sudo a2ensite newsite.example.com.conf && sudo service apache2 reload попытка получить доступ к любому из сайтов не удастся с ERR_SSL_PROTOCOL_ERROR.

Есть идеи, почему?

У тебя нет SSLEngine On в определении виртуального хоста "newsite", поэтому он отвечает только на простой HTML-код порта 443. Вам необходимо указать директивы SSL для каждого виртуального хоста, который должен использовать SSL.

Вы можете указать следующие директивы для новостного сайта:

SSLProxyEngine On
SSLProxyCheckPeerName Off

Первое необходимо для проксирования SSL, второе необходимо только в том случае, если сертификат не выдается для localhost.

Кроме того, вы можете удалить <Proxy> раздел, так как он нужен только для прямых прокси.