web-dev-qa-db-fra.com

Utilisez nginx pour servir des fichiers statiques à partir de sous-répertoires d'un répertoire donné

J'ai plusieurs ensembles de fichiers statiques .html Sur mon serveur et j'aimerais utiliser nginx pour les servir directement. Par exemple, nginx devrait servir un URI du modèle suivant:

www.mysite.com/public/doc/foo/bar.html

avec le fichier .html situé à /home/www-data/mysite/public/doc/foo/bar.html. Vous pouvez penser à foo en tant que nom du jeu et à bar en tant que nom de fichier ici.

Je me demande si le morceau suivant de nginx config ferait l'affaire:

server {
    listen        8080;
    server_name   www.mysite.com mysite.com;
    error_log     /home/www-data/logs/nginx_www.error.log;
    error_page    404    /404.html;

    location /public/doc/ {
        autoindex         on;
        alias             /home/www-data/mysite/public/doc/;
    }

    location = /404.html {
        alias             /home/www-data/mysite/static/html/404.html;
    }
}

En d'autres termes, toutes les demandes du modèle /public/doc/.../....html Vont être traitées par nginx, et si un URI donné n'est pas trouvé, un défaut www.mysite.com/404.html Est renvoyé.

50
MLister

Cela devrait cependant fonctionner http://nginx.org/en/docs/http/ngx_http_core_module.html#alias dit:

Lorsque location correspond à la dernière partie de la valeur de la directive: il est préférable d’utiliser la directive racine:

qui donnerait:

server {
  listen        8080;
  server_name   www.mysite.com mysite.com;
  error_log     /home/www-data/logs/nginx_www.error.log;
  error_page    404    /404.html;

  location /public/doc/ {
    autoindex on;
    root  /home/www-data/mysite;
  } 

  location = /404.html {
    root /home/www-data/mysite/static/html;
  }       
}
77
cobaco