Попытка настроить Puma с HTTPS для приложения rails, обслуживаемого в частной сети на удаленном сервере. Puma Docs создают видимость, что это возможно, и они предоставляют эту команду:
puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'
Шаги (для целей тестирования):
Создание личногоключ и самозаверяющий сертификат
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/puma_test.key -out /etc/zzz_puma_test.crt
Загрузка Puma
rvmsudo rails s -p 443 -b 'ssl://127.0.0.1?key=/etc/puma_test.key&cert=/etc/zzz_puma_test.crt'
Когда я загружаю сервер, в журналах я вижу это, которое я считаю странным: Listening on tcp://0.0.0.0:443
Это похоже на то, что Puma все еще загружается в http, а не в https.Ниже приведены полные журналы терминала при загрузке Puma:
=> Booting Puma
=> Rails 4.2.8 application starting in development on http://ssl://127.0.0.1?key=/etc/puma_test.key&cert=/etc/zzz_puma_test.crt:443
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma starting in single mode...
* Version 3.12.0 (ruby 2.3.3-p222), codename: Llamas in Pajamas
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:443
Когда я пытаюсь получить доступ к сайту, я получаю эту ошибку в терминале:
Ошибка синтаксического анализа HTTP, искаженаrequest (): #Puma :: HttpParserError: Неверный формат HTTP, сбой синтаксического анализа.
В самом браузере Firefox он предоставляет такую обратную связь:
SSL получил записьэто превышало максимально допустимую длину.Код ошибки: SSL_ERROR_RX_RECORD_TOO_LONG
Странно то, что я выполняю точные шаги, указанные выше, локально на моем компьютере для приложения, которое локально обслуживается на моем компьютере, и все работает нормально.
- Я создал новое приложение
- Запустил вышеуказанную строку для генерации секретного ключа и самозаверяющего сертификата
- Запустил вышеуказанную строку для загрузки сервера
- В терминале, когда сервер загружается, он показывает, что он правильно слушает (другими словами: никогда не упоминает http):
Listening on ssl://127.0.0.1:443?key...cert...
- Подключение к
https://localhost/blogs
работает просто отлично.
Возможно, это связано с тем, что я использую Linux-машину, а не мой Mac?Или, может быть, мое тестовое приложение живет на удаленном сервере в моей сети?Я посмотрел на метод, который генерирует эту ошибку.Это parse_error, строка 95 событий.rb .
Ресурсы уже просмотрены:
Я попытался настроить указанную выше команду rails s
с несколькими различными небольшими изменениями:
- изменил IP с
127.0.0.1
на 0.0.0.0
- не указывайте опцию
-p 443
- укажите фактический внутренний IP-адрес вместо
127.0.0.1
(он обслуживается навнутренняя сеть)
Я также попытался удалить историю просмотров и попытался получить доступ к сайту из нескольких браузеров.
Любая помощь приветствуется, спасибо!