прокси nginx и докер 502 плохой шлюз - PullRequest
1 голос
/ 07 апреля 2019

Эй, у меня два докера в одной сети.Одним из них является серверное приложение SpringBoot, а другим - клиентское приложение React.Я пытаюсь заставить клиента делать ajax-вызовы на сервер.Когда я запускаю их оба локально на моей машине, за пределами докера, все работает.Когда я запускаю их с моей конфигурацией докера и с помощью прокси-сервера nginx, я получаю 502 ошибочных шлюза.

Вот моя конфигурация docker-compose:

version: '3'

  video-server:
    build:
      context: .
      dockerfile: video-server_Dockerfile
    container_name: video-server
    networks:
      - videoManagerNetwork
    environment:
      - VIDEO_MANAGER_DIR=/opt/videos
    volumes:
      - ${VIDEO_MANAGER_DIR_PROD}:/opt/videos

  video-client:
    build:
      context: .
      dockerfile: video-client_Dockerfile
    container_name: video-client
    networks:
      - videoManagerNetwork
    ports:
      - 9000:80

networks:
  videoManagerNetwork:

Как видите, обаконтейнеры имеют явные имена и находятся в одной сети.видео-клиент - это приложение Nginx React, видео-сервер - это приложение SpringBoot.

Вот моя конфигурация Nginx:

worker_processes auto;

events {
    worker_connections 8000;
    multi_accept on;
}

http {
    log_format compression '$remote_addr - $remote_user [$time_local] '
            '"$request" $status $upstream_addr '
            '"$http_referer" "$http_user_agent"';
    include /etc/nginx/mime.types;
    default_type text/plain;

    server {
        listen 80;
        # TODO make sure the log is written to a docker volume
        access_log /var/log/nginx/access.log compression;

        root /var/www;
        index index.html;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location /api/ {
            proxy_set_header Host $http_host;
            proxy_pass http://video-server:8080/api/;
        }

        location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
            expires 1M;
            access_log off;
            add_header Cache-Control "public";
        }

        location ~* \.(?:css|js)$ {
            try_files $uri =404;
            expires 1y;
            access_log off;
            add_header Cache-Control "public";
        }

        location ~ ^.+\..+$ {
            try_files $uri =404;
        }
    }
}

Как видите, я передаю все вызовы на/ api / к моему контейнеру видеосервера.Это должно работать.Я даже загрузился в контейнер видео-клиента docker exec -it video-client bash, установил curl и смог успешно выполнять вызовы в другой контейнер, т.е. http://video-server:8080/api/categories.

Я ищу предложения о том, в чем проблема смоя конфигурация может быть.У меня нет особого опыта работы с Nginx, поэтому я предполагаю, что я делаю что-то там не так.

Большое спасибо.

Редактировать: Хорошо, так что я наконец-то понял, что было необходимочтобы сделать эту работу.Я по-прежнему был бы признателен, если кто-то скажет, ПОЧЕМУ это помогает.

Я добавил следующие строки в раздел «http» конфигурации Nginx, и проблема была решена:

fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;

Итакпохоже, это изменило настройки буфера и тайм-аута.Почему это помогло?

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