【问题标题】:How to configure NGINX to server only one static file?如何将 NGINX 配置为仅服务器一个静态文件?
【发布时间】:2020-07-24 14:37:52
【问题描述】:

我们的 Rails 应用程序在 puma/nginx 上运行 在 NGINX 配置的下方。

我想要实现的是,当请求 URL 为 http://example.com 时,它将提供来自 /public/cached_pa​​ges/index.html 的静态缓存文件,并且在所有其他情况下,它的工作方式就像现在这样传递请求到rails/puma

upstream rails {
  server unix:///var/www/html/cms/shared/sockets/puma.sock;
}


   location / {
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       add_header Cache-Control "public";
       expires 2d;
       proxy_set_header Host $http_host;
       proxy_set_header  X-Forwarded-Proto $scheme;
       proxy_set_header  X-Forwarded-Ssl on; # Optional
       proxy_set_header  X-Forwarded-Port $server_port;
       proxy_pass http://rails;
  }

【问题讨论】:

    标签: ruby-on-rails nginx nginx-config


    【解决方案1】:

    我不确定这是否是最佳解决方案,但您尝试过try_files 吗? (Nginx docs) 在 Rails 上下文中,这通常用于资产,但也可能适用于您的缓存。资产示例如下所示:

      try_files $uri/index.html $uri @app_production;
      location @app_production {
    [...]
        proxy_redirect off;
        proxy_pass http://app_production;
    

    第一行需要根据您的需要进行调整,但这也可能适用于您的情况。

    【讨论】:

    • 这并不是最好的选择。您应该匹配确切的路径,然后使用 location 指令在正确的位置提供确切的文件
    • 我已经更新了我的缓存逻辑,所以为了简单起见,我有大约 50 条路由,其中​​一些我已经预处理了我想要服务的缓存 HTML 文件。所以 path / 应该服务于 index.html 路径 /about 应该服务于 about.html 并且所有其他路径应该代理到 rails。如何配置?
    • 我建议为 / 路由制定专门的规则,就像在另一个答案中建议的那样。否则,所有请求都必须针对这种特殊情况进行探测。此外,try_files $uri.html @app_name; 之类的东西也可以工作。它将尝试查找与带有 .html 后缀的 uri 匹配的文件,否则将使用该应用程序。您可以将它与第一条规则结合使用并拥有try_files $uri/index.html $uri.html @app_name,但这会产生额外的开销。我自己没有尝试过这个建议,但从概念上讲它应该可行。
    【解决方案2】:

    您应该使用location 指令

      location = / {
        gzip_static on;
        root public/cached_pages
        index.html
      }
    

    = 符号将为 url 提供精确匹配,如果没有 = 符号,您将匹配域名之后的任何路径。接下来,打开 gzip 将压缩文件以减少流量带宽,以便压缩 index.html 页面然后将 root 指令设置为文件的路径将使 nginx 找到您要服务的文件,然后实际文件本身应该可以为您解决问题。

    根指令可能需要文件夹的完整路径而不是相对公共路径,显然我不知道那会是什么。

    【讨论】:

      猜你喜欢
      • 2018-01-04
      • 2020-05-18
      • 2018-05-08
      • 2021-12-19
      • 2019-07-22
      • 2018-02-03
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多