
Для моего сервера 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;
}
Работает! Что я делаю не так?
решение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;
}
}