В настоящее время у меня есть файл 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 {...}
блок.