私の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;
}
できます!ここで何が悪いのですか?
あなたの設定は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;
}
}