nginx,使用 proxy_pass 位置处理另一个位置的 404

nginx,使用 proxy_pass 位置处理另一个位置的 404

我在 nginx 下设置了一个基本的 django 应用程序。到目前为止,一切运行良好。我需要一个设置,以便我可以使用我的 proxy_pass 应用程序处理 /media/ 下的 404。目前,当找不到文件时,它会显示一个裸露的 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 的简单性)。

原因:我需要拦截 /media/ 下的 404 错误,以便在需要时可以使用 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;
    }

}

答案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 ;
    }

相关内容