21 static u_char ngx_http_error_full_tail[] =
28 static u_char ngx_http_error_tail[] =
29 "<hr><center>nginx</center>" CRLF
35 static u_char ngx_http_msie_padding[] =
36 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
37 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
38 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
39 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
40 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
41 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
45 static u_char ngx_http_msie_refresh_head[] =
46 "<html><head><meta http-equiv=\"Refresh\" content=\"0; URL=";
49 static u_char ngx_http_msie_refresh_tail[] =
50 "\"></head><body></body></html>" CRLF;
53 static char ngx_http_error_301_page[] =
55 "<head><title>301 Moved Permanently</title></head>" CRLF
56 "<body bgcolor=\"white\">" CRLF
57 "<center><h1>301 Moved Permanently</h1></center>" CRLF
61 static char ngx_http_error_302_page[] =
63 "<head><title>302 Found</title></head>" CRLF
64 "<body bgcolor=\"white\">" CRLF
65 "<center><h1>302 Found</h1></center>" CRLF
69 static char ngx_http_error_303_page[] =
71 "<head><title>303 See Other</title></head>" CRLF
72 "<body bgcolor=\"white\">" CRLF
73 "<center><h1>303 See Other</h1></center>" CRLF
77 static char ngx_http_error_307_page[] =
79 "<head><title>307 Temporary Redirect</title></head>" CRLF
80 "<body bgcolor=\"white\">" CRLF
81 "<center><h1>307 Temporary Redirect</h1></center>" CRLF
85 static char ngx_http_error_400_page[] =
87 "<head><title>400 Bad Request</title></head>" CRLF
88 "<body bgcolor=\"white\">" CRLF
89 "<center><h1>400 Bad Request</h1></center>" CRLF
93 static char ngx_http_error_401_page[] =
95 "<head><title>401 Authorization Required</title></head>" CRLF
96 "<body bgcolor=\"white\">" CRLF
97 "<center><h1>401 Authorization Required</h1></center>" CRLF
101 static char ngx_http_error_402_page[] =
103 "<head><title>402 Payment Required</title></head>" CRLF
104 "<body bgcolor=\"white\">" CRLF
105 "<center><h1>402 Payment Required</h1></center>" CRLF
109 static char ngx_http_error_403_page[] =
111 "<head><title>403 Forbidden</title></head>" CRLF
112 "<body bgcolor=\"white\">" CRLF
113 "<center><h1>403 Forbidden</h1></center>" CRLF
117 static char ngx_http_error_404_page[] =
119 "<head><title>404 Not Found</title></head>" CRLF
120 "<body bgcolor=\"white\">" CRLF
121 "<center><h1>404 Not Found</h1></center>" CRLF
125 static char ngx_http_error_405_page[] =
127 "<head><title>405 Not Allowed</title></head>" CRLF
128 "<body bgcolor=\"white\">" CRLF
129 "<center><h1>405 Not Allowed</h1></center>" CRLF
133 static char ngx_http_error_406_page[] =
135 "<head><title>406 Not Acceptable</title></head>" CRLF
136 "<body bgcolor=\"white\">" CRLF
137 "<center><h1>406 Not Acceptable</h1></center>" CRLF
141 static char ngx_http_error_408_page[] =
143 "<head><title>408 Request Time-out</title></head>" CRLF
144 "<body bgcolor=\"white\">" CRLF
145 "<center><h1>408 Request Time-out</h1></center>" CRLF
149 static char ngx_http_error_409_page[] =
151 "<head><title>409 Conflict</title></head>" CRLF
152 "<body bgcolor=\"white\">" CRLF
153 "<center><h1>409 Conflict</h1></center>" CRLF
157 static char ngx_http_error_410_page[] =
159 "<head><title>410 Gone</title></head>" CRLF
160 "<body bgcolor=\"white\">" CRLF
161 "<center><h1>410 Gone</h1></center>" CRLF
165 static char ngx_http_error_411_page[] =
167 "<head><title>411 Length Required</title></head>" CRLF
168 "<body bgcolor=\"white\">" CRLF
169 "<center><h1>411 Length Required</h1></center>" CRLF
173 static char ngx_http_error_412_page[] =
175 "<head><title>412 Precondition Failed</title></head>" CRLF
176 "<body bgcolor=\"white\">" CRLF
177 "<center><h1>412 Precondition Failed</h1></center>" CRLF
181 static char ngx_http_error_413_page[] =
183 "<head><title>413 Request Entity Too Large</title></head>" CRLF
184 "<body bgcolor=\"white\">" CRLF
185 "<center><h1>413 Request Entity Too Large</h1></center>" CRLF
189 static char ngx_http_error_414_page[] =
191 "<head><title>414 Request-URI Too Large</title></head>" CRLF
192 "<body bgcolor=\"white\">" CRLF
193 "<center><h1>414 Request-URI Too Large</h1></center>" CRLF
197 static char ngx_http_error_415_page[] =
199 "<head><title>415 Unsupported Media Type</title></head>" CRLF
200 "<body bgcolor=\"white\">" CRLF
201 "<center><h1>415 Unsupported Media Type</h1></center>" CRLF
205 static char ngx_http_error_416_page[] =
207 "<head><title>416 Requested Range Not Satisfiable</title></head>" CRLF
208 "<body bgcolor=\"white\">" CRLF
209 "<center><h1>416 Requested Range Not Satisfiable</h1></center>" CRLF
213 static char ngx_http_error_494_page[] =
215 "<head><title>400 Request Header Or Cookie Too Large</title></head>"
217 "<body bgcolor=\"white\">" CRLF
218 "<center><h1>400 Bad Request</h1></center>" CRLF
219 "<center>Request Header Or Cookie Too Large</center>" CRLF
223 static char ngx_http_error_495_page[] =
225 "<head><title>400 The SSL certificate error</title></head>"
227 "<body bgcolor=\"white\">" CRLF
228 "<center><h1>400 Bad Request</h1></center>" CRLF
229 "<center>The SSL certificate error</center>" CRLF
233 static char ngx_http_error_496_page[] =
235 "<head><title>400 No required SSL certificate was sent</title></head>"
237 "<body bgcolor=\"white\">" CRLF
238 "<center><h1>400 Bad Request</h1></center>" CRLF
239 "<center>No required SSL certificate was sent</center>" CRLF
243 static char ngx_http_error_497_page[] =
245 "<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>"
247 "<body bgcolor=\"white\">" CRLF
248 "<center><h1>400 Bad Request</h1></center>" CRLF
249 "<center>The plain HTTP request was sent to HTTPS port</center>" CRLF
253 static char ngx_http_error_500_page[] =
255 "<head><title>500 Internal Server Error</title></head>" CRLF
256 "<body bgcolor=\"white\">" CRLF
257 "<center><h1>500 Internal Server Error</h1></center>" CRLF
261 static char ngx_http_error_501_page[] =
263 "<head><title>501 Not Implemented</title></head>" CRLF
264 "<body bgcolor=\"white\">" CRLF
265 "<center><h1>501 Not Implemented</h1></center>" CRLF
269 static char ngx_http_error_502_page[] =
271 "<head><title>502 Bad Gateway</title></head>" CRLF
272 "<body bgcolor=\"white\">" CRLF
273 "<center><h1>502 Bad Gateway</h1></center>" CRLF
277 static char ngx_http_error_503_page[] =
279 "<head><title>503 Service Temporarily Unavailable</title></head>" CRLF
280 "<body bgcolor=\"white\">" CRLF
281 "<center><h1>503 Service Temporarily Unavailable</h1></center>" CRLF
285 static char ngx_http_error_504_page[] =
287 "<head><title>504 Gateway Time-out</title></head>" CRLF
288 "<body bgcolor=\"white\">" CRLF
289 "<center><h1>504 Gateway Time-out</h1></center>" CRLF
293 static char ngx_http_error_507_page[] =
295 "<head><title>507 Insufficient Storage</title></head>" CRLF
296 "<body bgcolor=\"white\">" CRLF
297 "<center><h1>507 Insufficient Storage</h1></center>" CRLF
301 static ngx_str_t ngx_http_error_pages[] = {
305 #define NGX_HTTP_LAST_2XX 202
306 #define NGX_HTTP_OFF_3XX (NGX_HTTP_LAST_2XX - 201)
317 #define NGX_HTTP_LAST_3XX 308
318 #define NGX_HTTP_OFF_4XX (NGX_HTTP_LAST_3XX - 301 + NGX_HTTP_OFF_3XX)
338 #define NGX_HTTP_LAST_4XX 417
339 #define NGX_HTTP_OFF_5XX (NGX_HTTP_LAST_4XX - 400 + NGX_HTTP_OFF_4XX)
357 #define NGX_HTTP_LAST_5XX 508
362 static ngx_str_t ngx_http_get_name = { 3, (u_char *)
"GET " };
373 "http special response: %d, \"%V?%V\"",
415 if (err_page[i].status == error) {
416 return ngx_http_send_error_page(r, &err_page[i]);
432 return ngx_http_send_refresh(r);
474 return ngx_http_send_special_response(r, clcf, err);
548 if (overwrite >= 0) {
556 if (uri.
data[0] ==
'/') {
562 args = err_page->
args;
573 if (uri.
data[0] ==
'@') {
579 if (location == NULL) {
593 location->
value = uri;
602 return ngx_http_send_refresh(r);
605 return ngx_http_send_special_response(r, clcf, r->
err_status
623 len =
sizeof(ngx_http_error_full_tail) - 1;
624 tail = ngx_http_error_full_tail;
627 len =
sizeof(ngx_http_error_tail) - 1;
628 tail = ngx_http_error_tail;
633 if (ngx_http_error_pages[err].len) {
641 sizeof(ngx_http_msie_padding) - 1;
668 if (ngx_http_error_pages[err].len == 0) {
678 b->
pos = ngx_http_error_pages[err].
data;
679 b->
last = ngx_http_error_pages[err].
data + ngx_http_error_pages[err].
len;
682 out[0].
next = &out[1];
692 b->
last = tail + len;
704 b->
pos = ngx_http_msie_padding;
705 b->
last = ngx_http_msie_padding +
sizeof(ngx_http_msie_padding) - 1;
707 out[1].
next = &out[2];
725 u_char *p, *location;
737 size =
sizeof(ngx_http_msie_refresh_head) - 1
739 +
sizeof(ngx_http_msie_refresh_tail) - 1;
773 sizeof(ngx_http_msie_refresh_head) - 1);
783 sizeof(ngx_http_msie_refresh_tail) - 1);