У меня есть базовая установка приложения django под nginx. Пока все работает нормально. Что мне нужно, так это настройка, чтобы я мог обрабатывать 404-е в / media / с моим приложением proxy_pass. В настоящее время он показывает ошибку nginx 404, когда файл не найден. Я прочитал https://nginx.org/en/docs/http/ngx_http_core_module.html#location , но не могу понять, как это сделать.
Две ссылки для демонстрации: https://pfadi.swiss/de/what/ (показывает мой настоящий 404) и https://pfadi.swiss/media/foooing/ (демонстрирует простоту nginx).
Причина: мне нужно перехватить 404 ошибки в / media /, чтобы при необходимости я мог перенаправить с помощью приложения django.
server {
listen 127.0.0.1:123455;
root /mysite;
server_name
host.com
;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://upstream_name ;
break;
}
}
error_page 500 502 503 504 /nginx/50x.html;
location /nginx/ {
root /mysite/public/static/;
}
location /media/ {
alias /mysite/public/media/;
expires 3M;
}
}
Легче всего читать дальше и дальше. сталкиваясь с этим: https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms#when-does-location-block-evaluation-jump-to -other-locations
Итак, в основном, сначала попробуйте общую папку, если нет совпадений, используйте запасной вариант @proxy_pass.
location / {
root /mysite/public;
try_files $uri @proxy_pass;
expires 3M;
}
location @proxy_pass {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_pass http://upstream_server ;
}