Nginx — один из самых распространенных веб-серверов и reverse proxy. В Docker его удобно использовать как отдельный контейнер перед приложением.
Типовая архитектура:
Internet
|
Nginx
|
Application
Если есть база данных:
Nginx
|
Application
/ \
PostgreSQL Redis
Быстрый запуск Nginx
docker run -d \
--name nginx \
-p 8080:80 \
nginx:alpine
Проверить:
docker ps
Открыть:
http://localhost:8080
Nginx через Compose
services:
nginx:
image: nginx:alpine
ports:
- "8080:80"
restart: unless-stopped
Запуск:
docker compose up -d
Собственная конфигурация
Создадим:
nginx/
└── nginx.conf
Подключаем:
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
Ключ :ro означает read-only mount.
Nginx как reverse proxy
Допустим, приложение работает на сервисе app:
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
depends_on:
- app
app:
image: my-app
В конфигурации Nginx upstream может обращаться к:
app:8080
Поскольку сервисы находятся в общей Docker-сети.
Подробнее — в статье «Docker networks».
Статический сайт
Можно подключить каталог:
services:
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./site:/usr/share/nginx/html:ro
Теперь Nginx будет отдавать файлы из ./site.
Dockerfile для Nginx
Можно создать собственный образ:
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY site /usr/share/nginx/html
Собрать:
docker build -t my-nginx .
Nginx и PHP
Для PHP обычно используется отдельный PHP-FPM контейнер:
Nginx
|
PHP-FPM
Nginx принимает HTTP-запрос и передает PHP-запрос PHP-FPM.
Это позволяет разделить компоненты.
Nginx и WordPress
Для WordPress может использоваться:
Internet
|
Nginx
|
WordPress/PHP
|
MariaDB
Подробнее — в статье «Docker для WordPress».
HTTPS
В production Nginx часто отвечает за TLS.
Необходимо настроить:
- сертификат;
- приватный ключ;
- перенаправление HTTP → HTTPS;
- безопасные TLS-настройки;
- автоматическое обновление сертификата.
Конкретная схема зависит от инфраструктуры.
Логи Nginx
Посмотреть:
docker logs nginx
Или:
docker compose logs -f nginx
При диагностике полезны access и error logs.
Подробнее — в статье «Docker logs».
Restart policy
Для reverse proxy обычно полезна:
restart: unless-stopped
Она помогает автоматически поднять контейнер после сбоя.
Подробнее — в статье «Docker restart policy».
Nginx и volumes
Конфигурацию можно подключить через bind mount:
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
Статические файлы:
volumes:
- ./site:/usr/share/nginx/html:ro
Важно не давать контейнеру права на запись, если они ему не нужны.
Типичные ошибки
Неправильный upstream
В Docker нужно использовать имя сервиса, а не localhost.
Конфигурация не загружается
Проверить:
docker exec nginx nginx -t
Порт занят
Если 80 порт хоста уже используется, можно временно:
ports:
- "8080:80"
Нет HTTPS
Для production-сайта необходимо настроить защищенное соединение.
Итог
Nginx хорошо сочетается с Docker и часто используется как reverse proxy перед приложением.
Он может отвечать за:
- HTTP;
- HTTPS;
- статику;
- reverse proxy;
- маршрутизацию;
- часть механизмов безопасности.
Читайте также:


