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