httpcaddyfile: Reorder some directives (#4311)

We realized we made some mistakes with the directive ordering, so we're making some minor adjustments.

`abort` and `error` don't really make sense to be after other handler directives, because you would expect to be able to "fail-fast" and throw an error before falling through to some `file_server` or `respond` typically. So we're moving them up to just before `respond`, i.e. before the common handler directives. 

This is also more consistent with our existing examples in the docs, which actually didn't work due to the directive ordering. See https://caddyserver.com/docs/caddyfile/directives/error#examples

Also, `push` doesn't quite make sense to be after `handle`/`route`, since its job is to read from response headers to push additional resources if necessary, and `handle`/`route` may be terminal so push would not be reached if it was declared outside those. And also, it would make sense to be _before_ `templates` because a template _could_ add a `Link` header to the response dynamically.
This commit is contained in:
Francis Lavoie 2021-08-26 16:31:55 -04:00 committed by GitHub
parent f6d5ec2fd6
commit 403732c433
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 142 additions and 4 deletions

View file

@ -44,9 +44,9 @@ var directiveOrder = []string{
"request_body", "request_body",
"redir", "redir",
"rewrite",
// URI manipulation // URI manipulation
"rewrite",
"uri", "uri",
"try_files", "try_files",
@ -54,23 +54,23 @@ var directiveOrder = []string{
"basicauth", "basicauth",
"request_header", "request_header",
"encode", "encode",
"push",
"templates", "templates",
// special routing & dispatching directives // special routing & dispatching directives
"handle", "handle",
"handle_path", "handle_path",
"route", "route",
"push",
// handlers that typically respond to requests // handlers that typically respond to requests
"abort",
"error",
"respond", "respond",
"metrics", "metrics",
"reverse_proxy", "reverse_proxy",
"php_fastcgi", "php_fastcgi",
"file_server", "file_server",
"acme_server", "acme_server",
"abort",
"error",
} }
// directiveIsOrdered returns true if dir is // directiveIsOrdered returns true if dir is

View file

@ -0,0 +1,138 @@
example.com {
root * /srv
# Trigger errors for certain paths
error /private* "Unauthorized" 403
error /hidden* "Not found" 404
# Handle the error by serving an HTML page
handle_errors {
rewrite * /{http.error.status_code}.html
file_server
}
file_server
}
----------
{
"apps": {
"http": {
"servers": {
"srv0": {
"listen": [
":443"
],
"routes": [
{
"match": [
{
"host": [
"example.com"
]
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"handler": "vars",
"root": "/srv"
}
]
},
{
"handle": [
{
"error": "Unauthorized",
"handler": "error",
"status_code": 403
}
],
"match": [
{
"path": [
"/private*"
]
}
]
},
{
"handle": [
{
"error": "Not found",
"handler": "error",
"status_code": 404
}
],
"match": [
{
"path": [
"/hidden*"
]
}
]
},
{
"handle": [
{
"handler": "file_server",
"hide": [
"./Caddyfile"
]
}
]
}
]
}
],
"terminal": true
}
],
"errors": {
"routes": [
{
"match": [
{
"host": [
"example.com"
]
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"group": "group0",
"handle": [
{
"handler": "rewrite",
"uri": "/{http.error.status_code}.html"
}
]
},
{
"handle": [
{
"handler": "file_server",
"hide": [
"./Caddyfile"
]
}
]
}
]
}
],
"terminal": true
}
]
}
}
}
}
}
}