Browse Source
After reading a question about the `handle_response` feature of `reverse_proxy`, I realized that we didn't have a way of serving an arbitrary file with a status code other than 200. This is an issue in situations where you want to serve a custom error page in routes that are not errors, like the aforementioned `handle_response`, where you may want to retain the status code returned by the proxy but write a response with content from a file. This feature is super simple, basically if a status code is configured (can be a status code number, or a placeholder string) then that status will be written out before serving the file - if we write the status code first, then the stdlib won't write its own (only the first HTTP status header wins).master
committed by
GitHub
3 changed files with 140 additions and 0 deletions
@ -0,0 +1,112 @@ |
|||||
|
localhost |
||||
|
|
||||
|
root * /srv |
||||
|
|
||||
|
handle /nope* { |
||||
|
file_server { |
||||
|
status 403 |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
handle /custom-status* { |
||||
|
file_server { |
||||
|
status {env.CUSTOM_STATUS} |
||||
|
} |
||||
|
} |
||||
|
---------- |
||||
|
{ |
||||
|
"apps": { |
||||
|
"http": { |
||||
|
"servers": { |
||||
|
"srv0": { |
||||
|
"listen": [ |
||||
|
":443" |
||||
|
], |
||||
|
"routes": [ |
||||
|
{ |
||||
|
"match": [ |
||||
|
{ |
||||
|
"host": [ |
||||
|
"localhost" |
||||
|
] |
||||
|
} |
||||
|
], |
||||
|
"handle": [ |
||||
|
{ |
||||
|
"handler": "subroute", |
||||
|
"routes": [ |
||||
|
{ |
||||
|
"handle": [ |
||||
|
{ |
||||
|
"handler": "vars", |
||||
|
"root": "/srv" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
{ |
||||
|
"group": "group2", |
||||
|
"handle": [ |
||||
|
{ |
||||
|
"handler": "subroute", |
||||
|
"routes": [ |
||||
|
{ |
||||
|
"handle": [ |
||||
|
{ |
||||
|
"handler": "file_server", |
||||
|
"hide": [ |
||||
|
"./Caddyfile" |
||||
|
], |
||||
|
"status_code": "{env.CUSTOM_STATUS}" |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
], |
||||
|
"match": [ |
||||
|
{ |
||||
|
"path": [ |
||||
|
"/custom-status*" |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
{ |
||||
|
"group": "group2", |
||||
|
"handle": [ |
||||
|
{ |
||||
|
"handler": "subroute", |
||||
|
"routes": [ |
||||
|
{ |
||||
|
"handle": [ |
||||
|
{ |
||||
|
"handler": "file_server", |
||||
|
"hide": [ |
||||
|
"./Caddyfile" |
||||
|
], |
||||
|
"status_code": 403 |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
], |
||||
|
"match": [ |
||||
|
{ |
||||
|
"path": [ |
||||
|
"/nope*" |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
], |
||||
|
"terminal": true |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue