У меня есть сервер frontend.example.com
с публичным IP. Это Apache (2.4) должен проксировать трафик, поступающий на service1.example.com
(Псевдоним DNS для frontend.example.com
).
service1.example.com
виртуальная машина в частной локальной сети (192.168.56.0
) между двумя.
Теперь это просто для HTTP:
<VirtualHost *:80>
ServerName service1.example.com
ProxyPass / http://192.168.56.2/
ProxyPassReverse / http://192.168.56.2/
<Location "/">
Require all granted
</Location>
</VirtualHost>
Я пытаюсь сделать то же самое для HTTPS:
<VirtualHost *:443>
ServerName service1.example.com
SSLEngine On
SSLProxyEngine On
ProxyRequests Off
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
SSLInsecureRenegotiation on
SSLProxyVerify none
SSLVerifyClient none
SSLCertificateFile /etc/ssl/certs/example_com.crt
SSLCertificateKeyFile /etc/ssl/certs/example_com.key
ProxyPass / https://192.168.56.2/
ProxyPassReverse / https://192.168.56.2/
<Location "/">
Require all granted
</Location>
</VirtualHost>
Пытаюсь получить доступ service1.example.com
через HTTPS возвращает: Ошибка во время установления связи SSL с удаленным сервером
Безопасность здесь меня не касается. service1
требует соединение HTTPS с некоторыми из его служб, поэтому я не просто проксирую HTTPS на HTTP. я не хочу frontend.example.com
быть вовлеченным с SSL. Я бы хотел, чтобы там было написано: «Эй, у меня есть соединение на 443, я не занимаюсь этим, я просто пересылаю его на этот внутренний IP, который позаботится об этом». Я просто хочу, чтобы он передал запрос. Это можно сделать?
Как вы можете видеть в конфигурации HTTPS выше, я попытался максимально ослабить безопасность (например, SSLInsecureRenegotiation on
предполагается, что нужно снизить стены против атаки «человек посередине», не так ли?). Но пока ничего не работало.
По-видимому, единственная пропущенная мне директива - SSLProxyCheckPeerName off
. Теперь это работает.