Я пытаюсь настроить обратный прокси-сервер HTTP для внутреннего HTTPS-сервера. В качестве примечания, да, я знаю, что отбрасываю всю безопасность. Исходный сервер HTTPS не имеет для нас особого значения, и продукт, на котором он работает, не позволяет отключать HTTPS или каким-либо образом перенастраивать встроенный веб-сервер.
Я пробовал использовать Nginx, но, похоже, большинство людей используют Apache, поэтому я сейчас пытаюсь именно это.
Это моя текущая конфигурация виртуального хоста:
<VirtualHost 0.0.0.0:10443>
ServerName server.domain.com
SSLProxyEngine on
#UnknownSSLDirectives
#SSLProxyMachineCertificateFile /etc/apache2/selfsignedcert.pem
SSLProxyCACertificateFile /etc/apache2/selfsignedcert.pem
ProxyRequests Off
ProxyPass / https://internalserver.internaldomain.com:2941/
ProxyPassReverse / https://internalserver.internaldomain.com:2941/
<Proxy>
Order Deny,Allow
Allow from all
</Proxy>
RequestHeader unset Authorization
ErrorLog /var/log/apache2/internalserver-error.log
CustomLog /var/log/apache2/internalserver-access.log common
</VirtualHost>
Когда я пытаюсь открыть http://server.domain.com:10443/ Я получаю сообщение об ошибке «401 неавторизовано».
В других вопросах ServerFault я видел ссылки на UnknownSSLDirectives, но Apache жалуется, что такой опции не существует. И использовать SSLProxyMachineCertificateFile вместо SSLProxyCACertificateFile, но Apache жалуется, что в этом случае настройка SSL не завершена.
Я застрял. Как я могу отладить это или добиться прогресса? Спасибо!
По состоянию на 2018 год не рекомендуется использовать Apache или stunnel для этой задачи. Я бы рекомендовал haproxy за его ясность и скорость.
Что касается Apache 2.2, вы ошиблись с <Proxy>
. В сценарии обратного прокси доступ к ProxyPass
контролируется <Location>
блок, а не с <Proxy>
.
В <Proxy>
относится только к вперед прокси, и вы делаете обеспечить регресс прокси. Это в руководстве.
У меня нет ответа, но вот несколько предложений по устранению проблемы.
Я бы попробовал пойти с «обратным завершением SSL», используя stunnel в клиентском режиме (http://www.thegoldfish.org/2010/01/stunnel-in-client-mode/) и попробуйте подключиться к http напрямую через stunnel на высоком порте (через curl / lynx / туннелирование высокого порта через ssh). На данный момент я имею дело только с ssl-клиентом, а не с настройками прокси Apache.
Когда у меня это заработало, я попытался настроить простой незашифрованный HTTP-прокси в Apache для порта stunnel. У меня работает расшифровка, а незашифрованный http-прокси в Apache - это известная и хорошо документированная установка. Кроме того, я могу использовать сниффер (например, tcpdump) для прослушивания связи между Apache и незашифрованным сокетом stunnel.
Только после того, как это сработает, я попытаюсь выяснить, как удалить посредника stunnel и заставить Apache говорить по https.
Боковое примечание: я бы ожидал некоторых проблем с аутентификацией, если серверная служба устанавливает флаг безопасности для файлов cookie, а браузер считает, что он находится на незашифрованном http. Некоторые другие заголовки и перенаправления также могут создавать проблемы. В любом случае отлаживайте службу с помощью curl -v перед использованием браузера и используйте веб-инспектор (например, Firebug) для проверки заголовков запросов / ответов и файлов cookie.