我已将previous question分成两部分。
我的REST API的消费者说有时我会返回400 Bad Request - 客户端发送的请求在语法上是不正确的。错误。
我的应用程序(Python / Flask)日志似乎没有捕获这个,我的webserver / Nginx也没有记录。
我通过在配置中添加以下行来更改默认的400和404错误消息HTML(并在相应的目录中添加相应的HTML页面):
error_page 404 /404.html;
location = /404.html {
root html;
}
error_page 400 /400.html;
location = /400.html {
root html;
}
此错误消息明确指出“Nginx”,以便我知道Nginx正在提供400而不是我的python / flask应用程序(其400已更改为明确状态“Flask”)。
有没有办法可以故意让Nginx返回400错误,可能是通过python,CURL或Postman?例如,我还更改了404错误页面,并且可以通过调用无效的URL故意让Nginx返回相应的错误HTML。
答案 0 :(得分:1)
在NGINX配置中创建一个位置以返回400错误:
location /error {
return 400;
}
的Presto。
答案 1 :(得分:0)
如果收到的头字段大于配置的large_client_header_buffers
请求标头字段也不能超过一个缓冲区的大小, 或400(错误请求)错误返回给客户端。缓冲区是 仅按要求分配。默认情况下,缓冲区大小等于8K 字节。如果在请求处理结束后连接是 转换到保持活动状态,这些缓冲区被释放。
来源:http://nginx.org/en/docs/http/ngx_http_core_module.html#large_client_header_buffers
所以你只需要创建一个大于8k的标题的curl请求。这是一个使用python生成头变量以传递给curl的示例:
(nginx)macbook:nginx joeyoung$ myheader=$(python -c "print 'A'*9000")
(nginx)macbook:nginx joeyoung$ curl -vvv --header "X-MyHeader: $myheader" http://my.example.website.com
结果:
...
>
< HTTP/1.1 400 Bad Request
< Server: nginx/1.4.7
< Date: Wed, 02 Sep 2015 22:37:29 GMT
< Content-Type: text/html
< Content-Length: 248
< Connection: close