large_client_header_buffers: Custom error pages are not working

Maxim Dounin mdounin at mdounin.ru
Tue Jun 5 11:44:27 UTC 2018


Hello!

On Tue, Jun 05, 2018 at 05:34:10AM -0400, prajos wrote:

> Hi there,
> I'm using nginx nginx version 1.12.0 as a reverse proxy to my application
> servers. 
> I allow certain top level checks like header size and count to be done at
> nginx level.
> 
> The server block looks like the following:
> 
> server {
> listen            443 ssl default_server;
> ..
> large_client_header_buffers 32 512;
> ..
>   location / {
>   ... 
>   }
> 
>    error_page 400 /400.json;
>    location = /400.json {
> 	root /etc/nginx/errors-files/;
> 	allow all;
> 	internal;
>    }
> 
> }
> 
> Then I start testing the nginx with curl and adding a header of size 600
> bytes. 
> nginx promptly stops the request and dumps a default error page instead of
> my custom error page.
> 
> <html>
> <head><title>400 Request Header Or Cookie Too Large</title></head>
> <body bgcolor="white">
> <center><h1>400 Bad Request</h1></center>
> <center>Request Header Or Cookie Too Large</center>
> <hr><center>nginx</center>
> </body>
> </html>
> 
> 
> How can I get a CUSTOM ERROR page for this situation working instead of the
> default page.

Try handling 494 errors instead.  It's a custom code used to 
report "Request Header Too Large" errors, translated to 400 just 
before returning to client.  It was introduced in nginx 0.9.4 to 
make it possible to define a custom error page for these 
particular errors separately from generic 400 errors.

(It looks like it's not documented anywhere but in CHANGES though.  
This needs to be fixed.)

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx mailing list