Как мне отладить / исправить мою настройку 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, мы можем посмотреть.

Другие вопросы по тегам