Как правильно реализовать обратный прокси NGINX с несколькими docker контейнерами - PullRequest
0 голосов
/ 26 марта 2020


Некоторое время go Я пытался настроить обратный прокси в NGINX, который может взаимодействовать с несколькими docker контейнерами, расположенными на сервере с разными портами. К сожалению, у меня было много проблем с nginx.conf, так как он неправильно перенаправляет изображения.

Далее я оставляю конфигурацию nginx:

events {
  worker_connections  1024;  ## Default: 1024
}
http {
  upstream front {
    server web:4000; 
  }

  upstream identity {
    server identity:4100;
  }

  upstream reaction {
    server api:3000;
  }

  upstream admin {
    server reaction-admin:4080;
  }

  upstream hydra {
    server hydra:4444;
  }

  server {
          listen 80;
          listen [::]:80;
          server_name my-domain.cl;

        location / {
           proxy_pass http://front/;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection 'upgrade';
           proxy_set_header Host $host;
           proxy_cache_bypass $http_upgrade;
         }

          location /front/ {
           proxy_pass http://front/;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection 'upgrade';
           proxy_set_header Host $host;
           proxy_cache_bypass $http_upgrade;
           proxy_set_header Host $host;
        }
  }
}


Каждый из заявленных апстримов содержит изображение, которое работает безупречно индивидуально, все эти контейнеры работают под общим сеть (в том числе от nginx).
Контейнер Dockefile из nginx следующий:

FROM nginx:stable-alpine
RUN rm /etc/nginx/nginx.conf
COPY ./nginx/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80/tcp
EXPOSE 443/tcp
CMD ["/bin/sh", "-c", "exec nginx -g 'daemon off;';"]

Это выполняется с sudo docker run -d -p 80:80 -p 443:443 --network=sharednetwork --name reaction_nginx_1 reaction_nginx.

Основная проблема заключается в том, что для работы контейнера необходимо добавить два местоположения в nginx .conf (как вы можете видеть в конфигурации), которые указывают на один и тот же контейнер, поскольку если я добавляю только одну (местоположение / фронт) и удаляю местоположение / страницу, он автоматически делает соответствующие запросы из root (my-domain.cl) вместо (my-domain.cl/front), выбрасывая 404 в js, css файлы контейнера. Самое странное, что в текущей конфигурации оба пути работают и файлы найдены, однако это не решение.
Запросы с одним местоположением

Я думаю, что это проблема конфигурации nginx, я много искал, не получив решения :(.

Надеюсь, вы поможете мне, пожалуйста!

...