Tenho alguns problemas com uma configuração específica que desejo alcançar:
Resumo:
- O Nginx atua como um proxy reverso
- Backend em execução em http://localhost:8080/
- O Nginx pode retornar HTTP 403 (
$block_access = true
), nesse caso quero mostrar uma página de erro personalizada (/errors/403.html
) - O backend pode retornar HTTP 404, nesse caso também quero mostrar uma página de erro personalizada (
/errors/404.html
)
Problemas:
- A página HTTP 403 personalizada não funciona, a página Nginx 403 padrão é exibida em seu lugar
- Página HTTP 404 personalizada para o backend funciona
- Se eu remover
proxy_intercept_errors
do bloco de localização, a página 403 personalizada funciona para o Nginx, mas a página 404 personalizada para o proxy obviamente não funciona mais
Configuração:
server {
listen 443 ssl http2;
server_name mydomain.com;
# Reverse proxy configuration
location / {
# Let Nginx handle basic blocking behavior
if ($block_access) {
return 403;
}
# Proxy request to backend
proxy_pass http://localhost:8080/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection $http_connection;
# Only intercept 404 errors from the backend
proxy_intercept_errors on;
error_page 404 /errors/404.html;
# Serve custom 404 error page
location = /errors/404.html {
root /var/www/html;
internal;
}
}
# Serve custom 403 error page for blocked access ($block_access = true)
error_page 403 /errors/403.html;
location = /errors/403.html {
root /var/www/html;
internal;
}
location /errors/ {
root /var/www/html;
try_files $uri $uri/ =404;
}
}
Estou mais ou menos completamente perdido na busca por uma solução...