NGINX本地主机上游配置

时间:2020-06-15 08:49:54

标签: docker nginx docker-compose

我正在运行由docker-compose精心安排的多服务应用程序,出于测试目的,我想在localhost(MacOS)上运行它。

使用此NGINX配置:

upstream fe {
    server fe:3000;
}

upstream be {
    server be:4000;
}

server {
    server_name localhost;
    listen 80;

    location / {
        proxy_pass http://fe;
    }

    location /api/ {
       proxy_pass http://be;
    }
}

我可以按预期从http://localhost/的浏览器中获取FE,并从http://localhost/api/的BE中获取BE。

问题在于,FE拒绝与BE发生此错误:

Error: Network error: request to http://localhost/api/graphql failed, reason: connect ECONNREFUSED 127.0.0.1:80

(这是带有NODE / EXPRESS / APOLLO-GQL BE的NEXT.JS FE)

注意:我需要上游BE,因为我需要直接使用URL从电子邮件中下载文件。

我是否缺少一些NGINX标头,DNS配置等?

预先感谢!

1 个答案:

答案 0 :(得分:0)

对Apollo的初始调用来自Next.js(FE容器)“服务器端”,这意味着BE需要寻址到docker网络(它不能是localhost,因为此调用是localhost FE容器本身)。就我而言,是将对process.env.BE的调用设置为http://be:4000

但是对于其他调用(从浏览器发送登录请求)来说,docker网络是未知的(从无法访问docker网络的本地主机调用),这意味着您必须寻址localhost/api/graphql

我只需在FE httpLink-阿波罗连接功能中进行少量更改即可实现该功能:

uri: isBrowser ? `/api/graphql` : `${process.env.BE}/api/graphql`

NGINX配置与上面相同。

注意:此操作仅需要在本地环境中处理,在远程服务器上可以正常运行而不会出现“ hack”,并且地址始终为domain.com/api/graphql