Caddy (tīmekļa serveris)

***Caddy*** ir paplašināms, starpplatformu, atvērtā pirmkoda tīmekļa serveris, kas rakstīts *[[Go (programmēšanas valoda)|Go]]* programmēšanas valodā.

*Caddy* pamatā ir paplašināma platforma pakalpojumu izvietošanai, izmantojot vienotu konfigurāciju, ko var atjaunināt tiešsaistē ar REST API. *Caddy* oficiālajā versijā iekļauti standarta moduļi, kas nodrošina HTTP serveri, TLS automatizāciju un PKI funkcijas. *Caddy* zināms galvenokārt ar automātiskās HTTPS funkcionalitāti.

## Arhitektūra
*Caddy* organizēts trīs galvenajās komponentēs: komandrinda, kodola bibliotēka un konfigurācijas moduļi. Komandrinda ir paplašināma saskarne programmas izpildei — tā ļauj ielādēt konfigurācijas datnes, palaist dažādus režīmus un pārvaldīt spraudņus. Kodola bibliotēkai ir API konfigurācijas ielādēšanai, izlādēšanai un pārvaldīšanai, taču pati par sevi tā nedara neko īpaši noderīgu.

Lielāko daļu *Caddy* funkcionalitātes nodrošina moduļi — spraudņi, kas paplašina *Caddy* konfigurācijas struktūru. Piemēram, HTTP serveris ir modulis. *Caddy* moduļi nodrošina dažādus pakalpojumus, tīmekļa standartus un citas funkcijas.

*Caddy* ievade ir JSON konfigurācijas dokuments, ko saņem caur RESTful HTTP API. Ja nav pieejams HTTP klients, konfigurācijas datņu ielādēšanai var izmantot *Caddy* komandrindas saskarni. Konfigurācijas adapteri ļauj konvertēt citus konfigurācijas formātus uz JSON. Esošie adapteri ietver *Caddyfile* (ko komandrinda pilnībā atbalsta), kā arī YAML, TOML, *[[nginx]]* un vairākus citus formātus.

Spraudņi tiek instalēti, tos statiski kompilējot tieši *Caddy* binārajā failā. Bez spraudņiem *Caddy* pamata konfigurācija piedāvā tikai administrēšanas un žurnalēšanas opcijas. Visu pārējo funkcionalitāti nodrošina moduļi. *Caddy* oficiālajā versijā pieejami desmitiem standarta moduļu; citus var pievienot no projekta vietnes, izmantojot `xcaddy` komandrindas rīku vai manuāli kompilējot pielāgotu versiju.

## HTTP serveris
HTTP serveris ir viens no standarta moduļiem, kas iekļauts *Caddy* oficiālajā versijā. To galvenokārt izmanto kā statisku datņu serveri un slodzes līdzsvarojošu reverso starpniekserveri. Lai gan *Caddy* HTTP pamatfunkcijas izmanto *Go* standarta bibliotēkas realizāciju, daudzi uzlabojumi un pielāgojumi ir pieejami kā starpprogrammatūra un konfigurējami ar parametriem.

### Automātiskais HTTPS
Pēc noklusējuma TLS tiek lietots automātiski, ja konfigurācijā norādīts domēna vārds vai IP adrese. *Caddy* automātiski iegūst un atjauno sertifikātus visiem konfigurētajiem resursdatoriem. Kad automātiskais HTTPS ir aktivizēts šādā veidā, *Caddy* arī pārvirza HTTP pieprasījumus uz atbilstošo HTTPS atrašanās vietu.

Lai automātiski iegūtu TLS sertifikātus, *Caddy* realizē ACME protokolu, kas ļauj tam sazināties ar tādiem pakalpojumiem kā *[[Let's Encrypt]]*.

## Izstrāde
*Caddy* izstrāde *[[Git]]* repozitorijā sākās 2014. gadā.

*Caddy* versiju 1.0 izlaida . Tajā brīdī projektam bija vairāk nekā 250 līdzautoru.

*Caddy* versiju 2 izlaida . *Ars Technica* recenzenti atzīmē, ka *Caddy* konfigurācija joprojām ir vienkāršāka nekā *[[Apache HTTP Server|Apache]]*, lai gan 2. versija nav savietojama ar iepriekšējo.

### Jaunākās versijas
*Caddy* versijā 2.10, kas izlaista 2025. gada aprīlī, pievienoja pilnībā automatizētu *Encrypted ClientHello* (ECH) atbalstu, pēckvantuma atslēgu apmaiņu (x25519mlkem768) un ACME profilu atbalstu, kas ļauj iegūt sertifikātus ar īsāku derīguma termiņu.

 izlaida *Caddy* 2.11.0-beta.2, kas iezīmēja nozīmīgu pagrieziena punktu — tā bija pirmā versija, ko izveidoja ar jaunu, automatizētu laidienu procesu. Šī versija ietver ECH atslēgu rotācijas iespējas, uzlabotu žurnalēšanu un *Windows* pakalpojumu statusa paziņojumus.

## Salīdzinājums ar citiem serveriem
Salīdzinājumā ar *[[nginx]]* un *[[Apache HTTP serveris|Apache]]*, *Caddy* izceļas ar automātisko HTTPS un vienkāršāku konfigurāciju, taču var būt nedaudz lēnāks augstas noslodzes scenārijos. *Caddy* ir īpaši piemērots personīgām vietnēm, API vārtejām un mikropakalpojumu arhitektūrām, kur būtiska ir lietošanas vienkāršība un moderno protokolu atbalsts.

## Atvasinātie projekti
* *CoreDNS* — *Cloud Native Computing Foundation* projekts, kas balstīts uz *Caddy* arhitektūru.

## Atsauces

## Ārējās saites

* 
* Caddy vietnē *[[GitHub]]*