Как я могу обслуживать статические файлы с помощью nginx, но использовать немного другой URL для торнадо?

У меня есть структура каталогов, которую я хочу обслуживать, которая содержит файлы в виде двоичных файлов и некоторую мета-информацию о них как json. для некоторых каталогов мне нужно вычислить некоторые вещи на лету и обслуживать их. Я хочу вычислять и обслуживать эту информацию, используя торнадо.

Вот пример:

> 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

2 ответа

Решение

Если ваш сценарий использования "обслуживать статические файлы, если они существуют, в противном случае отправлять все в торнадо", вы можете сделать это с 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
    }
}

Вы можете проверить с помощью nginx ?diesel вызывается в поисках $arg_diesel в location = / блок.

location = / {

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

}

location = / это не то же самое, что location /, location = / будет вызываться только для запросов, которые не находятся в такой папке /?diesel, но нет /somepath/?diesel тогда как location / будет соответствовать всему.

Документация: http://nginx.org/r/location

Другие вопросы по тегам