Puma 不接受 SSL 连接

问题描述 投票:0回答:1

由于我的客户端要求,我需要使用 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 不是一个选择)

ruby-on-rails ssl https openssl windows-server
1个回答
0
投票

要在 Windows Server 上使用 HTTPS 设置 Rails 应用程序并确保其与 Puma 配合使用,请按照以下步骤操作:

  1. 确保 OpenSSL 已正确安装: 验证您的 Windows Server 上是否已安装并正确配置 OpenSSL。您可以通过运行来检查:

    openssl version
    
  2. 创建 SSL 证书: 确保您拥有 SSL 证书和私钥。通常,它们存储在

    .pem
    文件中。例如,您可能有
    server.crt
    表示证书,
    server.key
    表示私钥。

  3. 配置 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
    }
    
  4. 在 Rails 配置中强制使用 SSL: 确保您的

    config/environments/development.rb
    (或生产环境中的
    production.rb
    )具有
    config.force_ssl = true

  5. 使用 SSL 启动 Puma: 启动 Puma 时,通过运行确保它使用 SSL 配置:

    rails s -e development
    
  6. netsh
    绑定: 如果您仍然喜欢使用
    netsh
    绑定 SSL 证书,则需要确保 Puma 设置为正确侦听 HTTPS 流量。然而,通常 Puma 的本机 SSL 处理就足够了。

  7. 示例

    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'
    }
    
  8. 调试 SSL 问题: 如果 Puma 仍然报告 SSL 错误,请确保您的证书格式正确且有效。检查密钥和证书文件的路径和权限。

  9. 验证访问: 启动服务器后,通过以下方式访问您的应用程序:

    https://server_ip:7892
    

    确保端口已打开并可从外部网络访问。

  10. 检查防火墙设置: 确保您的 Windows 防火墙或任何其他网络安全组设置允许端口

    7892
    上的流量。

通过配置 Puma 直接处理 SSL,您可以避免

netsh
和 Puma 之间配置不匹配的潜在问题。如果您遵循这些步骤并确保一切设置正确,您的 Rails 应用程序应该在您指定的端口上通过 HTTPS 运行。

© www.soinside.com 2019 - 2024. All rights reserved.