Назад | Перейти на главную страницу

Ошибка 404 для статических ресурсов при реализации кеширования браузера на nginx

В настоящее время у меня есть файл nginx.conf, который выглядит следующим образом (с скобками, заменяющими конфиденциальные данные):

worker_processes  3;

events {
    worker_connections  1024;
}

http {
    access_log  [/...];
    error_log   [/...]  crit;

    include mime.types;
    sendfile on;

    server {
        server_name [...] [...];
        return 301 [...] $request_uri;
    }

    server {
        listen 127.0.0.1:[...];
        root [/...];

        location / {
            include uwsgi_params;
            uwsgi_pass [.../uwsgi.sock];
        }
    }
}

Если я добавлю следующую строку после существующего предложения location {...}, как предлагается Вотзагрузка веб-сайта приведет к ошибке «404 not found» для изображений, CSS и js ресурсов:

location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 1d;
}

Как я могу реализовать кеширование браузера, не вызывая проблемы «404»?

Это простая проблема, связанная с неправильным указанием вашего местоположения.

Вы написали, что вы поместили предложение о статическом местоположении файла после в location / {} блок. Это означает, что в первую очередь там будут проверяться ваши статические файлы. Поскольку ваш сокет uwsgi не может найти пути к файлам, он возвращает 404.

То, что вы хотите, будет выглядеть примерно так.

http {
    [..]

    server {
        server_name example.com;
        return 301 ^ $request_uri;
    }

    server {
        listen localhost;
        root /path/to/webroot/;

        location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
            expires 1d;
        }
        location / {
            include uwsgi_params;
            uwsgi_pass [...];
        }
    }
}

Хорошие люди из Digital Ocean отличный гид объясняя, как это работает. Рекомендую прочитать.

Решение это решило мою проблему, чтобы поставить uwsgi_pass [.../uwsgi.sock]; пункт внутри каждого location {...} блок.