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

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

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

私の現在の設定は次のようになります:

静的ファイル

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お探しのページが見つかりませんでした

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

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

うまくいきました!何が間違っているのでしょうか?

答え1

設定はnginxの設定に従っています落とし穴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;
    }
}

関連情報