我在 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
因此,基本上,首先尝试公共文件夹,如果不匹配,则@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 ;
}