nginx代理和docker 502错误的网关

时间:2019-04-07 12:29:24

标签: docker nginx

嘿,所以我在同一网络上有两个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;

因此,这似乎更改了缓冲区和超时设置。为什么有帮助?

0 个答案:

没有答案