我怎样才能使用 nginx 提供静态文件,但对 tornado 使用略有不同的 url?

我怎样才能使用 nginx 提供静态文件,但对 tornado 使用略有不同的 url?

我有一个要提供的目录结构,其中包含二进制文件和一些有关它们的 json 元信息。对于某些目录,我需要动态计算一些内容并提供这些内容。我想使用 tornado 计算并提供这些信息。

以下是一个例子:

> ls /manufacturers/*
  audi/
  audi.json
  mercedes/
  mercedes.json

> wget http://localhost/manufactures/audi.json
  returns the json file using nginx static serving
> wget http://localhost/?diesel
  returns a json file with manufactures that 
  create cars with diesel engines computed by and using tornado

答案1

如果你的用例是“如果静态文件存在则提供它们,否则将所有内容发送到 tornado”,你可以这样做try_files

upstream upstream_tornado {
    server http://127.0.0.1:8080;
    # ...or wherever
}
server {
    listen 80;
    server_name localhost;
    root /path/to/wherever;

    try_files  $uri @tornado;

    location @tornado {
        proxy_pass http://upstream_tornado;
        # Other proxy stuff e.g. proxy_set_header
    }
}

答案2

您可以通过在块中查找来检查 nginx 是否?diesel正在被调用。$arg_diesellocation = /

location = / {

    if ( $arg_diesel ) {
        proxy_pass http://tornado;
    }

}

location = /不是与 相同,location /只会location = /对不在文件夹中的请求调用,例如/?diesel,但不会/somepath/?diesel,而location /会匹配所有内容。

文档:http://nginx.org/r/location

相关内容