nginx, обрабатывать 404-е сообщения в другом месте с помощью proxy_pass location

У меня есть базовая установка приложения 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;
    }

}
0
задан 3 July 2020 в 11:36
1 ответ

Легче всего читать дальше и дальше. сталкиваясь с этим: 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 ;
    }
0
ответ дан 3 July 2020 в 09:11

Теги

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