Nginx   发布时间:2022-05-10  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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,请注明来意。
标签:首先