Tudo bem, eu estava lutando com a mesma coisa, mas consegui encontrar a solução (a?).
No nível mais alto que eu tenho:
server {
include /etc/nginx/boilerplate/fancyerror_and_intercept.conf;
location ~ (?<target>.*) {
proxy_pass http://$backend;
}
}
/etc/nginx/boilerplate/fancyerror_and_intercept.conf
contém:
error_page 404 /40x.html;
error_page 403 /40x.html;
error_page 405 /40x.html;
error_page 500 /50x.html;
error_page 501 /50x.html;
error_page 502 /50x.html;
error_page 503 /50x.html;
location = /40x.html {
root /etc/nginx/error_pages;
}
location = /50x.html {
root /etc/nginx/error_pages;
}
more_set_headers -s '404 403 405 500 501 502 503 504' 'X-Robots-Tag: noindex, nofollow';
proxy_intercept_errors on;
Para excluir a rota /api/
(a localização começa com /api/
e pode conter qualquer coisa depois), adicione o seguinte:
location ~ ^/api/ {
error_page 527 error.html;
proxy_intercept_errors off;
proxy_pass http://$backend;
}
Em essência, o /api/
location é uma duplicata do local geral, mas com error_page redefinido e interceptar os erros definidos como off.
Isso funciona porque, como Tim declarou anteriormente , a diretiva error_page
redefine todas as error_pages predefinidas. Eu escolhi o código de erro 527
, porque não usamos CloudFlare veja a Wikipedia, Lista de códigos de status HTTP # Cloudflare . Como proxy_pass
de nossos pedidos, sua milhagem pode variar e você pode ter que alterar o proxy_intercept_errors off;
para fastcgi_intercept_errors off;
.