Как мне отладить / исправить мою настройку apache SSL?
Цель: настроить сервер, который может получать запросы https и http от домена, и перенаправлять его в приложение rails, работающее на сервере. Приложение rails работает на localhost:3002, и все попытки подключиться к серверу предпринимаются с другого компьютера в Интернете.
Я следовал этому руководству: http://hints.macworld.com/article.php?story=20041129143420344
Вот мое определение виртуального хоста
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/Users/me/projects/myproject/public"
ServerName ssl.mydomain.com
ServerAlias *.ssl.mydomain.com
ProxyPass / http://localhost:3002/ # the rails app forwards all http requests to https
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLProxyEngine On
RequestHeader set Front-End-Https "On"
CacheDisable *
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
DocumentRoot "/Users/me/projects/myproject/public"
ServerName ssl.mydomain.com
ServerAlias *.ssl.mydomain.com
SSLCertificateKeyFile "/private/etc/apache2/certs/webserver.nopass.key"
SSLCertificateFile "/private/etc/apache2/certs/newcert.pem"
SSLCACertificateFile "/private/etc/apache2/certs/demoCA/cacert.pem"
SSLCARevocationPath "/private/etc/apache2/certs/demoCA/crl"
ErrorLog "/Users/me/Desktop/ssl.log"
ProxyPass / https://localhost:3002/
ProxyPreserveHost on
</VirtualHost>
И когда я пытаюсь подключиться к sevre viov веб-браузеру, я получаю эту ошибку:
[Thu Feb 02 16:50:40 2012] [error] (502)Unknown error: 502: proxy: pass request body failed to 127.0.0.1:3002 (localhost)
[Thu Feb 02 16:50:40 2012] [error] [client 96.11.81.39] proxy: Error during SSL Handshake with remote server returned by /session/new
[Thu Feb 02 16:50:40 2012] [error] proxy: pass request body failed to 127.0.0.1:3002 (localhost) from 96.11.81.39 ()
как мне отладить / исправить это?
РЕДАКТИРОВАТЬ: ошибка веб-браузера: (эта ошибка произошла на удаленном компьютере (относительно сервера))
URL, который я набрал, был https://ssl.mydomain.com/
РЕДАКТИРОВАТЬ 2: ошибка, которую рельсы бросает в меня:
Filter chain halted as [:ensure_proper_protocol] rendered_or_redirected.
Completed in 0ms (DB: 0) | 302 Found [http://ssl.devtinderbox.com/]
[2012-02-03 10:20:45] ERROR bad Request-Line `?p\001\003\001\000W\000\000\000\020\000\0009\000\0008\000\0005\000\000\026\000\000\023\000\000'.
хотя я не уверен, что это важно, так как я думаю, что рукопожатие SSL должно пройти успешно, прежде чем rails узнает, что делать.
Я использую Mac OS X Lion.
3 ответа
Вы перенаправляете оба порта 80 (очистить http) и 443 (зашифрованный https) на один и тот же порт 3002. Это НЕ будет работать.
Я не совсем понял вашу конфигурацию, но ошибка в рукопожатии SSL объясняет, что происходит. По этой ошибке я могу сказать, что вы устанавливаете соединение в виде открытого текста (http) с https (порт 443), которое явно не работает.
Вы получите аналогичную ошибку, если попытаетесь получить доступ к URL-адресу, например http://server:443/, и этот порт 443 будет открыт для https.
(Просто копирую свой собственный ответ из дубликата на SO.)
Не беспокойтесь по поводу HTTPS между вашим интерфейсом и внутренним сервером от локального до локального.
РЕДАКТИРОВАТЬ: уточнить, использовать ProxyPass / http://localhost:3002/
вместо ProxyPass / https://localhost:3002/
В качестве альтернативы, если вы действительно хотите подключить обратный прокси-сервер к внутреннему серверу также с использованием SSL (в основном это полезно, когда этот сервер находится не там, где находится обратный прокси-сервер Apache Httpd), в дополнение к https://backend-server-address
, использовать SSLProxy*
директивы по настройке сертификатов CA, как указано во введении к mod_proxy
документация
Я никогда не видел, чтобы ProxyPass использовался для этого; почему бы вам просто не использовать правило.htaccess для принудительного перенаправления на https, если кто-то подключается к http?
Примерно так (если у вас нет других правил htaccess):
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Вы сказали, что используете рельсы? Если в приложении уже есть файл.htaccess, вам необходимо изменить его в зависимости от существующих правил. Если вы разместите текущий файл.htaccess, мы можем посмотреть.