大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 代理后面的Rails应用程序,使用SSL,将路径呈现为“http://”,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,这听起来更像是一个错误,然后是其他任何东西.
我的rails应用程序由Unicorn提供服务.然后,使用Nginx作为反向代理,我使用SSL将应用程序提供给外部世界.
到目前为止这么好,没问题.我正在使用相对路径(Restful path Helpers),所以生成它应该没有问题(对于https://www.example.com):
new_entry_path => https://www.example.com/entries/new
在大多数情况下,这样做很好.
然而,在控制器中我尝试重定向到“显示”操作(使用资源)时出现问题,假设在成功更新后(假设条目为id 100):
redirect_to @entry, flash: {success: "Entry has been updated"}
要么
redirect_to entry_path(@entry), flash: {success: "Entry has been updated"}
他们都产生了重定向:
http://www.example.com/entries/100 # missing 's' in https...
代替
/entries/100 # implying https://www.example.com/entries/100
据我所知,这只发生在show动作中,只在控制器重定向中发生.
做一些可怕而恶心的事情,我绕过了这个:
redirect_to entry_url(@entry).sub(/^http\:/,"https:"), flash: {success: "Entry has been updated"}
有没有人遇到类似的东西?任何想法都将被感激地接受……
解决方法:
我遇到了类似的问题.默认情况下,Rails将使用当前协议用于* _url助手.
我们使用Nginx作为Web服务器,使用unicorn作为应用程序服务器. Nginx接受请求,解开SSL部分,然后将其传递给独角兽.因此,独角兽总是收到一个http请求.如果我们现在希望Rails知道原始协议,我们可能需要添加X-ForWARDed-Proto头.
示例配置:
upstream app {
server unix:/var/run/myserver/unicorn.sock fail_timeout=0;
}
server {
listen 443 ssl;
server_name myserver;
ssl_certificate "/etc/pki/Nginx/myserver.crt";
ssl_certificate_key "/etc/pki/Nginx/private/myserver.key";
root /myserver/@R_618_5234@
try_files $uri/index.html $uri @app;
sendfile on;
LOCATIOn @app {
proxy_set_header X-ForWARDed-For $proxy_add_x_forWARDed_for;
proxy_set_header X-ForWARDed-Proto https; # <--- will be used
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app;
}
}
以上是大佬教程为你收集整理的ruby-on-rails – 代理后面的Rails应用程序,使用SSL,将路径呈现为“http://”全部内容,希望文章能够帮你解决ruby-on-rails – 代理后面的Rails应用程序,使用SSL,将路径呈现为“http://”所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。