web-dev-qa-db-ja.com

nginxを使用して、特定のディレクトリのサブディレクトリから静的ファイルを提供します

サーバーに複数の静的.htmlファイルセットがあり、nginxを使用してそれらを直接提供したいと思います。たとえば、nginxは次のパターンのURIを提供する必要があります。

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

.htmlにある/home/www-data/mysite/public/doc/foo/bar.htmlファイルを使用します。ここでは、fooをセット名、barをファイル名と考えることができます。

次のnginx configの部分が仕事をするのだろうか?

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;
    }
}

つまり、パターン/public/doc/.../....htmlのすべてのリクエストはnginxによって処理され、特定のURIが見つからない場合は、デフォルトのwww.mysite.com/404.htmlが返されます。

50
MLister

ただし、動作するはずです http://nginx.org/en/docs/http/ngx_http_core_module.html#alias 言います:

場所がディレクティブの値の最後の部分と一致する場合:代わりにルートディレクティブを使用することをお勧めします。

次のようになります:

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