nginx 如何实现try_files的动态顺序

nginx 如何实现try_files的动态顺序

我不知道如何更好地表述这个问题,所以如果有更好的方法请告诉我,但这是我想要做的。

我有一个应用程序,它根据请求url发送一个html文件,它还在缓存文件夹中创建该html文件的缓存,以便下次有人访问同一个url时,nginx就可以提供缓存的文件。

这按预期工作,只是我不希望在有查询参数时 nginx 读取缓存。当发生这种情况时,我希望应用程序能够处理请求,但缓存会被发送。以下是我目前的情况:

    location / {
        root    /path/to/site;
        try_files /content/cache/$uri.html @app;
    }

    location @app {
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8080;
    }

那么,当 URL 中有查询参数时,我该如何绕过try_filescontent/cache/$uri.html直接转到?@app

答案1

其他人可能会想到一些复杂的事情,if但我认为我对此有一个非常简单的解决方案。

您的应用程序使用 URL 路径(不带查询参数)作为文件名来缓存文件。如果请求的 URL 包含查询字符串,则您不想使用缓存。

nginx 有一个变量$is_args,如果没有查询字符串,则为空;?如果有查询字符串,则包含一个。您可以简单地合并以下内容:

        try_files /content/cache/$uri.html$is_args @app;

因此,如果 URL 包含查询字符串,nginx 尝试的路径将附加一个,?并且不会匹配该文件。然后请求将传递给您的应用程序。

相关内容