我正在运行由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配置等?
预先感谢!
答案 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
。