Configure haproxy to return a 204 for a certain ACL match
I want to return a HTTP 204 error code if anyone tries to access a particular path on my web server. I could set one of my webservers to return a 204 error and point haproxy to it as a backend. However since no information is being sent, I figured this should be possible to do from haproxy itself. No need to bother my actual web servers.
I tried creating a backend that would generate the 204 error as follows:
frontend ...
...
acl is_always204 path_beg /thisone
use_backend always204 if is_always204
...
backend always204
errorfile 404 /etc/haproxy-shared/errors/204.http
The 204.http file contains:
HTTP/1.0 204 No Content
Cache-Control: no-cache
Connection: close
Content-Type: image/png
When I start haproxy, I get this error:
parsing [/etc/haproxy/haproxy:51] : status code 404 not handled, error customization will be ignored.
I think I may be going about this the wrong way. Can anyone suggest a way to force haproxy to return a 204 for a given acl match?
Solution 1:
As mentioned in the comments, you cannot specify an errorfile for 404, as HAProxy will never generate a 404. You must use something like 503, which HAProxy does actually emit and has a configurable error file. Your 204 file can be used as is, just substitute 503 for 204 in your config.