Эй, у меня два докера в одной сети.Одним из них является серверное приложение 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;
Итакпохоже, это изменило настройки буфера и тайм-аута.Почему это помогло?