Как я могу настроить nginx, чтобы просто доставить все, что он находит по настроенному URL - PullRequest
0 голосов
/ 24 февраля 2020

Я запускаю nginx обратный прокси в docker -compose. Первый docker составной файл выглядит следующим образом:

version: "3.5"
services:
  rproxy:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports: 
      - 80:80
      - 443:443
    volumes:
      - '/etc/letsencrypt:/etc/letsencrypt'
    networks:
      - main
networks:
  main:
    name: main_network

Dockerfile просто гарантирует, что сервер nginx имеет следующую конфигурацию:

server {
    listen 443 ssl;
    server_name website.dev;
    ssl_certificate /etc/letsencrypt/live/www.website.dev/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.website.dev/privkey.pem;

    location / {
        resolver 127.0.0.11;
        set $frontend http://website;
        proxy_pass $frontend;
    }
}

Сначала я запускаю следующее docker -составить файл. Затем, когда я пытаюсь получить доступ к www.website.dev, я получаю 502 ошибку , как и ожидалось .

Затем я запускаю этот другой docker -компонентный файл, определенный ниже:

version: '3.5'
services:
  website:
    image: registry.website.dev/frontendcontainer:latest
    command: npm run deploy
    networks:
      main:
        aliases: 
          - website
networks:
  main:
    external:
      name: main_network

Это должно запустить контейнер веб-сайта в той же сети, что и контейнер nginx. «docker ps» показывает, что контейнер docker работает. переход на сайт website.dev выдает ошибку 502. Это неожиданно. Я ожидаю, что Nginx теперь сможет подключиться к работающему в настоящее время контейнеру docker.

Я сбросил сервер nginx, выполнив следующее на первом docker -компонентный файл:

docker-compose up -d

При переходе на website.dev теперь отображается содержимое контейнера веб-сайта.

Вносить изменения в контейнер веб-сайта и загружать новый контейнер docker в личный контейнер. Я использую следующие команды для второго файла docker -compose:

docker-compose down

Старый контейнер веб-сайта больше не существует.

docker-compose pull

Новый контейнер веб-сайта извлечен.

docker-compose up

Новый контейнер веб-сайта теперь в сети.

При переходе на website.dev теперь отображается содержимое старого (подтвержденного как несуществующего) контейнера вместо нового контейнера. Это неожиданно

Сброс сервера nginx приведет к тому, что он теперь доставит правильный веб-сайт.

Мой вопрос: как мне настроить nginx на доставить все, что он найдет по настроенному URL, без необходимости сбрасывать сервер nginx?

dockerfile по запросу:

FROM nginx:alpine

RUN rm /etc/nginx/conf.d/*

COPY proxy.conf /etc/nginx/conf.d

1 Ответ

0 голосов
/ 26 февраля 2020

мы получили все параметры.

Используя angular -cli и скомпилируем код с ng-build, это приводит к сохранению c файлов, вам не нужно обслуживать их с прокси дорожка. Вам нужно только указать местоположение для папки с помощью index.html, и все будет работать в одиночку без http-server

NGinx:

server {
    listen 443 ssl default_server;
    server_name website.dev _ default_server;
    ssl_certificate /etc/letsencrypt/live/www.website.dev/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.website.dev/privkey.pem;

    location / {
        root /path/to/dist/website; # where ng build put index.html with all .js and assets
        index index.htm index.html;
    }
}

docker -составить NGinx :

version: "3.5"
services:
  rproxy:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
      - 443:443
    volumes:
      - '/etc/letsencrypt:/etc/letsencrypt'
      - '/host/path/shared:/path/to' # <-- Add this line. (host: /host/path/shared)
    networks:
      - main
networks:
  main:
    name: main_network

docker -создать веб-сайт:

version: '3.5'
services:
    website:
    image: registry.website.dev/frontendcontainer:latest
    command: npm run deploy
    volumes:
      - '/host/path/shared:/path/to' # <-- Add this line. (host: /host/path/shared)
    networks:
      main:
        aliases:
          - website
networks:
    main:
    external:
      name: main_network

Теперь ng build --prod создаст индекс. html и активы в /host/path/shared/dist/website (внутренне: /path/to/dist/website) .

Тогда NGinx будет иметь доступ к этим файлам внутри на /path/to/dist/website, без использования http-server. Angular является клиентом внешнего интерфейса, его не нужно запускать в производственном режиме

...