
Ambiente:Nginx, Nodo.js
Estoy experimentando con el manejo de errores en Nginx y no tengo suerte al devolver archivos.
En el ngxinx.conf
siguiente ejemplo simplificado, si http request_method
no es GET
, HEAD
o POST
me gustaría que el servidor devuelva la página de error 405.html.
Salida esperada:405.html se envía al navegador.
Salida real:este texto sin formato se envía al navegador. http://www.example.com/html/405.html
Nota: Estoy probando esto en Postman para no tener que instalar una extensión adicional en Chrome que permita enviar varios métodos HTTP al servidor.
Porciones relevantes de mi configuración:
server {
include conf.d/listen-80;
server_name example.com www.example.com;
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405 $scheme://www.example.com/html/405.html;
}
return 301 https://www.example.com$request_uri;
}
server {
include conf.d/listen-443;
server_name example.com;
include conf.d/letsencrypt;
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405 $scheme://www.example.com/html/405.html;
}
return 301 https://www.example.com$request_uri;
}
server {
include conf.d/listen-443;
server_name www.example.com;
include conf.d/letsencrypt;
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405 $scheme://www.example.com/html/405.html;
}
root /srv/example/views/public;
location ~* \.(htm|html)$ {
include conf.d/content-security-policy-html-rendered;
include conf.d/cache-control-30-days;
include conf.d/security-headers-html-rendered;
}
}
Respuesta1
La URL posterior return nnn
se trata únicamente como una URL de destino para el código de redireccionamiento (códigos de estado 301, 302, 303, 307 y 308). La documentación no dice claramente qué hace cuando el código es otra cosa.
Para obtener una página de error en su caso, utilice lo siguiente:
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405;
}
error_page 405 /html/405.html;
Esto le indicará a nginx que envíe /html/405.html
cuando se devuelva el código de estado 405.