【问题标题】:Serve Jekyll blog on Nginx在 Nginx 上服务 Jekyll 博客
【发布时间】:2020-02-11 02:48:24
【问题描述】:

我正在尝试在 nginx 上提供一个 jekyll 博客。 构建目录中的文件应该可以通过以下路径访问:

  - index.html -> /
  - 1.0/
    - index.html -> /1.0/
    - foo/
        a.html   -> /1.0/foo/a/
        b.html   -> /1.0/foo/b/
        c.html   -> /1.0/foo/c/
    - bar/
        1.html   -> /1.0/bar/1/
        2.html   -> /1.0/bar/2/

我尝试在 nginx 中使用 try_files 指令,但它总是调用回退,尽管文件可用。这是配置:

location ~* ^(.+)/$ {
  try_files $uri /$1/index.html /$1.html =404;
}

如果我删除 404 后备,它仅适用于最后一个值。

所以我的问题是:配置 nginx 以提供这样的静态文件的最佳方式是什么?

【问题讨论】:

    标签: nginx jekyll static-files


    【解决方案1】:

    如果我删除 404 后备,它仅适用于最后一个值。

    这是因为try_files 指令的最后一个参数应该是 HTTP 错误代码或 URI,以在未找到文件时尝试。在您的情况下,nginx 假定它是一个 URI。

    试试这个:

    location ~ ^(?<path>/.*/)(?<file>[^/]+)/$ {
        try_files $uri $path$file.html $uri/ =404;
    }
    

    如果您想处理类似于http://example.com/1.0/foo/a/http://example.com/1.0/foo/a 请求,请将正则表达式更改为^(?&lt;path&gt;/.*/)(?&lt;file&gt;[^/]+)/?$

    【讨论】:

    • 感谢您的回复,但它仅在我删除最后两个部分时才有效try_files $uri $path$file.html;
    • 这很奇怪,我测试了这个配置,它按预期工作。让我们澄清一些事情。假设您的服务器根目录下有一个/1.0/foo/a.html 文件。对http://example.com/1.0/foo/a/ 的请求没有在我的配置中返回此文件?
    • 哦,我的错,我配置了错误的 nginx。我正在通过 dokku 运行一个 nginx 应用程序,并且我一直在更改 dokku nginx 而不是应用程序 nginx。这就是原因。感谢您解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2016-07-22
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多