web-dev-qa-db-ja.com

ロケーションディレクティブが機能しない

私のNGINXサーバーでは、静的コンテンツを提供するためだけに仮想サーバーをセットアップしています。現時点では、画像に有効期限が設定されるように設定しています。ただし、このための場所ディレクティブを作成すると、すべてが404になります。

私の現在の設定は次のようになっています:

/ srv/www/static.conf

server {
    listen                          80;
    server_name                     static.*.*;

    location / {
            root                    /srv/www/static;
            deny                    all;
    }

    location /images {
            expires                 1y;
            log_not_found           off;
            root                    /srv/www/static/images;
    }
}

注、このファイルは/etc/nginx/nginx.confのhttpディレクティブ内に含まれています

画像にアクセスしようとしています。たとえば、static.example.com/images/screenshots/something.pngとします。案の定、画像は/srv/www/static/images/screenshots/something.pngにも存在します。ただし、上記のアドレスにアクセスしても機能せず、単純に404 Not Foundと表示されます。

ただし、location /imagesを削除してlocation /を次のように変更すると...

location / {
    root /srv/www/static;
}

できます!ここで何が悪いのですか?

9
Jesse Brands

あなたの設定はnginx設定に従っています pitfalls nginxを設定する前にそれを読むべきです。

あなたの質問に答えるには、場所にrootを定義しないでください。一度定義すると、場所タグによって特定のディレクトリへのアクセスを自動的に割り当てることができます。

また、イメージディレクトリのカスタムルートを定義する代わりに、try_files$uriはマップされます/images/ディレクトリと/static/images/

この構成を試してください:

server {
    listen                          80;
    server_name                     static.*.*;
    root                            /srv/www;

    location /static/ {
            deny                    all;
    }

    location /images/ {
            expires                 1y;
            log_not_found           off;
            autoindex               off;
            try_files $uri static/images$uri;
    }
}
14
phoops