nginx如何有一个try_files的dynamic顺序

我不知道如何更好地提出这个问题,所以让我知道如果有更好的方法,但这是我想要做的。

我有一个应用程序发送一个基于请求url的HTML文件,该应用程序还在caching文件夹中创build该html文件的caching,以便nginx可以在下次访问同一url时提供caching文件。

这是如预期的工作,除了我不希望caching由nginx在有查询参数时读取。 我想要的应用程序是一个处理请求时发生这种情况,但发送caching而不是。 这是我到目前为止:

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; } 

那么如何让try_files绕过content/cache/$uri.html并在url中存在查询参数时直接进入@app

其他人可能会想到一些复杂的事情,但我想我有一个非常简单的解决scheme。

您的应用程序使用URLpath(不带查询参数)将文件caching为文件名。 如果请求的URL有一个查询string,则不需要使用caching。

nginx有一个variables$is_args ,它是空的,如果没有查询string,或者包含一个? 如果有查询string。 你可以简单地合并:

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

因此,如果URL包含查询string,则nginx尝试的path将附加一个? 并不会匹配该文件。 该请求将传递给您的应用程序。