Comment puis-je servir des files statiques avec nginx mais utiliser une URL légèrement différente pour la tornade?

J'ai une structure de directory que je souhaite desservir, qui contient des files binarys et des méta-informations à propos d'eux comme json. Pour certains directorys, j'ai besoin de calculer certaines choses à la volée et de le servir. Je veux calculer et servir cette information à l'aide de la tornade.

Voici un exemple:

> 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 Solutions collect form web for “Comment puis-je servir des files statiques avec nginx mais utiliser une URL légèrement différente pour la tornade?”

    Si votre cas d'utilisation est "servir des files statiques s'il existe, sinon, envoyer tout à la tornade", vous pouvez le faire avec try_files :

     upstream upstream_tornado { server http://127.0.0.1:8080; # ...or wherever } server { listn 80; server_name localhost; root /path/to/wherever; try_files $uri @tornado; location @tornado { proxy_pass http://upstream_tornado; # Other proxy stuff eg proxy_set_header } } 

    Vous pouvez vérifier avec nginx si ?diesel est appelé en recherchant $arg_diesel dans l' location = / block.

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

    location = / n'est pas identique à l' location / . location = / ne sera appelé que pour les requests qui ne sont pas dans un dossier tel /?diesel , mais pas /somepath/?diesel alors que l' location / correspondra à tout.

    Documentation: http://nginx.org/r/location

    Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de réseau.