Директива местоположения не работает


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 Не найдено .

Однако, если я удаляю 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;
    }
}

Спасибо! Я прочитал подводные камни, но я думаю, что моя память подвела меня. Это работает, хотя я немного отредактировал его для своих целей.
Джесси Брэндс

Да, я сам перечитываю его время от времени, есть причина, по которой у него есть отдельная вики-страница;)
phoops

Если определение rootизнутри location- плохая практика, почему они сами делают это в docs / http / ngx_http_core_module.html # alias ? (см. там, где написано « лучше использовать директиву root ») ИСПРАВЛЕНИЕ : хорошо, похоже, что неправильно определять первичный корень в местоположении, а не просто в корне
aexl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.