Как в Docker на одном IP-адресе разместить несколько сайтов?

Ребята, помогите пожалуйста. Как правильно построить конфигурацию в Docker для размещения нескольких сайтов на одном IP? Помимо всевозможных других портов, разумеется интересуют именно 80 и 443. Понимаю, что у адреса и порта может быть только один слушатель, но всё же, неужели это считается невозможным?

Использую nginx. Самое близкое что по теме что нашел ‒ jwilder/nginx-proxy, меня это и должно интересовать либо есть другие варианты? Разобраться с этим пакетом не удаётся, возможно будут какие-то рабочие примеры?

Большущее спасибо!))
  • Вопрос задан
  • 4773 просмотра
Решения вопроса 1
Поднять ещё один контейнер nginx как единую точку входа, слушающую внешние порты 80 и 443.
В зависимости от домена прокси на тот или иной внутренний ip контейнера-сайта.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
fdroid
@fdroid
press any key
Можно докер-контейнеры с сайтами стартовать на разных портах. Например, выделить контейнеру порт 81 как-то так:
docker run -d -p 81:80 testcont.site
То есть, сайт будет локально доступен по serverip:81
А в nginx сделать проксирование на контейнер:
server {
    listen 80;
    server_name testcont.site;
    access_log /var/log/nginx/testcont.site-access.log;
    error_log /var/log/nginx/testcont.site-error.log;

location / {
    proxy_pass http://127.0.0.1:81;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    }
}

Таким образом, при переходе на tescont.site, nginx переадресует запрос на внутренний контейнер 127.0.0.1:81.
Https проще всего настроить через Certbot, который сам получит сертификаты и настроит передаресацию с http на https в конфигах сайтов.

Разумеется, порты 80 и 443 должны быть открыты на сервере, этого достаточно.
Ответ написан
Комментировать
intelligence
@intelligence
Можно посмотреть в сторону https://traefik.io/ как edge прокси для всех проектов. Он будет слушать 80\443 порт и автоматически детектить новые сервисы если добавлять соответствующие лейблы при старте контейнеров. Там есть и автополучение let's encrypt и куча плюшек.
Но стоит учитывать что это чистый реверс прокси, накрутить туда фичи из nginx не особо получится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы