[MINOR] http: make the "HTTP 200" status code configurable.

This status code is used in response to requests matching "monitor-uri".
Some users need to adjust it to fit their needs (eg: make some strings
appear there). As it's already defined as a chunked string and used
exactly like other status codes, it makes sense to make it configurable
with the usual "errorfile", "errorloc", ...
This commit is contained in:
Willy Tarreau 2011-05-11 16:28:49 +02:00
parent 436d9ed808
commit ae94d4df8f
3 changed files with 23 additions and 20 deletions

View File

@ -2075,7 +2075,7 @@ errorfile <code> <file>
yes | yes | yes | yes
Arguments :
<code> is the HTTP status code. Currently, HAProxy is capable of
generating codes 400, 403, 408, 500, 502, 503, and 504.
generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
<file> designates a file containing the full HTTP response. It is
recommended to follow the common practice of appending ".http" to
@ -2087,6 +2087,8 @@ errorfile <code> <file>
errors returned by the server, but errors detected and returned by HAProxy.
This is why the list of supported errors is limited to a small set.
Code 200 is emitted in response to requests matching a "monitor-uri" rule.
The files are returned verbatim on the TCP socket. This allows any trick such
as redirections to another URL or site, as well as tricks to clean cookies,
force enable or disable caching, etc... The package provides default error
@ -2120,7 +2122,7 @@ errorloc302 <code> <url>
yes | yes | yes | yes
Arguments :
<code> is the HTTP status code. Currently, HAProxy is capable of
generating codes 400, 403, 408, 500, 502, 503, and 504.
generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
<url> it is the exact contents of the "Location" header. It may contain
either a relative URI to an error page hosted on the same site,
@ -2132,6 +2134,8 @@ errorloc302 <code> <url>
errors returned by the server, but errors detected and returned by HAProxy.
This is why the list of supported errors is limited to a small set.
Code 200 is emitted in response to requests matching a "monitor-uri" rule.
Note that both keyword return the HTTP 302 status code, which tells the
client to fetch the designated URL using the same HTTP method. This can be
quite problematic in case of non-GET methods such as POST, because the URL
@ -2161,6 +2165,8 @@ errorloc303 <code> <url>
errors returned by the server, but errors detected and returned by HAProxy.
This is why the list of supported errors is limited to a small set.
Code 200 is emitted in response to requests matching a "monitor-uri" rule.
Note that both keyword return the HTTP 303 status code, which tells the
client to fetch the designated URL using the same HTTP GET method. This
solves the usual problems associated with "errorloc" and the 302 code. It is
@ -2658,7 +2664,8 @@ monitor fail { if | unless } <condition>
very useful to report a site failure to an external component which may base
routing advertisements between multiple sites on the availability reported by
haproxy. In this case, one would rely on an ACL involving the "nbsrv"
criterion. Note that "monitor fail" only works in HTTP mode.
criterion. Note that "monitor fail" only works in HTTP mode. Both status
messages may be tweaked using "errorfile" or "errorloc" if needed.
Example:
frontend www
@ -2668,7 +2675,7 @@ monitor fail { if | unless } <condition>
monitor-uri /site_alive
monitor fail if site_dead
See also : "monitor-net", "monitor-uri"
See also : "monitor-net", "monitor-uri", "errorfile", "errorloc"
monitor-net <source>

View File

@ -240,7 +240,8 @@ enum {
* All implemented return codes
*/
enum {
HTTP_ERR_400 = 0,
HTTP_ERR_200 = 0,
HTTP_ERR_400,
HTTP_ERR_403,
HTTP_ERR_408,
HTTP_ERR_500,

View File

@ -68,20 +68,6 @@ const struct chunk http_100_chunk = {
.len = sizeof(HTTP_100)-1
};
/* This is used by remote monitoring */
const char HTTP_200[] =
"HTTP/1.0 200 OK\r\n"
"Cache-Control: no-cache\r\n"
"Connection: close\r\n"
"Content-Type: text/html\r\n"
"\r\n"
"<html><body><h1>200 OK</h1>\nService ready.\n</body></html>\n";
const struct chunk http_200_chunk = {
.str = (char *)&HTTP_200,
.len = sizeof(HTTP_200)-1
};
/* Warning: no "connection" header is provided with the 3xx messages below */
const char *HTTP_301 =
"HTTP/1.1 301 Moved Permanently\r\n"
@ -123,6 +109,7 @@ const char *HTTP_407_fmt =
const int http_err_codes[HTTP_ERR_SIZE] = {
[HTTP_ERR_200] = 200, /* used by "monitor-uri" */
[HTTP_ERR_400] = 400,
[HTTP_ERR_403] = 403,
[HTTP_ERR_408] = 408,
@ -133,6 +120,14 @@ const int http_err_codes[HTTP_ERR_SIZE] = {
};
static const char *http_err_msgs[HTTP_ERR_SIZE] = {
[HTTP_ERR_200] =
"HTTP/1.0 200 OK\r\n"
"Cache-Control: no-cache\r\n"
"Connection: close\r\n"
"Content-Type: text/html\r\n"
"\r\n"
"<html><body><h1>200 OK</h1>\nService ready.\n</body></html>\n",
[HTTP_ERR_400] =
"HTTP/1.0 400 Bad request\r\n"
"Cache-Control: no-cache\r\n"
@ -2705,7 +2700,7 @@ int http_wait_for_request(struct session *s, struct buffer *req, int an_bit)
/* nothing to fail, let's reply normaly */
txn->status = 200;
stream_int_retnclose(req->prod, &http_200_chunk);
stream_int_retnclose(req->prod, error_message(s, HTTP_ERR_200));
goto return_prx_cond;
}