嘿,所以我在同一网络上有两个docker容器。其中一个是SpringBoot服务器应用程序,另一个是React客户端应用程序。我正在尝试让客户端对服务器进行Ajax调用。当我在docker之外的机器上本地运行它们时,一切正常。当我使用docker配置并使用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:
如您所见,两个容器都被赋予了明确的名称,并且位于同一网络上。 video-client是Nginx React应用,video-server是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并不是特别有经验,所以我假设我在这里做错了。
非常感谢。
编辑:好的,所以我终于弄清楚了完成这项工作所必需的。我仍然很感谢有人在此推荐您的帮助。
我在Nginx配置的“ http”部分添加了以下几行,问题得以解决:
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
因此,这似乎更改了缓冲区和超时设置。为什么有帮助?