Обратный прокси-сервер Nginx и путь к нему - PullRequest
0 голосов
/ 30 декабря 2018

Здравствуйте, я новичок в мире Docker, поэтому я попробовал установку с обратным прокси-сервером NGINX (образ jwilder) и приложением Docker.Я установил оба без SSL, чтобы сделать это легко.Поскольку приложение Docker, похоже, установлено в корневом пути, я хочу разделить веб-сервер NGINX и приложение Docker.

upstream example.com {
        server 172.29.12.2:4040;
}
server {
 server_name example.com;
 listen 80 ;
 access_log /var/log/nginx/access.log vhost;

 location / {
  proxy_pass http://example.com;
  root /usr/share/nginx/html;
  index index.html index.htm;
  }
 location /app {
  proxy_pass http://example.com:4040;
  }
}

Поэтому я хочу, чтобы с http://example.com было перенаправлено на индекс.html и с http://example.com/app перенаправляются в приложение Docker.

Кроме того, при сборке установки я использую в docker-compose expose: «4040», поэтому при перезагрузке файла конфигурации NGINX с nginx -s reload,он предупреждает меня, что у меня не открыт порт 4040.

Файл конфигурации, который я разместил выше любого пути, ведет меня к приложению Docker.

Я не могу найти простое решение для своеговопрос.

1 Ответ

0 голосов
/ 30 декабря 2018

Насколько я понял, ваша логика верна, докер предназначен для запуска одного сервиса для одного контейнера;для достижения вашей цели у вас еще есть несколько вещей, о которых нужно позаботиться, если EXPOSE 4040 был объявлен в вашем файле Docker, этого недостаточно для обеспечения доступности службы.в файле docker-compose вы должны также объявить порты, IE для nginx вы позволяете хост-системе прослушивать все интерфейсы, добавив

...
ports:
  - 80:80
...

, и это первое, о чем вы также должны подуматькаким образом вы хотите, чтобы ваш прокси достиг «приложения» из контейнерной сети на том же узле?Если да, вы можете добавить в файл composer:

...
depends_on:
  - app
...

, где app - это объявленное имя вашей службы в файле docker-compose, например, этот nginx может получить доступ к вашему приложению с именем app, так что редирект будетукажите на приложение:

location /app {
    proxy_pass http://app:4040;
}

Если вы хотите получить доступ к «приложению» через хост-сеть, возможно, из-за того, что один день будет работать на другом хосте, вы можете добавить запись в файл hosts контейнера run nginxс:

...
extra_hosts:
  - "app:10.10.10.10"
  - "appb:10.10.10.11"
...

и т. д.

Ссылка: https://docs.docker.com/compose/compose-file/


изменить 01/01/2019 !!!!!с новым годом !!

пример использования "огромного" файла составления Docker:

version: '3'

services:
  app:
    build: "./app" # in case you docker file is in a app dir
    image: "some image name"
    restart: always
    command: "command to start your app"
  nginx:
    build: "./nginx" # in case you docker file is in a nginx dir
    image: "some image name"
    restart: always
    ports:
      - "80:80"
      - "443:443"
    depends_on:
     - app

В приведенном выше примере nginx может связаться с вашим приложением только с именем "app", поэтому перенаправление будетукажите на http://app:4040

systemctl (начните напрямую с docker - без компоновки)

[Unit]
Description=app dockerized service
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=/usr/bin/sleep 1
ExecStartPre=/usr/bin/docker pull mariadb:10.4
ExecStart=/usr/bin/docker run --restart=always --name=app -p 4040:4040 python:3.6-alpine # or your own builded image
ExecStop=/usr/bin/docker stop app
ExecStopPost=/usr/bin/docker rm -f app
ExecReload=/usr/bin/docker restart app
[Install]
WantedBy=multi-user.target

, как в приведенном выше примере, вы можете получить доступ к приложению через порт 4040 на системном хосте (который находится в режиме прослушивания соединения через порт 4040 всеми интерфейсами) для предоставления определенного интерфейса: -p 10.10.10.10:4040:4040, как это будет прослушивать порт 4040 по адресу 10.10.10.10 (хост-машина)

docker-compose с extra_host:

version: '3'

services:
  app:
    build: "./app" # in case you docker file is in a app dir
    image: "some image name"
    restart: always
    command: "command to start your app"
  nginx:
    build: "./nginx" # in case you docker file is in a nginx dir
    image: "some image name"
    restart: always
    ports:
      - "80:80"
      - "443:443"
    extra_hosts:
     - "app:10.10.10.10"

, как и в приведенном выше примере, служба, определенная nginx, может достичь приложения имени в 10.10.10.10

, но не в последнюю очередь, расширяет службу насоставьте файл:

docker-compose.yml:

version: '2.1'

services:
  app:
    extends:
      file: /path/to/app-service.yml
      service: app
  nginx:
    extends: /path/to/nginx-service.yml
    service: nginx

app-service.yml:

version: "2.1"

service:
  app:
    build: "./app" # in case you docker file is in a app dir
    image: "some image name"
    restart: always
    command: "command to start your app"

nginx-service.yml

version: "2.1"

service:
  nginx:
    build: "./nginx" # in case you docker file is in a nginx dir
    image: "some image name"
    restart: always
    ports:
      - "80:80"
      - "443:443"
    extra_hosts:
     - "app:10.10.10.10"

очень надеюсь, что приведенное выше достаточно примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...