【问题标题】:Using Thin Web Server with HTTP and HTTPS通过 HTTP 和 HTTPS 使用瘦 Web 服务器
【发布时间】:2012-03-22 12:23:56
【问题描述】:

我正在使用 Thin Web 服务器来为我的 Rails 应用程序提供服务。

  • 使用thin start 启动服务器会处理http 请求。
  • 使用thin start --ssl 启动服务器会处理https 请求。

有没有办法让thin 同时处理httphttps 请求?

我问的原因是因为当我在控制器中使用redirect_to some_path 时,它们会重定向到http。由于thin 正在处理https 请求,因此不会呈现任何内容。

注意:我在Rails 3.0.7 中使用Rack::SSL

【问题讨论】:

  • 最简单的选择可能是运行两个单独的瘦实例:一个接受 SSL 请求,一个接受明文请求。你有什么理由不想这样做? (或者,如果 Thin 在另一台 Web 服务器(如 Apache 或 Nginx)后面运行,您只需要一个 Thin 实例:前端服务器可以报告请求是否通过 SSL 进入。)
  • 您不能在同一个端口上运行thin 的两个实例。
  • 您也不能在同一个端口上同时接受 HTTP 和 HTTPS 连接。 (这就是为什么默认情况下,HTTP 在端口 80 上运行,而 HTTPS 在端口 443 上运行。)
  • 啊,你是对的!我很困惑,因为端口 80 和 443 是隐藏的,因为它们是默认的。也许我需要弄清楚如何强制redirect_to 将用户推送到https。如果您想将上面的评论转换为答案,我会接受。
  • 我在端口 3000 上运行 HTTP,在端口 3001 上运行 HTTPS。如何为您的开发环境创建“智能重定向”策略,以便从 HTTP 重定向到 HTTPS 也会将端口从 3000 更改为3001?谢谢:)

标签: ruby-on-rails ruby-on-rails-3 ssl https


【解决方案1】:

(根据要求将评论转换为答案。)

最简单的选择可能是运行两个单独的瘦实例:一个接受 SSL 请求,一个接受明文请求。你有什么理由不想这样做? (或者,如果 Thin 在另一台 Web 服务器后面运行,例如 Apache 或 Nginx,您只需要一个 Thin 实例:前端服务器可以报告请求是否通过 SSL 进入。)

您不能在同一个端口上同时接受 HTTP 和 HTTPS 连接。 (这就是为什么默认情况下,HTTP 在端口 80 上运行,而 HTTPS 在端口 443 上运行。)

【讨论】:

    【解决方案2】:

    你可以使用工头(https://github.com/ddollar/foreman);

    您创建一个包含 2 个进程的 Procfile,然后使用 forman start 命令启动这两个进程。

    把它放在一个名为Procfile的文件中:

    web: thin start
    ssl: thin start --ssl
    

    然后使用foreman start,他启动了2进程。 我就是这样使用的……希望对你有帮助!

    【讨论】:

    • 这是如何工作的,因为您不能在同一个端口上运行 2 个瘦实例?即使您在另一个端口上启动 ssl 实例,例如 thin start --ssl -p 3001,您如何智能地处理应用程序中从 http 到 https 的重定向?
    • @JZ11 Nginx 将根据协议智能地处理重定向/转发。但我也想知道解决方法。
    猜你喜欢
    • 2019-01-09
    • 2014-12-20
    • 2011-01-21
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2016-03-27
    相关资源
    最近更新 更多