环境:Nginx、Node.js
我正在尝试在 Nginx 中处理错误,但无法返回文件。
在下面简化的情况下,ngxinx.conf
如果 httprequest_method
不是GET
,HEAD
或者POST
我希望服务器返回 405.html 错误页面。
希望输出:405.html 被发送到浏览器。
实际产量:该纯文本被发送到浏览器。 http://www.example.com/html/405.html
注意:我在 Postman 中测试这一点,因此不需要在 Chrome 中安装允许向服务器发送各种 HTTP 方法的附加扩展程序。
我的配置的相关部分:
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;
}
}
答案1
之后的 URLreturn nnn
仅被视为重定向代码(301、302、303、307 和 308 状态代码)的目标 URL。文档没有清楚地说明当代码是其他内容时它会做什么。
要获取您的错误页面,请使用以下命令:
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405;
}
error_page 405 /html/405.html;
/html/405.html
这将告诉 nginx在返回状态代码 405 时发送。