mirror of
https://github.com/mjl-/mox.git
synced 2025-07-10 10:34:40 +03:00
improve webserver, add domain redirects (aliases), add tests and admin page ui to manage the config
- make builtin http handlers serve on specific domains, such as for mta-sts, so e.g. /.well-known/mta-sts.txt isn't served on all domains. - add logging of a few more fields in access logging. - small tweaks/bug fixes in webserver request handling. - add config option for redirecting entire domains to another (common enough). - split httpserver metric into two: one for duration until writing header (i.e. performance of server), another for duration until full response is sent to client (i.e. performance as perceived by users). - add admin ui, a new page for managing the configs. after making changes and hitting "save", the changes take effect immediately. the page itself doesn't look very well-designed (many input fields, makes it look messy). i have an idea to improve it (explained in admin.html as todo) by making the layout look just like the config file. not urgent though. i've already changed my websites/webapps over. the idea of adding a webserver is to take away a (the) reason for folks to want to complicate their mox setup by running an other webserver on the same machine. i think the current webserver implementation can already serve most common use cases. with a few more tweaks (feedback needed!) we should be able to get to 95% of the use cases. the reverse proxy can take care of the remaining 5%. nevertheless, a next step is still to change the quickstart to make it easier for folks to run with an existing webserver, with existing tls certs/keys. that's how this relates to issue #5.
This commit is contained in:
19
main.go
19
main.go
@ -766,14 +766,20 @@ var examples = []struct {
|
||||
{
|
||||
"webhandlers",
|
||||
func() string {
|
||||
const webhandlers = `# Snippet of domains.conf to configure WebHandlers.
|
||||
const webhandlers = `# Snippet of domains.conf to configure WebDomainRedirects and WebHandlers.
|
||||
|
||||
# Redirect all requests for mox.example to https://www.mox.example.
|
||||
WebDomainRedirects:
|
||||
mox.example: www.mox.example
|
||||
|
||||
# Each request is matched against these handlers until one matches and serves it.
|
||||
WebHandlers:
|
||||
-
|
||||
# The name of the handler, used in logging and metrics.
|
||||
LogName: staticmjl
|
||||
# With ACME configured, each configured domain will automatically get a TLS
|
||||
# certificate on first request.
|
||||
Domain: mox.example
|
||||
Domain: www.mox.example
|
||||
PathRegexp: ^/who/mjl/
|
||||
WebStatic:
|
||||
StripPrefix: /who/mjl
|
||||
@ -786,7 +792,7 @@ WebHandlers:
|
||||
X-Mox: hi
|
||||
-
|
||||
LogName: redir
|
||||
Domain: mox.example
|
||||
Domain: www.mox.example
|
||||
PathRegexp: ^/redir/a/b/c
|
||||
# Don't redirect from plain HTTP to HTTPS.
|
||||
DontRedirectPlainHTTP: true
|
||||
@ -799,7 +805,7 @@ WebHandlers:
|
||||
StatusCode: 307
|
||||
-
|
||||
LogName: oldnew
|
||||
Domain: mox.example
|
||||
Domain: www.mox.example
|
||||
PathRegexp: ^/old/
|
||||
WebRedirect:
|
||||
# Replace path, leaving rest of URL intact.
|
||||
@ -807,7 +813,7 @@ WebHandlers:
|
||||
ReplacePath: /new/$1
|
||||
-
|
||||
LogName: app
|
||||
Domain: mox.example
|
||||
Domain: www.mox.example
|
||||
PathRegexp: ^/app/
|
||||
WebForward:
|
||||
# Strip the path matched by PathRegexp before forwarding the request. So original
|
||||
@ -826,7 +832,8 @@ WebHandlers:
|
||||
// Parse just so we know we have the syntax right.
|
||||
// todo: ideally we would have a complete config file and parse it fully.
|
||||
var conf struct {
|
||||
WebHandlers []config.WebHandler
|
||||
WebDomainRedirects map[string]string
|
||||
WebHandlers []config.WebHandler
|
||||
}
|
||||
err := sconf.Parse(strings.NewReader(webhandlers), &conf)
|
||||
xcheckf(err, "parsing webhandlers example")
|
||||
|
Reference in New Issue
Block a user