certbot: автоматизация TLS-сертификатов Let's Encrypt

Платный wildcard-сертификат или возня с CSR — избыточны для большинства сайтов. certbot сам получает сертификат Let’s Encrypt, вписывает его в конфиг nginx и настраивает автопродление: сертификаты живут 90 дней, продление обязано быть автоматическим. # выпуск + автонастройка nginx для домена sudo certbot certonly --nginx -d example.com -d www.example.com # автопродление настроено? (обычно systemd timer) systemctl list-timers | grep certbot # сухой прогон продления, без реального обновления sudo certbot renew --dry-run --nginx сам находит нужный server-блок. --standalone — если nginx ещё не поднят. renew --dry-run раз в квартал стоит гонять руками — чтобы не узнать о сломанном автопродлении в момент истечения сертификата. ...

25 июля 2026 г. · llexa

nginx: усиление TLS без танцев с бубном

Дефолтный nginx с сертификатом Let’s Encrypt работает, но A на SSL Labs не даст — разрешены старые протоколы и слабые шифры. Правится парой директив в server. ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5:!3DES; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=63072000" always; ssl_stapling on; # OCSP stapling — сервер сам ssl_stapling_verify on; # прикладывает статус сертификата После правки: nginx -t && systemctl reload nginx, проверка — ssl-labs.com/ssltest или openssl s_client -connect host:443 -status. HSTS с годовым max-age необратим: сломается TLS — браузеры откажутся ходить и по HTTP. Включать значение постепенно. ...

20 июля 2026 г. · llexa

nginx: map и geo — динамика без if

map и geo живут в http {} и вычисляются один раз на запрос — без if, без лишнего кода. geo $remote_addr $is_internal { default 0; 10.0.0.0/8 1; 192.168.0.0/16 1; } map $http_referer $bad_referer { default 0; ~*spam\.ru 1; } server { if ($bad_referer) { return 444; } if ($is_internal = 0) { return 403; } } geo — хэш по IP, без regex, очень быстро. map — regex по любому заголовку или переменной. Комбинируются свободно. #nginx #linux #sysadmin

29 июня 2026 г. · llexa

nginx upstream: балансировка и keepalive

Базовый upstream с тремя бэкендами и балансировкой по наименьшим соединениям: upstream backend { least_conn; server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003; keepalive 32; } server { location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } keepalive 32 — пул постоянных соединений к бэкендам. proxy_http_version 1.1 + Connection "" обязательны, иначе keepalive не работает. Алгоритмы: round_robin (дефолт), least_conn (меньше активных соединений), ip_hash (одна сессия — один бэкенд). Для ip_hash убрать least_conn. ...

26 июня 2026 г. · llexa

nginx: ограничение запросов (rate limiting)

limit_req в nginx режет частоту запросов прямо на уровне веб-сервера — без iptables и без отдельного WAF. http { # зона на 10 МБ, лимит — 10 запросов/сек на каждый IP limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; server { location /api/ { limit_req zone=api burst=20 nodelay; limit_req_status 429; proxy_pass http://backend; } } } burst=20 — разрешает кратковременный всплеск в 20 запросов сверх лимита, nodelay — не ставит их в очередь, а пропускает сразу или режет. Без nodelay лишние запросы притормозятся, а не отклонятся. ...

19 июня 2026 г. · llexa