Обратный прокси-сервер Nginx (в Docker) к веб-приложению (также в Docker) - PullRequest
0 голосов
/ 09 мая 2019

Я установил веб-приложение в Docker, которое в настоящее время работает внутри хоста по адресу 172.19.0.3:8888. Я хочу, чтобы это веб-приложение было доступно через Интернет через порт 443 (https), а запросы на порт 80 (HTTP) перенаправлены на 443.

Я планирую использовать обратный прокси-сервер Nginx в док-контейнере для достижения этой цели, но я не знаю, как правильно настроить его так, чтобы он указывал на док-контейнер 172.19.0.3:8888. Доступ http://172.19.0.3:8888 с хоста работает.

Вот руководство, которому я пытался следовать, но оно просто не показало, как конкретно указать на контейнер докера.

https://medium.com/@pentacent/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71

Примечание

Если я установлю порт 443 proxy_pass в http://example.org,, это сработает. Таким образом, конфигурации Cert работают правильно.

Веб-приложение

Запуск 172.19.0.3:8888 внутри хоста

docker-compose для Nginx и Certbot

Мои сертификаты возвращаются чистыми.

version: '3'
services:
  nginx:
    image: nginx:1.15-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Volumes/nginx:/etc/nginx/conf.d
      - ./Volumes/certbot/conf:/etc/letsencrypt
      - ./Volumes/certbot/www:/var/www/certbot
  certbot:
    image: certbot/certbot
    volumes:
      - ./Volumes/certbot/conf:/etc/letsencrypt
      - ./Volumes/certbot/www:/var/www/certbot

Nginx app.conf

server {
    listen 80;
    server_name forums.example.com;

    location /.well-known/acme-challenge/ {
    root /var/www/certbot;
}

    location / {
       return 301 https://$host$request_uri;
    }    
}

server {
    listen 443 ssl;
    server_name forums.example.com;

    ssl_certificate /etc/letsencrypt/live/forums.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/forums.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://172.19.0.3:8888/;
    }
}

Веб-приложение

  flarum:
    image: mondedie/docker-flarum:0.1.0-beta.8.1-stable
    container_name: flarum
    env_file:
      - ./flarum.env
    volumes:
      - ./Volumes/assets:/flarum/app/public/assets
      - ./Volumes/extensions:/flarum/app/extensions
      - ./Volumes/nginx:/etc/nginx/conf.d
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:10.2
    container_name: mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=flarum
      - MYSQL_USER=flarum
      - MYSQL_PASSWORD=password
    volumes:
      - ./Volumes/mysql/db:/var/lib/mysql

1 Ответ

0 голосов
/ 09 мая 2019

Docker Compose создает отдельную сеть для файла docker-compose.yaml.

Таким образом, вы можете добавить свое веб-приложение в качестве службы (например, веб-приложение) в текущий файл композиции.А в nginx.conf прямо указывают на ваш сервис.Вместо использования IP вы можете использовать имя службы в качестве DNS, которое будет разрешено Docker для той же сети.

 location / {
        proxy_pass http://webapp:8888/;
    }
...