有没有一种简单的方法让 pow 提供 https 服务?

36

Pow很好用,但我的应用程序中有许多东西都要求使用https,如果我需要在它们之间添加“如果不是开发环境”的条件,那将会很麻烦。那么,是否有可能让Pow提供https服务呢?

7个回答

48

我发现最简单的方法是使用隧道:https://github.com/jugyo/tunnels

$ gem install tunnels
$ rvmsudo tunnels   # or just use sudo if using rbenv

无需配置。


1
那个解决方案真是省了不少时间!太棒了! - Julian Krispel-Samsel

16

选项1:使用PowTunnelss完成

我遇到了关于Tunnels解决方案的问题,它非常好,但是浏览器会将其标记为不安全的,这在处理CORS等情况时会引起麻烦。

我尝试了PowSSL解决方案(使用Stud),但缺少HTTP_X_FORWARDED_PROTO,这会在应用需要知道它是通过HTTP还是HTTPS请求时(它永远不会知道它是HTTPS)时导致另一组麻烦。

但是后者的方法很棒,因为它可以为所有配置的POW.dev 域生成有效的证书!

因此,我构建了tunnelss,它结合了这两种方法:它是tunnels的一个分支,并添加了证书生成!

希望你会喜欢它,如果你想完善它,请随意发送pull requests,目前它只是在MacOS X上快速进行的一次黑客攻击...

选项2:切换到Invoker(使用我的分支...目前是这样)

Invoker是Pow的一个很好的替代品,因为它原生支持HTTPS。你不需要在Pow之上添加其他解决方案来获得HTTPS!

然而,与Pow相比,我发现它有两个限制:

  • 你必须为每个进程指定一个命令,以便运行它,
  • 你无法拥有一个默认规则,处理所有请求到本地主机并将它们代理到特定应用程序。

这些限制很容易克服,我提出了一个pull request来解决这两个问题。直到被接受之前,你可以使用以下方法安装分支版本:

git clone https://github.com/rchampourlier/invoker invoker -b proxy-only-mode
cd invoker
gem build invoker.gemspec
gem install invoker-1.5.0.gem

通过这个分支,你将能够使用一个全局配置文件,例如像这样的~/.invoker.ini:

[my-rails-app]
port = 3000

[my-sinatra-app]
port = 9292

[default]
port = 9292

使用以下命令作为代理运行Invoker:

invoker ~/.invoker.ini -d

1
这个 gem 真是太棒了,它解决了我在 pow 和开发环境中遇到的最后一个烦人的问题。感谢您的分享。 - geoffharcourt
谢谢@geoffharcourt,我很高兴它有用! - Romain Champourlier
这个星期我花了好几天时间头疼,因为Chrome 63强制在.dev域名上使用SSL,我一直在尝试让pow也能运行。Tunnelss是迄今为止最简单、最干净的解决方案。太棒了! - Aaron Gray

7
使用stunnel创建到pow服务器的隧道。
例如:
stunnel3 -f -d 443 -r 127.0.0.1:80

1
以下是在OSX上使用stunnel在pow(或任何Web服务器)前面的具体说明:这里有一些具体的说明 - Brad
@Brad 你可能会对我编写的使用stud的脚本感兴趣。它还为所有pow主机设置了有效的证书,因此您在浏览器中不会收到SSL警告。https://gist.github.com/2050941#file_gistfile1.md - Paul Nicholson

7

目前POW不支持SSL (https://github.com/37signals/pow/issues/5)。但是,许多其他人都有同样的愿望,希望未来的版本中会包含这个功能!

如果您不想修改代码,最好的替代方案是设置Apache并生成开发SSL证书。这将需要修改您的hosts文件,不像POW那样“slick”,但好的一面是它避免了烦人的特定环境条件。

编辑:

最新更新是,可以使用Nginx配置SSL来使用POW,具体请参考以下指南:

https://gist.github.com/gvarela/928606/


5

这是一个很好的解决方案,我从 Pow+Tunnels 切换到了你的 PowSSL 脚本,谢谢!不过我有一个遗憾,stud 没有设置 HTTP_X_FORWARDED_PROTO 头部,而 Tunnels 却有。这会阻止我在我的应用程序上强制执行正确的 HTTPS 重定向规则,否则我会陷入重定向循环。你有什么解决办法吗? - Romain Champourlier

3

URL现在404了。 - scribu

0

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