【发布时间】:2019-02-21 22:18:15
【问题描述】:
尝试使用 HTTPS 为在远程服务器上的专用网络中提供的 rails 应用程序配置 Puma。 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
启动彪马
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解析错误,请求格式错误():#Puma::HttpParserError: Invalid HTTP format,解析失败。
在 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, line 95 of events.rb。
已查看的资源:
我尝试通过一些不同的小改动来调整上面的rails s 命令:
- 将 IP 从
127.0.0.1更改为0.0.0.0 - 不要指定
-p 443选项 - 指定实际的内部 IP 地址,而不是
127.0.0.1(这是在内部网络上提供的)
我还尝试删除我的浏览历史记录,并尝试从多个浏览器访问该网站。
感谢任何帮助,谢谢!
【问题讨论】:
-
你的操作系统是什么?
-
请问你能分享你的 puma 配置文件吗?
-
@zeitnot 它是 Ubuntu 16.04。并且没有 puma 配置文件。它使用所有 puma 默认值。
-
你试过直接启动 puma 而不是通过 rails 启动吗?看来这两个 github.com/puma/puma/issues/1253 之间的行为可能不同
标签: ruby-on-rails ruby puma