1. ホーム
  2. nginx

与えられたディレクトリのサブディレクトリから静的ファイルを提供するためにnginxを使用する

2023-07-05 05:16:48

質問

私は、いくつかの静的な .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の設定の以下の部分でうまくいくかな。

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 が返されます。

どのように解決するのですか?

うまくいくはずなのですが http://nginx.org/en/docs/http/ngx_http_core_module.html#alias は言う。

location がディレクティブの値の最後の部分と一致するとき。 にマッチする場合は、代わりにルートディレクティブを使った方が良いでしょう。

で、これは

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