【问题标题】:Conceptual Rails / nginx概念 Rails / nginx
【发布时间】:2014-04-22 08:30:31
【问题描述】:

我希望 nginx 在生产中提供静态资产而不是轨道。在 railscasts 之后,我将 nginx.conf 文件设置为包括:

root /public

location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
} 

location / {
proxy_pass @rails_app #defined elsewhere
}

我明白这是在做什么:如果请求与模式匹配,则直接从根提供它并添加适当的标头。我不明白的是请求是如何生成的。如果我发送一些动态 url:/thing/1,那么 nginx 会将其 proxy_pass 到 rails 应用程序,该应用程序将发回响应。现在假设响应需要一个图像。 Rails 不会在生产中提供图像(在我的设置中),所以 nginx 必须提供它。但是 nginx 是如何知道为它服务的呢?我知道会为该图像生成一个单独的请求,该请求将与图像位置指令匹配,因此避免使用 proxy_pass,但是该请求是何时/在何处生成的?最初的 rails 响应是告诉浏览器对图像发出额外的请求,还是 rails 自己直接向 nginx 发出请求?

【问题讨论】:

    标签: ruby-on-rails http nginx


    【解决方案1】:

    Nginx 通过定义的位置树寻找最匹配的结果。第一次查找“=”位置,如果没有匹配,则进一步查找。接下来是 "^~" 和 "/" 和 root 以下。

    最好的例子可以在官方文档中找到:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

    在您的情况下,所有匹配“/assets/”的请求都会绕过 Rails 应用程序直接转到文件系统。代理传递服务的休息呼叫。

    【讨论】:

      猜你喜欢
      • 2011-01-25
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多