Docker для Nginx: запуск веб-сервера в контейнере - Компьюти
Logo КОМПЬЮТИ

Docker для Nginx: запуск веб-сервера в контейнере

Время на прочтение: 2 мин.

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;
  • маршрутизацию;
  • часть механизмов безопасности.

Читайте также:


Читайте также:

Приглашаем поучаствовать в обсуждении статьи:

Комментариев 0