linux-labs

Вики / Службы и systemd

nginx

Сервис Ubuntu 24.04 · nginx 1.24 СлужбыСетьВеб

Веб-сервер и обратный прокси. Конфиг проверяется nginx -t; reload без даунтайма.

nginx — высокопроизводительный веб-сервер и обратный прокси. Один master-процесс и несколько worker'ов. Управляется systemd (systemctl).

запрос → nginx (:80/:443) → отдать статику ИЛИ proxy_pass → апстрим (app:8000)

Золотое правило: меняешь конфиг — сначала nginx -t, потом reload.

Расположение:

  • /etc/nginx/nginx.conf — главный конфиг;
  • /etc/nginx/sites-available/ — сайты (конфиги);
  • /etc/nginx/sites-enabled/ — симлинки на включённые сайты.

Минимальный сайт-прокси:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Включить сайт и применить:

sudo ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
nginx -t                          # проверка конфигурации (файл + строка ошибки!)
nginx -T                          # вывести весь итоговый конфиг
systemctl reload nginx            # применить без обрыва соединений
systemctl restart nginx           # полный перезапуск
ss -tlnp | grep nginx             # на каких портах слушает
tail -f /var/log/nginx/error.log  # ошибки
tail -f /var/log/nginx/access.log # запросы

nginx -t ругается на синтаксис

Чаще всего — потерянная ; в директиве. nginx -t называет файл и строку — открой и почини. 🧪 Потренировать: задание fix-nginx.

Служба не стартует, порт занят

ss -tlnp | grep :80 — кто держит порт. Часто второй nginx/apache. Останови конфликтующий или смени listen.

502 Bad Gateway

nginx не достучался до апстрима. Проверь: апстрим жив (curl localhost:8000), верный proxy_pass (схема http vs https!), journalctl -xeu nginx, /var/log/nginx/error.log.

403 Forbidden / 404 на статику

Права на файлы/каталоги (ls -l, nginx читает от www-data), верный root/alias.

nginx -t                          # проверить конфиг ПЕРЕД reload
systemctl reload nginx            # применить без даунтайма
ss -tlnp | grep nginx             # порты
tail -f /var/log/nginx/error.log  # ошибки

См. также