当前位置: 首页 > 面试题库 >

NGINX反向代理因链接的Docker容器而失败

张星洲
2023-03-14
问题内容

我有以下内容docker-compose.yml

node1:
    build: ./node
    links:
        - redis
    ports:
        - "8080"
node2:
    build: ./node
    links:
        - redis
    ports:
        - "8080"
service1:
    build: ./service
    links:
        - redis
    ports:
        - "8383"
redis:
    image: redis
    ports:
        - "6379"
nginx:
    build: ./nginx
    links:
        - node1:node1
        - node2:node2
        - service1:service1
    ports:
        - "80:80"

执行并运行后,docker ps我得到以下信息:

080d9d7dc2e0        dockerworkflow_nginx:latest      "nginx -g 'daemon of   5 minutes ago       Up 5 minutes        0.0.0.0:80->80/tcp, 443/tcp   dockerworkflow_nginx_1
8c25bfdb9d00        dockerworkflow_node1:latest      "nodemon /src/index.   6 minutes ago       Up 6 minutes        0.0.0.0:33023->8080/tcp       dockerworkflow_node1_1
4ae817be2a63        dockerworkflow_service1:latest   "nodemon /src/index.   6 minutes ago       Up 6 minutes        0.0.0.0:33022->8383/tcp       dockerworkflow_service1_1
91ff238fe3f6        dockerworkflow_node2:latest      "nodemon /src/index.   6 minutes ago       Up 6 minutes        0.0.0.0:33021->8080/tcp       dockerworkflow_node2_1
fe0c7e02c860        redis:latest                     "/entrypoint.sh redi   6 minutes ago       Up 6 minutes        0.0.0.0:33020->6379/tcp       dockerworkflow_redis_1

到目前为止,一切似乎都很好。

nginx.conf我使用如下所示:

worker_processes 4;
events { worker_connections 1024; }

http {    
    server {
          listen 80;

          location / {
            proxy_pass http://node1;
          }

          location /a/ {
            proxy_pass http://node2;
          }

          location /b/ {
            proxy_pass http://service1;
          }
    }
}

所有这些实际上应该做的是:

如果我输入,http://{host-ip}/node1容器将转发请求。

如果我输入,http://{host-ip}/a/node2容器将转发请求。

如果我输入,http://{host-ip}/b/service1容器将转发请求。

现在,502 Bad Gateway如果尝试任何操作,我都会得到帮助。


问题答案:

我能够找出解决方案,结果发现它是愚蠢的,没有出现在任何日志中,我很难理解。

以下是更新的nginx.conf文件。

worker_processes 4;
events { worker_connections 1024; }

http {

    upstream node_app {
        server node1:8080;
    }

    upstream service_app {
        server service1:8383;
    }

        server {
                listen 80;

            location / {
                proxy_pass http://node_app/;
                include /etc/nginx/proxy_params;
            }

             location /a/ {
                proxy_pass http://node_app/;
                include /etc/nginx/proxy_params;
             }

             location /b/ {
                proxy_pass http://service_app/;
                include /etc/nginx/proxy_params;
            }
        }
}

不知道此时是否需要包含,但是指令结尾/处的结尾proxy_pass似乎在一天结束时就成功了。



 类似资料:
  • 问题内容: 我目前在公司中使用Docker-Compose运行开发堆栈,以向开发人员提供他们编写我们的应用程序所需的一切。 它尤其包括: 一个Gitlab容器(sameersbn / gitlab),用于管理私有GIT存储库, 一个用于构建和持续集成的Jenkins容器(library / jenkins), 一个Archiva容器(ninjaben / archiva-docker)管理Mave

  • 在主机上,端口4012上有docker容器,而在docker容器中,webapp运行在端口3000上(0.0.0.0:4012->3000/tcp),因此要访问webapp,只需访问http://hostname:4012,网页显示良好。我希望能够从浏览器转到http://hostname/metrics来运行相同的网页。 它不像获取index.html那样将/metrics追加到资产中...我在

  • 主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过

  • Nginx 是一个高性能的 HTTP 和反向代理服务器,代码完全用 C 实现,基于它的高性能以及诸多优点,我们可以把它设置为 hyperf 的前置服务器,实现负载均衡或 HTTPS 前置服务器等。 配置 Http 代理 # 至少需要一个 Hyperf 节点,多个配置多行 upstream hyperf { # Hyperf HTTP Server 的 IP 及 端口 server

  • null /var/lib/docker/volumes/vault_vault_config/_data/vault.json /var/lib/docker/apps/vault-stack.yml Portainer工作良好,但与vault我仍然有问题,我得到404错误。当我转到http://1.2.3.4/Vault时,我会重定向到http://1.2.3.4/UI,而这显然不存在。正如我

  • 我尝试在使用相同nodejs应用程序的两个容器之间实现nginx反向代理负载平衡。 目录结构: docker撰写。yml: