Як я можу подавати статичні файли з nginx, але використовувати дещо інший URL для торнадо?


0

У мене є структура каталогів, яку я хочу обслуговувати, що містить файли як бінарні та деяку метаінформацію про них як 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
    }
}

Використовуючи це прямо зараз. Працює як шарм.
AME

3

За допомогою 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.