使用支持HTTP和HTTPS的轻量级Web服务器

12

我正在使用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


最简单的选择可能是运行两个独立的thin实例:一个接受SSL请求,另一个接受纯文本请求。您不想这样做的原因是什么?(或者,如果thin在另一个Web服务器(如Apache或Nginx)后面运行,则只需要一个thin实例:前端服务器可以报告请求是否通过SSL进入。) - Jeremy Roman
你不能在同一个端口上运行两个 thin 实例。 - Graham Swan
3
同一个端口不能同时接受 HTTP 和 HTTPS 的连接。(这就是为什么默认约定 HTTP 运行在 80 端口而 HTTPS 运行在 443 端口的原因。) - Jeremy Roman
啊,你说得对!我有点困惑,因为端口80和443是默认隐藏的。也许我需要弄清楚如何强制“redirect_to”将用户推向“https”。如果你想把你上面的评论转换成答案,我会接受它。 - Graham Swan
2
我在3000端口上运行HTTP,而在3001端口上运行HTTPS。您如何为开发环境创建“智能重定向”策略,以便从HTTP重定向到HTTPS时还将端口从3000更改为3001?谢谢 :) - jamesfzhang
2个回答

8
最简单的选择可能是运行两个单独的thin实例:一个接受SSL请求,另一个接受纯文本请求。您不想这样做的原因是什么?(或者,如果thin在另一个Web服务器(如Apache或Nginx)后面运行,则只需要一个thin实例:前端服务器可以报告请求是否通过SSL进行。)
您不能在同一端口上同时接受HTTP和HTTPS连接。(这就是为什么默认约定是HTTP运行在端口80上,而HTTPS运行在端口443上的原因。)

4

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

你需要创建一个包含2个进程的Procfile,并使用foreman start命令启动它们。

将以下内容放在名为Procfile的文件中:

web: thin start
ssl: thin start --ssl

然后使用foreman start启动两个进程。 这是我使用的方法...希望能帮到你!


2
由于无法在同一端口上运行 2 个 Thin 实例,所以它是如何工作的?即使您在另一个端口上启动 ssl 实例,例如 thin start --ssl -p 3001,您如何智能地处理应用程序中从 http 到 https 的重定向? - jamesfzhang
1
@JZ11 Nginx会根据协议智能处理重定向/转发。但我也想知道解决方法。 - Damien Roche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接