Nginx

Практичні нотатки про роботу з Nginx у реальних проєктах: налаштування вебсервера та reverse proxy, HTTPS і SSL/TLS-сертифікатів, redirects, routing, headers і production-конфігурації. Тут я збираю проблеми, з якими стикалася на практиці, їх діагностику та рішення.

155-upstream-failures-nginx-https-default-server-investigation.png
Nginx

155 помилок 503, але production працював: як HTTPS default server змінив розслідування

Під час розслідування сплеску трафіку 155 upstream errors спочатку виглядали як проблема доступності основного застосунку. Але error log показав інше: запити потрапляли в окремий virtual host через поведінку HTTPS default server. Це змінило і діагноз, і захист.

42
740-requests-in-three-minutes-hardening-nginx-without-blocking-real-readers.png
Nginx

740 запитів за три хвилини: як я посилила захист Nginx без блокування реальних читачів

Після нового сплеску трафіку я не стала одразу блокувати країну, User-Agent або IP. Спочатку звірила Laravel Analytics з Nginx logs, відокремила кілька незалежних джерел трафіку, перевірила роботу Fail2ban і лише потім додала Nginx rate limiting у dry-run режимі.

51
the-first-night-after-enabling-icanup-protection-nginx-fail2ban-logs-cover.png
Nginx

Перша ніч після налаштування захисту ICanUp: що показали реальні журнали Nginx і Fail2ban

Після налаштування блокування сканерів я залишила ICanUp працювати на ніч і вранці перевірила реальні журнали. Захист спрацював, Fail2ban заблокував реальні адреси, а аналіз одночасно показав прогалину на DEV для вкладених чутливих шляхів.

84
how-i-protected-laravel-from-sensitive-path-scanners-with-nginx-and-fail2ban-cover.png
Nginx

Як я захистила Laravel від сканерів чутливих шляхів за допомогою Nginx і Fail2ban

Після розслідування автоматизованого сканування я винесла захист чутливих шляхів перед Laravel. Nginx одразу повертає 403, окремий журнал фіксує небезпечну спробу, Fail2ban читає цей журнал, а nftables тимчасово блокує джерело на HTTP і HTTPS.

115
fake-googlebot-laravel-server-3300-requests-cover.png
Nginx

Фейковий Googlebot зробив 3300 запитів до мого Laravel-сервера: як я розслідувала це через журнали Nginx

16 вересня 2026 року власна аналітика ICanUp показала різкий розрив між звичайними та дедуплікованими переглядами. Перевірка журналів Nginx привела до сканера, який маскувався під Googlebot і перебрав тисячі шляхів до .env, облікових даних та конфігурацій. У статті показую команди розслідування і чому сам факт сканування ще не означає витік.

212
nginx-trusted-headers-laravel-x-header-spoofing-cover.png
Nginx

Nginx і довірені X-* заголовки: коли Laravel може їм довіряти, а коли клієнт може їх підробити

HTTP-заголовок не стає довіреним лише через назву X-*. У ICanUp це стало важливо під час передавання країни відвідувача з Nginx у Laravel: клієнт може надіслати такий самий заголовок самостійно. Розбираю, де повинна проходити межа довіри, чому Nginx має перезаписувати значення і коли Laravel справді може використовувати внутрішній заголовок як надійне джерело.

176
geoip-analytics-without-storing-ip-addresses-cover.png
Nginx

GeoIP-аналітика без збереження IP: Nginx + MaxMind і довірений заголовок

Для статистики ICanUp мені була потрібна країна відвідувача, але я не хотіла зберігати його IP-адресу або викликати зовнішній GeoIP API на кожен перегляд. Я перенесла визначення країни на рівень Nginx і MaxMind, а Laravel отримує лише нормалізований дволітерний код через довірений внутрішній заголовок.

190
sectigo-ssl-nginx-dcv-renewal-debugging.png
Nginx

Як я продовжувала Sectigo SSL у Nginx і знайшла проблему з DCV

Під час продовження Sectigo SSL сертифікат довго залишався на DCV validation, хоча verification-файл повертав 200 OK. Розповідаю, як я знайшла старий token, розділені HTTP/HTTPS validation paths у Nginx і правильно завершила renewal.

222