Ошибка 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];
        }
    }
}

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

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

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

1
задан 23 March 2017 в 21:24
2 ответа

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

Вы написали, что вы поместили предложение статического местоположения файла после 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 есть отличное руководство , объясняющее, как это работает. Я рекомендую его прочитать.

3
ответ дан 3 December 2019 в 18:30

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

.
0
ответ дан 3 December 2019 в 18:30

Теги

Похожие вопросы