2015-09-02 23 views
1

我已将我的previous question分为两部分。如何故意在Nginx中导致400错误请求?

我的REST API的使用者说偶尔我会返回400错误请求 - 客户端发送的请求在语法上不正确。错误。

我的应用程序(Python/Flask)日志似乎没有捕获这个,我的webserver/Nginx日志也没有。

我已通过添加以下行配置(并添加适当的目录对应的HTML页)更改默认400分404错误消息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。

回答

1

创建NGINX的config的位置以返回400错误:

location /error { 
    return 400; 
} 

Presto。

+0

真棒谢谢你。 –

0

如果它接收到一个报头字段大于配置large_client_header_buffers

的请求报头字段较大不能超过一个缓冲区的大小为好, 或400(错误请求)错误的Nginx将返回的状态代码400返回给客户端。缓冲区仅在需求时分配到 。默认情况下,缓冲区大小等于8K 字节。如果请求处理结束后连接 转换到保持活动状态,则释放这些缓冲区。

来源:http://nginx.org/en/docs/http/ngx_http_core_module.html#large_client_header_buffers

所以,你只需要创建一个头比8K大的卷曲请求。下面是一个使用位蟒以产生标题变量的示例通入卷曲:

(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