Reverse proxy тамоми трафики вебро дар портҳои 80 ва 443 қабул мекунад ва ҳар дархостро ба барномаи дахлдор дар сервер мефиристад. Caddy интихоби хуб аст, зеро сертификатҳои HTTPS-ро худаш мегирад ва нав мекунад: барои ҳар сайт як сатр, масалан reverse_proxy localhost:3000, кифоя аст.
Ин дастур Caddy-ро дар Ubuntu 24.04 ё Debian 12 насб мекунад ва танзимотро қадам ба қадам месозад.
Чаро proxy-ро дар пеш гузоштан лозим аст
- Як нуқтаи воридшавӣ. Чанд барнома дар як сервер, ҳар кадом дар домен ё роҳи худ.
- HTTPS дар як ҷо. Барномаҳо дар localhost бо HTTP-и оддӣ кор мекунанд; Caddy TLS-ро идора мекунад.
- Бехатарӣ. Барномаҳо ҳеҷ гоҳ дар портҳои оммавӣ гӯш намекунанд. Шумо метавонед дар proxy сарлавҳаҳо, маҳдудияти суръат ё парол илова кунед.
- Чандирӣ. Барномаро ба порт ё сервери дигар интиқол диҳед ва танҳо як сатрро тағйир диҳед.
1. Шартҳои пешакӣ
- Сервере, ки дар он қадамҳои аввал иҷро шудаанд.
- Сабтҳои DNS барои ҳар домен, ки ба сервер ишора мекунанд (A барои IPv4, AAAA барои IPv6).
- Портҳои 80 ва 443 кушода:
sudo ufw allow 80,443/tcp
sudo ufw allow 443/udp # HTTP/3
Агар firewall-и абрӣ истифода баред, ҳамин портҳоро дар он ҳам кушоед.
2. Caddy-ро насб кунед
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
Баста Caddy-ро ҳамчун хидмати systemd бо танзимот дар /etc/caddy/Caddyfile иҷро мекунад.
3. Хурдтарин Caddyfile-и муфид
Фарз кунем, барнома дар localhost:3000 гӯш мекунад. Файлро бо ин иваз кунед:
app.example.com {
reverse_proxy localhost:3000
}
Санҷед ва аз нав бор кунед:
sudo caddy fmt --overwrite /etc/caddy/Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
Ҳангоми аввалин дархост Caddy сертификат мегирад, HTTP-ро ба HTTPS равона мекунад ва барномаро пешниҳод менамояд. Ҳамааш ҳамин.
4. Чанд барнома дар як сервер
Барои ҳар сайт як блок илова кунед:
app.example.com {
reverse_proxy localhost:3000
}
api.example.com {
reverse_proxy localhost:8080
}
status.example.com {
reverse_proxy localhost:3001
}
Ё як доменро аз рӯи роҳ тақсим кунед:
example.com {
handle_path /api/* {
reverse_proxy localhost:8080
}
handle {
root * /var/www/site
file_server
}
}
handle_path пеш аз фиристодан /api-ро хориҷ мекунад; агар backend префиксро интизор бошад, handle-ро истифода баред.
5. Танзимоти муфиди пешфарз бо snippet
Snippet-ҳо танзимоти такроршавандаро дар як ҷо нигоҳ медоранд:
(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
}
Феҳристи логҳоро як бор созед: sudo mkdir -p /var/log/caddy && sudo chown caddy:caddy /var/log/caddy.
6. Абзори админро бо парол муҳофизат кунед
Hash-и паролро тавлид кунед:
caddy hash-password
Онро дар блоки сайт истифода баред:
admin.example.com {
basic_auth {
alice <paste-hash-here>
}
reverse_proxy localhost:9000
}
Дар версияҳои кӯҳнаи Caddy ин директива basicauth навишта мешавад. Барои ҳар чизи ҳассос дастрасиро аз рӯи суроға низ маҳдуд кунед:
admin.example.com {
@outside not remote_ip 198.51.100.0/24
respond @outside 403
reverse_proxy localhost:9000
}
Ин доира намуна аст. Доираи офис ё VPN-и худро гузоред; бо дастури WireGuard ин метавонад зершабакаи VPN-и шумо бошад.
7. Proxy ба контейнерҳои Docker
Агар Caddy дар хост кор кунад, контейнерҳоро ба localhost бандед, то онҳо оммавӣ набошанд:
services:
app:
image: ghcr.io/example/app:1.0
ports:
- "127.0.0.1:3000:3000"
Агар Caddy дар Docker кор кунад, онро ба ҳамон лоиҳаи Compose гузоред ва ба номҳои хидматҳо proxy кунед (reverse_proxy app:3000). Дастури Docker Compose стеки пурраро нишон медиҳад.
8. Мувозинати сарборӣ байни чанд backend
Caddy метавонад дархостҳоро байни чанд нусхаи барнома, дар ҳамон сервер ё дар серверҳои дигар тавассути шабакаи хусусӣ, тақсим кунад:
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
}
}
Суроғаҳо намунаҳо дар доираи хусусӣ мебошанд. Вақте мехоҳед мувозинат берун аз серверҳои шумо бошад, мувозинаткунандаи сарбории идорашаванда ҳамин корро бо санҷишҳои саломатӣ иҷро мекунад ва метавонад ба серверҳое, ки IP-и оммавӣ надоранд, расад.
9. WebSocket-ҳо ва IP-ҳои воқеии мизоҷон
WebSocket-ҳо тавассути reverse_proxy бе танзимоти иловагӣ кор мекунанд. Caddy ба backend X-Forwarded-For, X-Forwarded-Proto ва X-Forwarded-Host-ро мефиристад; барномаи худро танзим кунед, ки ба онҳо танҳо аз 127.0.0.1 эътимод кунад.
Агар худи Caddy пушти proxy ё мувозинаткунандаи сарбории дигар бошад, ба он бигӯед, ки ба кадом суроғаҳо эътимод кунад:
{
servers {
trusted_proxies static 10.0.0.0/24
}
}
Ин блоки глобалӣ дар худи аввали Caddyfile ҷойгир мешавад.
10. Логҳо ва ҳалли мушкилот
journalctl -u caddy --since "10 min ago"
sudo tail -f /var/log/caddy/access.log
curl -I https://app.example.com
Мушкилоти маъмул:
| Мушкилот | Ҳал |
|---|---|
| Сертификат дода нашуд | DNS бояд ба ҳамин сервер ишора кунад; портҳои 80/443 дар UFW ва firewall-и абрӣ кушода бошанд |
502 Bad Gateway |
Backend кор намекунад ё дар порти дигар гӯш мекунад: ss -tlnp |
| Даври равонакунӣ | Барнома низ ба HTTPS равона мекунад; бигзор Caddy ин корро кунад ва ба X-Forwarded-Proto эътимод кунед |
| Тағйирот нодида гирифта мешаванд | systemctl reload caddy-ро иҷро кунед ва натиҷаи caddy validate-ро санҷед |
Додагони сертификат нокомиҳои такрориро аз рӯи суръат маҳдуд мекунанд, бинобар ин пеш аз кӯшишҳои зиёди такрорӣ DNS-ро ислоҳ кунед.
Равонакуниҳо ва доменҳои асосӣ
Аксари сайтҳо бояд бо як ном ҷавоб диҳанд ва дигаронро равона кунанд. www-ро ба домени асосӣ равона кунед:
www.example.com {
redir https://example.com{uri} permanent
}
example.com {
reverse_proxy localhost:3000
}
Caddy барои ҳарду ном сертификат мегирад. Агар www-ро ҳамчун суроғаи асосӣ авлотар донед, онҳоро ҷой иваз кунед.
Маҳдудияти суръат ва андозаи дархост
Caddy ядрои худро хурд нигоҳ медорад, бинобар ин барои маҳдудияти суръат плагин лозим аст. Барои аксари сайтҳои хурд Fail2ban дар логи дастрасӣ ё маҳдудият дар худи барнома кифоя аст. Маҳдуд кардани андозаи бадани дархост дарунсохт аст:
app.example.com {
request_body {
max_size 20MB
}
reverse_proxy localhost:3000
}
Ин боргириҳои аз ҳад калонро пеш аз расидан ба барномаи шумо қатъ мекунад.
Файлҳои статикӣ дар паҳлӯи барнома
Пешниҳоди файлҳо бевосита аз диск назар ба гузаронидани онҳо тавассути барнома тезтар аст:
app.example.com {
handle /static/* {
root * /var/www/app
file_server
header Cache-Control "public, max-age=604800"
}
handle {
reverse_proxy localhost:3000
}
}
11. Сертификатҳо дар куҷо нигоҳ дошта мешаванд
Caddy сертификатҳо ва калидҳоро дар /var/lib/caddy/.local/share/caddy нигоҳ медорад. Ин роҳро ба нусхаҳои эҳтиётӣ дохил кунед, то пас аз барқароркунӣ ҳама чизро аз нав гирифтан лозим нашавад, гарчанде ки агар он набошад, Caddy танҳо сертификатҳои нав мегирад.
Қадамҳои навбатӣ
Бо Caddy дар пеш шумо метавонед дар як сервер барномаҳои зиёд ҷойгир кунед. Қадамҳои маъмули навбатӣ: WordPress, стеки Docker ё абзори худҳостинг аз худҳостинг. Асосҳои бехатарӣ ва нусхаҳои эҳтиётӣ-ро фаромӯш накунед.
Саволҳои маъмул
Оё Caddy воқеан сертификатҳои HTTPS-ро худкор мегирад?
Бале. Вақте суроғаи сайт дар Caddyfile домени оммавӣ аст, ки ба сервер ишора мекунад, ва портҳои 80 ва 443 дастрасанд, Caddy сертификатҳоро аз маркази оммавии ACME худаш мегирад ва нав мекунад.
Оё Caddy барои муҳити корӣ ба қадри кофӣ тез аст?
Бале. Барои барномаҳои маъмулии веб reverse proxy хеле кам гулӯгоҳ мешавад ва Caddy аз аввал HTTP/2 ва HTTP/3-ро дастгирӣ мекунад.
Оё Caddy метавонад ба барномаҳо дар Docker proxy кунад?
Бале. Caddy-ро дар ҳамон шабакаи Compose иҷро кунед ва номҳои хидматҳоро истифода баред ё контейнерҳоро ба 127.0.0.1 баста, ба портҳои localhost proxy кунед.
Caddy ё Nginx?
Caddy танзимоти камтар талаб мекунад ва сертификатҳоро худаш идора мекунад. Nginx экосистемаи калонтари намунаҳо ва модулҳо дорад. Ҳардуяш интихоби боэътимоданд.
Чаро Caddy сертификат гирифта наметавонад?
Одатан DNS ҳанӯз ба сервер ишора намекунад ё порти 80 ё 443 аз ҷониби firewall баста шудааст. Ҳардуро санҷед, баъд ба journalctl -u caddy назар кунед.