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


10

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

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

回答:


14

あなたの設定は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;
    }
}

ありがとうございました!私は落とし穴を読みましたが、私の記憶は私に失敗したと思います。これは機能しますが、目的のために少し編集しました。
Jesse Brands

ええ、私は時々自分自身でその
一部を読み直し

root内部を定義することlocationが悪い習慣である場合、どうしてdocs / http / ngx_http_core_module.html#aliasでそれを自分自身で提供しているのですか?(「rootディレクティブを代わりに使用する方が良いと記載されている箇所を参照してください)修正わかりました。問題は、任意のルートだけでなく、ロケーションにプライマリルートを定義しているようです
aexl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.