Для моего сервера 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 Не Найдено.
Однако, если я удалю location /images
и изменить location /
к следующему ...
location / {
root /srv/www/static;
}
Оно работает! Что я здесь делаю не так?
Ваша конфигурация соответствует конфигурации 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;
}
}