HTTPS с перенаправлением на другой домен с виртуальным хостом apache - PullRequest
0 голосов
/ 27 июня 2018

Я бы хотел перенаправить виртуальный хост на моем сервере в другой домен, работающий по протоколу HTTPS. Я также хотел бы показать только исходный URL, следовательно, используя флаг P для прокси. Вот текущая конфигурация:

RewriteEngine on
SSLProxyEngine on
RewriteCond %{HTTP_HOST} ^subdomain1\.domain1\.ext1$ [NC]
RewriteRule ^(.*) https://subdomain2.domain2.ext2$1 [L,R,P]

Должен ли я создать сертификат на домене 1 с помощью certbot? Какой webroot мне следует связать? Должен ли я включить один из domain2?

В настоящее время у меня есть это в error.log:

[Wed Jun 27 09:13:42.011549 2018] [ssl:error] [pid 19805] [remote IP2:443] AH01961: SSL Proxy requested for domain1.ext1:80 but not enabled [Hint: SSLProxyEngine]
[Wed Jun 27 09:13:42.011734 2018] [proxy:error] [pid 19805] AH00961: HTTPS: failed to enable ssl support for IP2:443 (subdomain2.domain2.ext2)

Однако SSLProxyEngine установлено.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Наконец, лучшим решением было использование mod_proxy вместо mod-rewrite.

http-версия (перенаправление на https)

<VirtualHost *:80>
    ServerName domain1.ext1
    ServerAlias subdomain1.domain1.ext1

    SSLProxyEngine on
    ProxyPass / https://subdomain2.domain2.ext2/
    ProxyPassReverse / https://subdomain2.domain2.ext2/
    ProxyPreserveHost Off

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =subdomain1.domain1.ext1
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>

Версия https

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName domain1.ext1
    ServerAlias subdomain1.domain1.ext1

    SSLProxyEngine on
    ProxyPass / https://subdomain2.domain2.ext2/
    ProxyPassReverse / https://subdomain2.domain2.ext2/
    ProxyPreserveHost Off

    SSLCertificateFile /etc/letsencrypt/live/subdomain1.domain1.ext1/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/subdomain1.domain1.ext1/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
0 голосов
/ 27 июня 2018

, так как вы не показали свою настройку VirtualHost, вот как я бы сделал это с нуля.

Сначала настройте VirtualHost для порта 443 на вашем первом сервере Apache:

Listen *:443
<VirtualHost *:443>
    ServerName www.domain1.com
    ServerAlias domain1.com

    SSLEngine On
    [... all our SSL directives, like certs ...]

    SSLProxyEngine on

    RewriteEngine On
    RewriteRule ^(.*) https://subdomain2.domain2.ext2/$1 [R=301,P]

</VirtualHost>
  • Для вашего RewriteRule, L не требуется, когда вы используете флаг P, он неявный.
  • Ваш RewriteCond не является строго обязательным, поскольку, если вы находитесь в этом VirtualHost, вы запросили https://www.domain1.com или https://domain1.com. Но если это самый верхний VirtualHost для порта 443, его можно использовать как VirtualHost по умолчанию для запросов на порт 443 в целом, поэтому он также не ошибается.

Затем настройте другой VirtualHost для домена2, снова на порт 443, на другом сервере:

Listen *:443
<VirtualHost *:443>
    ServerName www.domain2.com
    ServerAlias domain2.com

    SSLEngine On
    [... all our SSL directives, like certs ...]

    DirectoryIndex  ...
    [ ... other configurations to publish your pages ...]

</VirtualHost>
  • Полученная ошибка говорит о том, что SSL не включен с портом 80, что имеет смысл. Если вы запросите http://www.domain1.com, он будет отправлен соответствующему VirtualHost на порт 80, который является HTTP, следовательно, не SSL. Вы должны попросить https://www.domain1.com.

Если вы хотите установить обе системы на одну систему, у вас возникнет небольшая проблема. У вас не может быть двух VirtualHost с разными доменными именами на одном и том же IP и одном и том же порту (443) для SSL. Это потому, что Apache не знает, какой домен вы хотите, до после согласования сертификатов. Таким образом, способ решить это:

  • два сервера, по одному на домен HTTPS.
  • Один IP на домен HTTPS. Вы должны сделать Listen IP1:443 и Listen IP2:443 и настроить VirtualHost, используя их также.
  • Один порт на домен HTTPS. Ваш domain1 VirtualHost может использовать порт 443 (по умолчанию для https: // ... Requets). Ваш домен2 VirtualHost может использовать любой другой порт, так как он будет известен только вам и скрыт от клиентов. Ваш RewriteRule будет использовать https://subdomain2.domain2.ext2:<THE PORT>/$1

Но это длинная тема, и вам нужно было бы провести некоторые исследования по запуску множества HTTPS-сайтов на одном сервере для всех деталей.

...