From 49b7a3a8a1c61ff38fdf03f5b36c2763b8fc6cc5 Mon Sep 17 00:00:00 2001 From: BBaoVanC Date: Sat, 13 Nov 2021 00:46:20 -0600 Subject: [PATCH] Add Caddy webserver post --- .../caddy-browse.webp | Bin 0 -> 13264 bytes .../caddy-is-the-best-webserver/caddy.webp | Bin 0 -> 42760 bytes .../blog/caddy-is-the-best-webserver/index.md | 228 ++++++++++++++++++ 3 files changed, 228 insertions(+) create mode 100644 content/blog/caddy-is-the-best-webserver/caddy-browse.webp create mode 100644 content/blog/caddy-is-the-best-webserver/caddy.webp create mode 100644 content/blog/caddy-is-the-best-webserver/index.md diff --git a/content/blog/caddy-is-the-best-webserver/caddy-browse.webp b/content/blog/caddy-is-the-best-webserver/caddy-browse.webp new file mode 100644 index 0000000000000000000000000000000000000000..701e8e58f8d7d934c4c7ce002858089e1db67750 GIT binary patch literal 13264 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

uJ3Efujkl>3`7+oh3JK` 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 literal 0 HcmV?d00001 diff --git a/content/blog/caddy-is-the-best-webserver/caddy.webp b/content/blog/caddy-is-the-best-webserver/caddy.webp new file mode 100644 index 0000000000000000000000000000000000000000..ff0efd7da70ebf428c1e5dbca77549ca3a38613e GIT binary patch literal 42760 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


vL5WT^y7lrO>oGsLTKZVA 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 z(g~nk@&Et;00000000000000000000000000000000000000000000000000000z4 BQKJ9= literal 0 HcmV?d00001 diff --git a/content/blog/caddy-is-the-best-webserver/index.md b/content/blog/caddy-is-the-best-webserver/index.md new file mode 100644 index 0000000..a2bf34d --- /dev/null +++ b/content/blog/caddy-is-the-best-webserver/index.md @@ -0,0 +1,228 @@ +--- + +title: Caddy is literally the best webserver +date: 2021-11-13T00:43:35-06:00 +toc: true +comments: true + +authors: + - bbaovanc + +tags: + - linux + - webserver + - caddy + +resources: + - name: feature + src: caddy.webp + title: >- + Image source: + [Caddy](https://caddyserver.com/resources/images/caddy-logo.svg) + + - name: caddy-browse + src: caddy-browse.webp + title: >- + Caddy's gorgeous directory list page. + +--- + +After switching from NGINX to Caddy on all of my websites, I have come to the +conclusion that Caddy is the best webserver in existence. With automatic HTTPS, +a simple configuration file, and more, Caddy is just the best webserver overall +for general use. + + + +## Built-in automatic HTTPS + +Caddy can fetch certificates from Let's Encrypt and ZeroSSL out of the box. +HTTPS is enabled by default for eligible domains[^1], unless you explicitly tell +it not to. + +### Incredible cipher security + +Caddy has incredible defaults for TLS/SSL ciphers. Any site you host on Caddy +gets a perfect score from [Qualys SSL Labs](https://www.ssllabs.com/ssltest/) +out of the box.[^2] + +## Dead simple configuration files: Caddy vs NGINX + +Caddy's configuration file format is the easiest out of all the main webserver. +The best way for me to demonstrate this simplicity is to compare it to one of +the most popular webservers: [NGINX](https://www.nginx.com/). + +### Serving some static files + +The most essential feature you can use a webserver for. + +#### Caddy + +```caddyfile +example.com { + root * /var/www/example.com + file_server +} +``` + +#### NGINX + +```nginx +server { + listen 80; + server_name example.com; + index index.html index.txt; + root /var/www/example.com; + location / { + try_files $uri $uri/ =404; + } +} +``` + +As you can see, the Caddy config is a lot simpler than the NGINX one. But wait, +there's more! This NGINX config is unencrypted HTTP only, but the Caddy one will +automatically request a certificate from Let's Encrypt, enable HTTPS, and even +redirect unencrypted HTTP to HTTPS. + +From now on, for the sake of simplicity, I'll be ignoring HTTPS for the NGINX +configs. + +### PHP (PrivateBin) + +The Caddy config for this example is the same as the [one used for +bin.boba.best](https://git.boba.best/configs/caddy/src/commit/cd00151fbdd784979a8a181980cc36061be68c7d/conf.d/bin.boba.best). +I've stripped it down a bit by removing the [custom error +pages](https://git.boba.best/configs/caddy/src/commit/cd00151fbdd784979a8a181980cc36061be68c7d/Caddyfile#L15-L24), +[HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security), [zstd +compression](https://github.com/facebook/zstd), and logging. + +#### Caddy + +```caddyfile +bin.boba.best { + encode gzip + + root * /var/www/bin.boba.best + php_fastcgi unix//run/php/php-fpm.sock + file_server +} +``` + +#### NGINX + +```nginx +server { + listen 80; + server_name bin.boba.best; + index index.html index.txt index.php; + root /var/www/bin.boba.best; + gzip on; + + location / { + try_files $uri $uri/ =404; + } + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/run/php/php-fpm.sock; + } +} +``` + +### Reverse proxy + static files (Gitea) + +This last example is based on +[git.bbaovanc.com](https://git.bbaovanc.com/configs/caddy/src/commit/57c9f0011eae92ef5fa2992d99f01b0956802d64/conf.d/git.bbaovanc.com). +Just like the last example, I've stripped off the custom error pages, HSTS, zstd +compression, and logging. + +#### Caddy + +```caddyfile +git.bbaovanc.com { + encode gzip + + handle_path /_/static/assets/* { + root * /var/www/git.bbaovanc.com/public + file_server + } + + handle { + reverse_proxy localhost:81 { + header_up X-Real-IP {remote_host} + } + } +} +``` + +#### NGINX + +```nginx +server { + listen 80; + server_name git.bbaovanc.com; + gzip on; + + location /_/static/assets { + alias /var/www/git.bbaovanc.com/public/; + } + + location / { + proxy_pass http://localhost:81; + proxy_set_header X-Real-IP $remote_addr; + } +``` + +Although in this case the NGINX config was slightly shorter, I find the Caddy +one a lot more clear and easy to understand. With NGINX, I find it weird how +adding a trailing slash or not defines whether the prefix (`/_/static/assets` in +this case) is stripped before searching the filesystem. In Caddy, you can use +the `handle_path` directive, instead of just a regular `handle` directive. + +You can read more about how `handle` and `handle_path` work in Caddy on the +[Caddy docs](https://caddyserver.com/docs/caddyfile/directives/handle). + +## The smaller details + +These features might not matter to you, but this is my blog, and I care about +them, so I'll be including them. + +### Go templates + +Caddy is written in Go and supports [Go +templates](https://pkg.go.dev/text/template). This means you can make simple +dynamic content while only using Caddy! + +In fact, the [official Caddy website](https://caddyserver.com) is generated +entirely using Caddy's and Go templates![^3] + +#### Error pages using HTTP Cats + +I use [this +snippet](https://git.bbaovanc.com/configs/caddy/src/commit/57c9f0011eae92ef5fa2992d99f01b0956802d64/Caddyfile#L8-L15) +on both bbaovanc.com and boba.best to make custom error pages using images from +[HTTP Cats](https://http.cat). It uses Caddy's template support to generate some +simple HTML to show the error code, name, and cat image. + +### Beautiful autoindex file browser + +Apache and NGINX both have an optional "autoindex" feature which generates a +list of files in a directory when there's no page there. However, it looks very +ugly. Caddy, on the other hand, still has a simple index page, but looks a +thousand times better. + +Coincidentally, it matches the theme of my website very well, so I have to put a +border around the image. + +{{< figure src="caddy-browse" >}} + + +[^1]: The rules for what domains have automatic HTTPS by default are + [here](https://caddyserver.com/docs/automatic-https#hostname-requirements) + +[^2]: SSL Labs caps the score to an A if HSTS isn't enabled. After enabling it, + then you get a perfect A+ score. See + https://www.ssllabs.com/ssltest/analyze.html?d=bbaovanc.com&latest + ([archived](https://archive.today/4JJDN)) for an example (bbaovanc.com). + +[^3]: See more info [on the Caddy docs](https://caddyserver.com/docs/caddyfile/directives/templates#examples)