由于我的客户端要求,我需要使用 HTTPS 协议在 Windows Server 上运行我的 Rails 应用程序。我已经创建了我的证书,并将它们附加到我的端口
netsh http 添加 sslcert ipport=0.0.0.0:7892 certhash={my_cert_print} appid={random_guid}
我还在我的
development.rb
文件中添加了 ssl 选项:
config.force_ssl = true
但是当我使用
执行我的网站时rails s -p 7892 -e development --binding=0.0.0.0
并使用外部连接
https://server_ip:7892
我从 puma 收到此错误:
2024-06-12 17:53:01 -0300: HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.>
如果我尝试使用瘦服务器
thin start -p 7892 --ssl
我明白了
terminate called after throwing an instance of 'std::runtime_error'
what(): Encryption not available on this event-machine
服务器上安装了OpenSSL。我还可以做些什么? (遗憾的是,离开 Windows Server 不是一个选择)
要在 Windows Server 上使用 HTTPS 设置 Rails 应用程序并确保其与 Puma 配合使用,请按照以下步骤操作:
确保 OpenSSL 已正确安装: 验证您的 Windows Server 上是否已安装并正确配置 OpenSSL。您可以通过运行来检查:
openssl version
创建 SSL 证书: 确保您拥有 SSL 证书和私钥。通常,它们存储在
.pem
文件中。例如,您可能有 server.crt
表示证书,server.key
表示私钥。
配置 Puma 使用 SSL: 如果配置正确,Puma 可以直接处理 SSL 连接。修改您的
config/puma.rb
文件以包含 SSL 设置:
ssl_bind '0.0.0.0', '7892', {
key: 'path/to/server.key',
cert: 'path/to/server.crt',
verify_mode: 'none' # or appropriate verify mode
}
在 Rails 配置中强制使用 SSL: 确保您的
config/environments/development.rb
(或生产环境中的 production.rb
)具有 config.force_ssl = true
。
使用 SSL 启动 Puma: 启动 Puma 时,通过运行确保它使用 SSL 配置:
rails s -e development
与
netsh
绑定:
如果您仍然喜欢使用 netsh
绑定 SSL 证书,则需要确保 Puma 设置为正确侦听 HTTPS 流量。然而,通常 Puma 的本机 SSL 处理就足够了。
示例
puma.rb
配置:
这是 puma.rb
的完整示例:
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
on_worker_boot do
# Worker specific setup for Rails 4.1+
# See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
ActiveRecord::Base.establish_connection
end
ssl_bind '0.0.0.0', '7892', {
key: 'path/to/server.key',
cert: 'path/to/server.crt',
verify_mode: 'none'
}
调试 SSL 问题: 如果 Puma 仍然报告 SSL 错误,请确保您的证书格式正确且有效。检查密钥和证书文件的路径和权限。
验证访问: 启动服务器后,通过以下方式访问您的应用程序:
https://server_ip:7892
确保端口已打开并可从外部网络访问。
检查防火墙设置: 确保您的 Windows 防火墙或任何其他网络安全组设置允许端口
7892
上的流量。
通过配置 Puma 直接处理 SSL,您可以避免
netsh
和 Puma 之间配置不匹配的潜在问题。如果您遵循这些步骤并确保一切设置正确,您的 Rails 应用程序应该在您指定的端口上通过 HTTPS 运行。