如何故意在Nginx中导致400错误请求?

时间:2015-09-02 22:00:13

标签: python rest nginx postman http-status-code-400

我已将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。

2 个答案:

答案 0 :(得分:1)

在NGINX配置中创建一个位置以返回400错误:

location /error { 
    return 400;
}

的Presto。

答案 1 :(得分:0)

如果收到的头字段大于配置的large_client_header_buffers

,Nginx将返回状态码400
  

请求标头字段也不能超过一个缓冲区的大小,   或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