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