Wolkra

Oppaat

Caddy käänteiseksi välityspalvelimeksi

Määritä Caddy käänteiseksi välityspalvelimeksi Ubuntulla tai Debianilla: automaattinen HTTPS, useita sovelluksia yhdellä palvelimella, perustodennus, kuormantasaus ja oikeita Caddyfile-esimerkkejä.

Päivitetty 4 min lukuaika

Käänteinen välityspalvelin vastaanottaa kaiken verkkoliikenteen porteissa 80 ja 443 ja välittää jokaisen pyynnön palvelimen oikealle sovellukselle. Caddy on hyvä valinta, koska se hankkii ja uusii HTTPS-varmenteet itse: yksi rivi, kuten reverse_proxy localhost:3000, sivustoa kohden riittää.

Tämä opas asentaa Caddyn Ubuntu 24.04:lle tai Debian 12:lle ja rakentaa määritykset vaihe vaiheelta.

Miksi välityspalvelin kannattaa laittaa eteen

  • Yksi sisääntulopiste. Useita sovelluksia yhdellä palvelimella, kukin omalla verkkotunnuksellaan tai polullaan.
  • HTTPS yhdessä paikassa. Sovellukset puhuvat tavallista HTTP:tä localhostissa; Caddy hoitaa TLS:n.
  • Tietoturva. Sovellukset eivät koskaan kuuntele julkisissa porteissa. Voit lisätä välityspalvelimessa otsakkeita, nopeusrajoituksia tai salasanan.
  • Joustavuus. Siirrä sovellus toiseen porttiin tai palvelimeen ja muuta yksi rivi.

1. Esivaatimukset

  • Palvelin, jolle on tehty ensimmäiset askeleet.
  • Jokaisen verkkotunnuksen DNS-tietueet osoittavat palvelimeen (A IPv4:lle, AAAA IPv6:lle).
  • Portit 80 ja 443 avoinna:
bash
sudo ufw allow 80,443/tcp
sudo ufw allow 443/udp     # HTTP/3

Avaa samat portit myös pilvipalomuurissasi, jos käytät sellaista.

2. Caddyn asennus

bash
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | \
  sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | \
  sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
systemctl status caddy

Paketti ajaa Caddya systemd-palveluna, ja asetukset ovat tiedostossa /etc/caddy/Caddyfile.

3. Pienin hyödyllinen Caddyfile

Oletetaan, että sovellus kuuntelee osoitteessa localhost:3000. Korvaa tiedoston sisältö tällä:

text
app.example.com {
    reverse_proxy localhost:3000
}

Tarkista ja lataa uudelleen:

bash
sudo caddy fmt --overwrite /etc/caddy/Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

Ensimmäisellä pyynnöllä Caddy hankkii varmenteen, ohjaa HTTP:n HTTPS:ään ja palvelee sovellusta. Siinä kaikki.

4. Useita sovelluksia yhdellä palvelimella

Lisää lohko jokaiselle sivustolle:

text
app.example.com {
    reverse_proxy localhost:3000
}

api.example.com {
    reverse_proxy localhost:8080
}

status.example.com {
    reverse_proxy localhost:3001
}

Tai jaa yksi verkkotunnus polun mukaan:

text
example.com {
    handle_path /api/* {
        reverse_proxy localhost:8080
    }
    handle {
        root * /var/www/site
        file_server
    }
}

handle_path poistaa etuliitteen /api ennen välitystä; käytä handle-direktiiviä, jos taustapalvelu odottaa etuliitettä.

5. Hyödylliset oletukset snippetillä

Snippetit pitävät toistuvat asetukset yhdessä paikassa:

text
(common) {
    encode zstd gzip
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
        X-Content-Type-Options "nosniff"
        Referrer-Policy "strict-origin-when-cross-origin"
        -Server
    }
    log {
        output file /var/log/caddy/access.log {
            roll_size 50MiB
            roll_keep 5
        }
    }
}

app.example.com {
    import common
    reverse_proxy localhost:3000
}

Luo lokihakemisto kerran: sudo mkdir -p /var/log/caddy && sudo chown caddy:caddy /var/log/caddy.

6. Ylläpitotyökalun suojaus salasanalla

Luo salasanatiiviste:

bash
caddy hash-password

Käytä sitä sivustolohkossa:

text
admin.example.com {
    basic_auth {
        alice <paste-hash-here>
    }
    reverse_proxy localhost:9000
}

Vanhemmissa Caddyn versioissa direktiivi kirjoitetaan basicauth. Kaikessa arkaluonteisessa rajaa pääsy lisäksi osoitteen mukaan:

text
admin.example.com {
    @outside not remote_ip 198.51.100.0/24
    respond @outside 403
    reverse_proxy localhost:9000
}

Alue on esimerkki. Laita siihen toimistosi tai VPN:si alue; WireGuard-oppaan mukaisessa ratkaisussa se voisi olla VPN-aliverkkosi.

7. Välitys Docker-kontteihin

Jos Caddy toimii isäntäkoneella, sido kontit localhostiin, jotta ne eivät ole julkisia:

yaml
services:
  app:
    image: ghcr.io/example/app:1.0
    ports:
      - "127.0.0.1:3000:3000"

Jos Caddy toimii Dockerissa, laita se samaan Compose-projektiin ja välitä palvelujen nimiin (reverse_proxy app:3000). Docker Compose -opas näyttää kokonaisen kokonaisuuden.

8. Kuormantasaus useille taustapalveluille

Caddy voi jakaa pyynnöt usealle sovellusinstanssille samalla palvelimella tai muilla palvelimilla yksityisverkon kautta:

text
app.example.com {
    reverse_proxy 10.0.0.11:3000 10.0.0.12:3000 {
        lb_policy least_conn
        health_uri /healthz
        health_interval 10s
    }
}

Osoitteet ovat esimerkkejä yksityiseltä alueelta. Kun haluat kuormantasauksen palvelintesi ulkopuolelle, hallinnoitu kuormantasaaja tekee saman työn terveystarkistuksin ja tavoittaa palvelimet, joilla ei ole julkista IP-osoitetta.

9. WebSocketit ja asiakkaiden oikeat IP-osoitteet

WebSocketit toimivat reverse_proxyn kautta ilman lisäasetuksia. Caddy lähettää taustapalvelulle otsakkeet X-Forwarded-For, X-Forwarded-Proto ja X-Forwarded-Host; määritä sovelluksesi luottamaan niihin vain osoitteesta 127.0.0.1.

Jos Caddy itse on toisen välityspalvelimen tai kuormantasaajan takana, kerro sille, mihin osoitteisiin luottaa:

text
{
    servers {
        trusted_proxies static 10.0.0.0/24
    }
}

Tämä globaali lohko tulee Caddyfilen aivan alkuun.

10. Lokit ja vianetsintä

bash
journalctl -u caddy --since "10 min ago"
sudo tail -f /var/log/caddy/access.log
curl -I https://app.example.com

Yleisiä ongelmia:

Ongelma Ratkaisu
Varmennetta ei myönnetä DNS:n täytyy osoittaa tähän palvelimeen; portit 80/443 avoinna UFW:ssä ja pilvipalomuurissa
502 Bad Gateway Taustapalvelu ei ole käynnissä tai kuuntelee toisessa portissa: ss -tlnp
Uudelleenohjaussilmukka Myös sovellus ohjaa HTTPS:ään; anna Caddyn hoitaa se ja luota otsakkeeseen X-Forwarded-Proto
Muutokset eivät näy Aja systemctl reload caddy ja tarkista caddy validate -komennon tuloste

Varmentajat rajoittavat toistuvia epäonnistumisia, joten korjaa DNS ennen kuin yrität monta kertaa uudelleen.

Uudelleenohjaukset ja ensisijainen verkkotunnus

Useimpien sivustojen kannattaa vastata yhdellä nimellä ja ohjata muut siihen. Ohjaa www paljaaseen verkkotunnukseen:

text
www.example.com {
    redir https://example.com{uri} permanent
}

example.com {
    reverse_proxy localhost:3000
}

Caddy hankkii varmenteet molemmille nimille. Vaihda ne päittäin, jos haluat www:n pääosoitteeksi.

Nopeusrajoitus ja pyynnön koko

Caddy pitää ytimensä pienenä, joten nopeusrajoitus vaatii lisäosan. Useimmille pienille sivustoille riittää Fail2ban pääsylokissa tai rajoitus sovelluksessa. Pyynnön rungon koon rajoitus on sisäänrakennettu:

text
app.example.com {
    request_body {
        max_size 20MB
    }
    reverse_proxy localhost:3000
}

Tämä pysäyttää liian suuret lataukset ennen kuin ne saavuttavat sovelluksesi.

Staattiset tiedostot sovelluksen rinnalla

Tiedostojen jakaminen suoraan levyltä on nopeampaa kuin niiden kierrättäminen sovelluksen kautta:

text
app.example.com {
    handle /static/* {
        root * /var/www/app
        file_server
        header Cache-Control "public, max-age=604800"
    }
    handle {
        reverse_proxy localhost:3000
    }
}

11. Missä varmenteet ovat

Caddy tallentaa varmenteet ja avaimet hakemistoon /var/lib/caddy/.local/share/caddy. Sisällytä tämä polku varmuuskopioihin, jotta kaikkea ei tarvitse myöntää uudelleen palautuksen jälkeen; jos hakemisto puuttuu, Caddy yksinkertaisesti hankkii uudet varmenteet.

Seuraavat askeleet

Kun Caddy on edessä, voit isännöidä monta sovellusta yhdellä palvelimella. Tyypillisiä seuraavia askelia ovat WordPress, Docker-kokonaisuus tai itse isännöity työkalu self-hosting-sivulta. Älä unohda tietoturvan perusteita ja varmuuskopioita.

Usein kysytyt kysymykset

Hankkiiko Caddy todella HTTPS-varmenteet automaattisesti?

Kyllä. Kun Caddyfilen sivustoosoite on julkinen verkkotunnus, joka osoittaa palvelimeen, ja portit 80 ja 443 ovat tavoitettavissa, Caddy hankkii ja uusii varmenteet julkiselta ACME-varmentajalta itsenäisesti.

Onko Caddy riittävän nopea tuotantoon?

Kyllä. Tyypillisissä verkkosovelluksissa käänteinen välityspalvelin on harvoin pullonkaula, ja Caddy tukee HTTP/2:ta ja HTTP/3:a suoraan.

Voiko Caddy välittää Dockerissa ajettaviin sovelluksiin?

Kyllä. Aja Caddya samassa Compose-verkossa ja käytä palvelujen nimiä, tai sido kontit osoitteeseen 127.0.0.1 ja välitä localhostin portteihin.

Caddy vai Nginx?

Caddy vaatii vähemmän määrityksiä ja hoitaa varmenteet itse. Nginxillä on laajempi esimerkkien ja moduulien ekosysteemi. Molemmat ovat vankkoja valintoja.

Miksi Caddy ei saa varmennetta?

Yleensä DNS ei vielä osoita palvelimeen tai palomuuri estää portin 80 tai 443. Tarkista molemmat ja katso sitten journalctl -u caddy.

Käynnistä palvelin Frankfurtissa

Luo tili, lataa saldoa ja aja palvelinta alkaen €3.49 kuukaudessa. Maksat vain käyttämistäsi tunneista. Mittaamaton kaistanleveys kaikissa paketeissa.