Caddy: Difference between revisions

From NixOS Wiki
imported>Montchr
fix code block formatting resulting in invalid rendered html entities
imported>Malteneuss
m Make structure of examples consistent
Line 30: Line 30:


<syntaxhighlight lang="nix>
<syntaxhighlight lang="nix>
caddy = {
services.caddy = {
   enable = true;
   enable = true;
   virtualHosts."example.org".extraConfig = ''
   virtualHosts."example.org".extraConfig = ''
Line 50: Line 50:


<syntaxhighlight lang="nix>
<syntaxhighlight lang="nix>
caddy = {
services.caddy = {
   enable = true;
   enable = true;
   virtualHosts."example.org".extraConfig = ''
   virtualHosts."example.org".extraConfig = ''
Line 63: Line 63:


<syntaxhighlight lang="nix>
<syntaxhighlight lang="nix>
caddy.virtualHosts."example.org" = {
services.caddy = {
  extraConfig = ''
  enable = true;
    redir https://www.example.org
  virtualHosts."example.org" = {
   '';
    extraConfig = ''
  serverAlias = [ "old.example.org" ];
      redir https://www.example.org
   ' ';
    serverAlias = [ "old.example.org" ];
};
};
</syntaxhighlight>
</syntaxhighlight>

Revision as of 08:33, 8 July 2023

Caddy is a HTTP/2 capable web server with automatic HTTPS.

Installation

The example snippet below will run Caddy on http://localhost and serving an example.html page.

services.caddy = {
  enable = true;
  extraConfig = ''
    http://localhost {
      encode gzip
      file_server
      root * ${
        pkgs.runCommand "testdir" {} ''
          mkdir "$out"
          echo hello world > "$out/example.html"
        ''
      }
    }
  '';
};

Configuration examples

SSL

Caddy will automatically try to acquire SSL certificates for the specified domain, in this example example.org. This requires you to configure the DNS records of your domain correctly, which should point to the address of your Caddy server. The firewall ports 80 and 443 needs to be opened.

services.caddy = {
  enable = true;
  virtualHosts."example.org".extraConfig = ''
    encode gzip
    file_server
    root * ${
      pkgs.runCommand "testdir" {} ''
        mkdir "$out"
        echo hello world > "$out/example.html"
      ''
    }
  '';
};

Reverse proxy

The following snippet creates a reverse proxy for the domain example.org, redirecting all requests to http://10.25.40.6

services.caddy = {
  enable = true;
  virtualHosts."example.org".extraConfig = ''
    reverse_proxy http://10.25.40.6
  '';
};

Redirect

Redirecting example.org and old.example.org to www.example.org

services.caddy = {
  enable = true;
  virtualHosts."example.org" = {
    extraConfig = ''
      redir https://www.example.org
  '  ';
    serverAlias = [ "old.example.org" ];
};

PHP FastCGI

Serving a PHP application in /var/www on http://localhost .

services.caddy = {
  enable = true;
  virtualHosts."http://localhost" = {
    extraConfig = ''
      root    * /var/www
      file_server
      php_fastcgi unix/var/run/phpfpm/localhost.sock
    '';
  };
};

You'll need a PHP-FPM socket listening on Unix socket path /var/run/phpfpm/localhost.sock.

See also