1. The problem I’m having:
Just created an Ubuntu 22.04.3 instance on a VPS, hardened the server (as much as possible) to CIS standards and now trying to host several websites on it.
Just starting with one, www.gracefulart.co.uk, to make sure it works.
Using instructions from here: How to Run a WordPress Website on Caddy 2 - Tony Teaches Tech
Caddy and wordpress installed, and A record of domain updated.
After first just navigating to the IP address of the VPS (before updating the domain A record), I saw the Caddy welcome screen.
Now, after updating the A record, I get a 403 error in Chrome and a blank page in Firefox.
Suspected permissions issue, so here’s the ls -l
output of /var/www/wordpress
in case it’s helpful:
$ sudo ls -l /var/www/wordpress
total 228
-rwxr-s--- 1 www-data www-data 405 Feb 6 2020 index.php
-rwxr-s--- 1 www-data www-data 19915 Jan 1 2023 license.txt
-rwxr-s--- 1 www-data www-data 7399 Jul 5 18:41 readme.html
-rwxr-s--- 1 www-data www-data 7211 May 12 2023 wp-activate.php
drwxr-s--- 9 www-data www-data 4096 Dec 6 16:25 wp-admin
-rwxr-s--- 1 www-data www-data 351 Feb 6 2020 wp-blog-header.php
-rwxr-s--- 1 www-data www-data 2323 Jun 14 2023 wp-comments-post.php
-rwxr-s--- 1 www-data www-data 3013 Nov 15 17:47 wp-config-sample.php
drwxr-s--- 4 www-data www-data 4096 Dec 6 16:25 wp-content
-rwxr-s--- 1 www-data www-data 5638 May 30 2023 wp-cron.php
drwxr-s--- 27 www-data www-data 12288 Dec 6 16:25 wp-includes
-rwxr-s--- 1 www-data www-data 2502 Nov 26 2022 wp-links-opml.php
-rwxr-s--- 1 www-data www-data 3927 Jul 16 13:16 wp-load.php
-rwxr-s--- 1 www-data www-data 50924 Sep 29 23:01 wp-login.php
-rwxr-s--- 1 www-data www-data 8525 Sep 16 07:50 wp-mail.php
-rwxr-s--- 1 www-data www-data 26409 Oct 10 15:05 wp-settings.php
-rwxr-s--- 1 www-data www-data 34385 Jun 19 2023 wp-signup.php
-rwxr-s--- 1 www-data www-data 4885 Jun 22 2023 wp-trackback.php
-rwxr-s--- 1 www-data www-data 3154 Sep 30 08:39 xmlrpc.php
caddy
user is part of the www-data
group.
$ groups caddy
caddy : caddy www-data
2. Error messages and/or full log output:
Jan 01 18:41:39 vmi1581705.contaboserver.net systemd[1]: Starting Caddy...
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: caddy.HomeDir=/var/lib/caddy
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddy
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: caddy.AppConfigDir=/var/lib/caddy/.config/caddy
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.json
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: caddy.Version=v2.7.6 h1:w0NymbG2m9PcvKWsrXO6EEkY9Ru4FJK8uQbYcev1p3A=
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: runtime.GOOS=linux
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: runtime.GOARCH=amd64
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: runtime.Compiler=gc
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: runtime.NumCPU=4
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: runtime.GOMAXPROCS=4
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: runtime.Version=go1.21.5
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: os.Getwd=/
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: LANG=en_US.UTF-8
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: LANGUAGE=en_US:
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: NOTIFY_SOCKET=/run/systemd/notify
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: HOME=/var/lib/caddy
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: LOGNAME=caddy
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: USER=caddy
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: INVOCATION_ID=a3b30328291c492b9364450b8d00577d
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: JOURNAL_STREAM=8:45767
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: SYSTEMD_EXEC_PID=4614
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.5600162,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"warn","ts":1704134499.5621977,"msg":"Caddyfile input is not formatted; run 'caddy fmt --overwrite' to fix inconsistencies","adapter":"caddyfile","file":"/etc/caddy/Caddyfile","line":2}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.56356,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.563784,"logger":"http.auto_https","msg":"server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS","server_name":"srv0","https_port":443}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.5638072,"logger":"http.auto_https","msg":"enabling automatic HTTP->HTTPS redirects","server_name":"srv0"}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.5644543,"logger":"http","msg":"enabling HTTP/3 listener","addr":":443"}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.564719,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.5647614,"logger":"http.log","msg":"server running","name":"remaining_auto_https_redirects","protocols":["h1","h2","h3"]}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.564766,"logger":"http","msg":"enabling automatic TLS certificate management","domains":["gracefulart.co.uk","www.gracefulart.co.uk"]}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.5673108,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.5719066,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc0001ca780"}
Jan 01 18:41:39 vmi1581705.contaboserver.net systemd[1]: Started Caddy.
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.5753841,"msg":"serving initial configuration"}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"warn","ts":1704134499.5905743,"logger":"tls","msg":"storage cleaning happened too recently; skipping for now","storage":"FileStorage:/var/lib/caddy/.local/share/caddy","instance":"df421fba-957d-4eeb-8108-b808c4c06880","try_again":1704220899.5905685,"try_again_in":86399.999999028}
Jan 01 18:41:39 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704134499.590717,"logger":"tls","msg":"finished cleaning storage units"}
Jan 01 19:40:42 vmi1581705.contaboserver.net systemd[1]: Stopping Caddy...
Jan 01 19:40:42 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704138042.8809412,"msg":"shutting down apps, then terminating","signal":"SIGTERM"}
Jan 01 19:40:42 vmi1581705.contaboserver.net caddy[4614]: {"level":"warn","ts":1704138042.929542,"msg":"exiting; byeee!! 👋","signal":"SIGTERM"}
Jan 01 19:40:42 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704138042.9304695,"logger":"http","msg":"servers shutting down with eternal grace period"}
Jan 01 19:40:42 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704138042.9459906,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}
Jan 01 19:40:42 vmi1581705.contaboserver.net caddy[4614]: {"level":"info","ts":1704138042.946888,"msg":"shutdown complete","signal":"SIGTERM","exit_code":0}
Jan 01 19:40:42 vmi1581705.contaboserver.net systemd[1]: caddy.service: Deactivated successfully.
Jan 01 19:40:42 vmi1581705.contaboserver.net systemd[1]: Stopped Caddy.
Jan 01 19:40:42 vmi1581705.contaboserver.net systemd[1]: caddy.service: Consumed 1.114s CPU time.
Jan 01 19:40:42 vmi1581705.contaboserver.net systemd[1]: Starting Caddy...
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: caddy.HomeDir=/var/lib/caddy
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddy
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: caddy.AppConfigDir=/var/lib/caddy/.config/caddy
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.json
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: caddy.Version=v2.7.6 h1:w0NymbG2m9PcvKWsrXO6EEkY9Ru4FJK8uQbYcev1p3A=
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: runtime.GOOS=linux
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: runtime.GOARCH=amd64
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: runtime.Compiler=gc
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: runtime.NumCPU=4
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: runtime.GOMAXPROCS=4
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: runtime.Version=go1.21.5
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: os.Getwd=/
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: LANG=en_US.UTF-8
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: LANGUAGE=en_US:
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: NOTIFY_SOCKET=/run/systemd/notify
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: HOME=/var/lib/caddy
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: LOGNAME=caddy
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: USER=caddy
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: INVOCATION_ID=180ce6afbbd049adb2d7b2d01bea005b
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: JOURNAL_STREAM=8:62775
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: SYSTEMD_EXEC_PID=5825
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.5701268,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"warn","ts":1704138043.5839028,"msg":"Caddyfile input is not formatted; run 'caddy fmt --overwrite' to fix inconsistencies","adapter":"caddyfile","file":"/etc/caddy/Caddyfile","line":6}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.6006846,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.601876,"logger":"http.auto_https","msg":"server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS","server_name":"srv0","https_port":443}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.6023664,"logger":"http.auto_https","msg":"enabling automatic HTTP->HTTPS redirects","server_name":"srv0"}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.6043003,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc000094e00"}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"debug","ts":1704138043.6024942,"logger":"http.auto_https","msg":"adjusted config","tls":{"automation":{"policies":[{}]}},"http":{"servers":{"remaining_auto_https_redirects":{"listen":[":80"],"routes":[{},{}]},"srv0":{"listen":[":443"],"routes":[{"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"vars","root":"/var/www/wordpress"}]},{"group":"group0","handle":[{"handler":"rewrite","uri":"'/index.php'"}],"match":[{"path":["/xmlrpc.php","*.sql","/wp-content/uploads/*.php"]}]},{"handle":[{"encodings":{"gzip":{}},"handler":"encode","prefer":["gzip"]}]},{"handle":[{"handler":"static_response","headers":{"Location":["{http.request.orig_uri.path}/"]},"status_code":308}],"match":[{"file":{"try_files":["{http.request.uri.path}/index.php"]},"not":[{"path":["*/"]}]}]},{"handle":[{"handler":"rewrite","uri":"{http.matchers.file.relative}"}],"match":[{"file":{"split_path":[".php"],"try_files":["{http.request.uri.path}","{http.request.uri.path}/index.php","index.php"]}}]},{"handle":[{"handler":"reverse_proxy","transport":{"protocol":"fastcgi","split_path":[".php"]},"upstreams":[{"dial":"unix//run/php/php8.1-fpm.sock"}]}],"match":[{"path":["*.php"]}]},{"handle":[{"handler":"file_server","hide":["/etc/caddy/Caddyfile"]}]}]}],"terminal":true}],"tls_connection_policies":[{}],"automatic_https":{}}}}}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.606587,"logger":"http","msg":"enabling HTTP/3 listener","addr":":443"}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"debug","ts":1704138043.6209242,"logger":"http","msg":"starting server loop","address":"[::]:443","tls":true,"http3":true}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.620988,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"debug","ts":1704138043.6219501,"logger":"http","msg":"starting server loop","address":"[::]:80","tls":false,"http3":false}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.6219633,"logger":"http.log","msg":"server running","name":"remaining_auto_https_redirects","protocols":["h1","h2","h3"]}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.621969,"logger":"http","msg":"enabling automatic TLS certificate management","domains":["www.gracefulart.co.uk","gracefulart.co.uk"]}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"debug","ts":1704138043.642491,"logger":"tls","msg":"loading managed certificate","domain":"www.gracefulart.co.uk","expiration":1711903608,"issuer_key":"acme-v02.api.letsencrypt.org-directory","storage":"FileStorage:/var/lib/caddy/.local/share/caddy"}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"debug","ts":1704138043.6585515,"logger":"tls.cache","msg":"added certificate to cache","subjects":["www.gracefulart.co.uk"],"expiration":1711903608,"managed":true,"issuer_key":"acme-v02.api.letsencrypt.org-directory","hash":"b9217e8ee93850b12170699e5d508cb93ba253f887edfe0978c6c8f278190cb2","cache_size":1,"cache_capacity":10000}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"debug","ts":1704138043.6586661,"logger":"events","msg":"event","name":"cached_managed_cert","id":"014f035e-1965-47b9-b57c-e0b025db5574","origin":"tls","data":{"sans":["www.gracefulart.co.uk"]}}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"debug","ts":1704138043.6748135,"logger":"tls","msg":"loading managed certificate","domain":"gracefulart.co.uk","expiration":1711903369,"issuer_key":"acme-v02.api.letsencrypt.org-directory","storage":"FileStorage:/var/lib/caddy/.local/share/caddy"}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"debug","ts":1704138043.6767697,"logger":"tls.cache","msg":"added certificate to cache","subjects":["gracefulart.co.uk"],"expiration":1711903369,"managed":true,"issuer_key":"acme-v02.api.letsencrypt.org-directory","hash":"0e84a098a9fd4889353a9f3b8dd6183531d58d910f0a4532b1408c9028f98d4b","cache_size":2,"cache_capacity":10000}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"debug","ts":1704138043.6769211,"logger":"events","msg":"event","name":"cached_managed_cert","id":"44c32249-1a7e-4705-a185-39fcc754779d","origin":"tls","data":{"sans":["gracefulart.co.uk"]}}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.6799483,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Jan 01 19:40:43 vmi1581705.contaboserver.net systemd[1]: Started Caddy.
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.6816366,"msg":"serving initial configuration"}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"warn","ts":1704138043.7244453,"logger":"tls","msg":"storage cleaning happened too recently; skipping for now","storage":"FileStorage:/var/lib/caddy/.local/share/caddy","instance":"df421fba-957d-4eeb-8108-b808c4c06880","try_again":1704224443.7244358,"try_again_in":86399.999998548}
Jan 01 19:40:43 vmi1581705.contaboserver.net caddy[5825]: {"level":"info","ts":1704138043.724808,"logger":"tls","msg":"finished cleaning storage units"}
3. Caddy version:
v2.7.6 h1:w0NymbG2m9PcvKWsrXO6EEkY9Ru4FJK8uQbYcev1p3A=
4. How I installed and ran Caddy:
a. System environment:
Ubuntu 22.04.3. Running Caddy on bare metal.
b. Command:
sudo systemctl restart caddy
c. Service/unit/compose file:
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
d. My complete Caddy config:
{
debug
}
gracefulart.co.uk, www.gracefulart.co.uk {
root * /var/www/wordpress
php_fastcgi unix//run/php/php-fpm.sock
file_server
encode gzip
@disallowed {
path /xmlrpc.php
path *.sql
path /wp-content/uploads/*.php
}
rewrite @disallowed '/index.php'
}
Thanks in advance