Назад | Перейти на главную страницу

Как я могу обслуживать статические файлы с помощью 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

Вы можете проверить с помощью 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

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