Pow很好用,但我的应用程序中有许多东西都要求使用https,如果我需要在它们之间添加“如果不是开发环境”的条件,那将会很麻烦。那么,是否有可能让Pow提供https服务呢?
我发现最简单的方法是使用隧道:https://github.com/jugyo/tunnels
$ gem install tunnels
$ rvmsudo tunnels # or just use sudo if using rbenv
无需配置。
我遇到了关于Tunnels解决方案的问题,它非常好,但是浏览器会将其标记为不安全的,这在处理CORS等情况时会引起麻烦。
我尝试了PowSSL解决方案(使用Stud),但缺少HTTP_X_FORWARDED_PROTO
,这会在应用需要知道它是通过HTTP还是HTTPS请求时(它永远不会知道它是HTTPS)时导致另一组麻烦。
但是后者的方法很棒,因为它可以为所有配置的POW.dev
域生成有效的证书!
因此,我构建了tunnelss,它结合了这两种方法:它是tunnels的一个分支,并添加了证书生成!
希望你会喜欢它,如果你想完善它,请随意发送pull requests,目前它只是在MacOS X上快速进行的一次黑客攻击...
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
stunnel3 -f -d 443 -r 127.0.0.1:80
目前POW不支持SSL (https://github.com/37signals/pow/issues/5)。但是,许多其他人都有同样的愿望,希望未来的版本中会包含这个功能!
如果您不想修改代码,最好的替代方案是设置Apache并生成开发SSL证书。这将需要修改您的hosts文件,不像POW那样“slick”,但好的一面是它避免了烦人的特定环境条件。
编辑:
最新更新是,可以使用Nginx配置SSL来使用POW,具体请参考以下指南:
我最近创建了一个脚本,使用Stud隧道实现这个功能。 https://gist.github.com/2050941#file_gistfile1.md
目前有一种使用SSL的方法,同时仍然使用POW,通过在nginx中设置SSL代理即可实现。
请参考:http://shiny-bits-of-code.tumblr.com/post/4749553253/ssl-proxy-with-nginx