gpt4 book ai didi

nginx - 如何修复 Sinatra 在 nginx 下将 https 重定向到 http

转载 作者:行者123 更新时间:2023-12-03 21:26:24 24 4
gpt4 key购买 nike

我有一个在 nginx 中运行的 Sinatra 应用程序(使用 Thin 作为反向代理),我正在使用 redirect '/<path>' Sinatra 中的声明。但是,当我在 https 下访问该站点时,这些重定向会将我发送到 http://localhost/<path>而不是 https://localhost/<path>正如他们应该的那样。

目前,nginx 使用此命令 proxy_pass http://thin_cluster 将控制权交给瘦身。 , 其中 thin_cluster

upstream thin_cluster { server unix:/tmp/thin.cct.0.sock; }

我怎样才能解决这个问题?

最佳答案

为了让 Sinatra 正确组装用于重定向的 url,它需要能够确定请求是否使用 ssl,以便可以使用 http 进行重定向或 https作为适当的。

显然,对瘦的实际调用没有使用 ssl,因为这是由前端 Web 服务器处理的,并且代理请求是明确的。因此,我们需要一种方法来告诉 Sinatra 它应该将请求视为安全的,即使它实际上并未使用 ssl。

最终确定请求是否应被视为安全的代码位于 Rack::Request#ssl? 中。和 Rack::Request#scheme 方法。 scheme方法检查 env散列以查看是否存在多个条目之一。其中之一是 HTTP_X_FORWARDED_PROTO对应于 X-Forwarded-Proto HTTP header 。如果设置了此项,则该值用作协议(protocol)方案(httphttps)。

因此,如果我们在请求从 nginx 代理到后端时将这个 HTTP header 添加到请求中,Sinatra 将能够正确确定何时重定向到 https。 .在 nginx 中,我们可以使用 proxy_set_header 向代理请求添加 header , 该方案在 $scheme variable 中可用.

所以添加行

proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass之后的nginx配置线应该使它工作。

关于nginx - 如何修复 Sinatra 在 nginx 下将 https 重定向到 http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6330595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com