Рейтинг:0

Использование обратного прокси Nginx в док-контейнере

флаг cn

Итак, пытаясь настроить Nginx в качестве обратного прокси-сервера с помощью докера. У меня есть три js-контейнера node (один интерфейс и две серверные службы), служба внешнего интерфейса вызывает две внутренние службы. Итак, я хочу, чтобы nginx перенаправлял на внешний интерфейс (который является веб-приложением), но каждый раз, когда я пытаюсь что-то отправить, я получаю ошибку 502 bad gateway. Когда я напрямую запускаю контейнеры докеров, я могу пропинговать другие контейнеры через dns_hostname или IP-адрес (который я беру из проверки докеров). Вот отредактированная версия моего docker-compose и моего nginx.conf

    версия: "3.8"
Сервисы:
  внешний интерфейс:
    изображение: интерфейс
    имя хоста: интерфейс
    env_file:
      /.env
    сети:
      - сеть
    перезапуск: при сбое
    разоблачать:
      - "3000"
    имя_контейнера: интерфейс
    серверная служба-01:
      изображение: бэкэнд-сервис-01
        имя хоста: бэкэнд-сервис-01
        env_file:
            ./бэкэнд-сервис-01/.env
        сети:
            - сеть
        перезапуск: при сбое
        имя_контейнера: бэкэнд-сервис-01
   серверная служба-02:
        изображение: бэкэнд-сервис-02
        имя хоста: бэкэнд-сервис-02
        env_file:
            ./бэкэнд-сервис-02/.env
        сети:
            - сеть
        перезапуск: при сбое
        имя_контейнера: бэкэнд-сервис-02
        
   nginx-прокси:
     изображение: nginx: стабильный-альпийский
     имя хоста: nginx-прокси
     сети:
       - сеть
     перезапуск: при сбое
        тома:
          - /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
          - /data/nginx/certs/crt_file.crt:/etc/nginx/crt_file.crt
          - /data/nginx/certs/priv_key.key:/etc/nginx/priv_key.key:ro
        порты:
            - 80:80
            - 443:443
        имя_контейнера: nginx-прокси
        зависит от: 
          - внешний интерфейс
          - бэкэнд-сервис-01
          - бэкэнд-сервис-02
сети:
    сеть:

Также вот файл конфигурации nginx, который я использую:

рабочие_процессы авто;
pid /run/nginx.pid;
включить /etc/nginx/modules-enabled/*.conf;

События {
        worker_connections 1024;
}

http {

  восходящий интерфейс {
    интерфейс сервера: 3000;
  }
    
  сервер {
        
        # Директива прослушивания на порту 443 (TLS)
        слушать 443 ssl; 
        слушать [::]:443 ssl;

        ssl_certificate /etc/nginx/crt_file.crt;
        ssl_certificate_key /etc/nginx/priv_key.key;

        # Где мы храним наши error.log и access.log
        журнал_ошибок /var/log/nginx/error.log;
        журнал_доступа /var/log/nginx/access.log;

        место расположения / {
            корень /usr/src/app/public/;
            proxy_pass https://frontend;
        }
  }
}

Я почти сделал все, чтобы исключить проблему с сетью, так как я могу пропинговать как IP-адрес, так и имя хоста докера внешнего интерфейса изнутри контейнера nginx (используя docker exec -it nginx-proxy sh). что попробовать дальше, или они могут ясно видеть, если я делаю что-то не так, это было бы очень признательно.

djdomi avatar
флаг za
1) ЛИБО `proxy_pass` 2) ИЛИ `root/path` 3) я бы предложил использовать IP, мне также не хватает `server_name`, а также `proxy_set_header Host $http_host;`
Рейтинг:0
флаг cn

Проблема решена. Проблема была не в Docker и не в Nginx. Проблема заключалась в том, что бывший разработчик пытался быть полезным, что в конечном итоге надрало нам задницу. Они создали перенаправление в своем коде, что, если кто-то попытается использовать протокол HTTP, он автоматически перенаправит на протокол HTTPS, как только мы закомментируем эту надоедливую пару строк кода и перестроим контейнер, сюрприз, сюрприз ... Nginx сделал то, что было. сказал. Извлеченный урок: заставьте Nginx выполнять перенаправление; не твой код.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.