gpt4 book ai didi

使用 Nginx 和 Docker 的 Node.JS 代理

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:36 30 4
gpt4 key购买 nike

我有一个带有nodejs的docker容器,还有一个带有nginx的docker容器。

我已经告诉我的角度使用 ec2-xxx:8888/api 来使用 api。因为我运行我的nodejs容器:

docker run -d -p 8888:8888 --name nodejs localhost:5000/test/node-js-image:1

所以我将我的 docker 的 8888 映射到我的亚马逊上。所以这是有效的。我的 app.config.js 包含:

URL: 'http://ec2...',
PORT: '8888',

我可以在 ec2:8888/api 上看到我的 api但它并不能保存让你的 api 可通过服务器访问。所以我想像这样运行我的nodejs:

docker run -d --name nodejs localhost:5000/test/node-js-image:1

因此无需将容器端口映射到我的亚马逊端口上。但我仍然需要从 nginx 容器访问 nodejs 容器。

我该怎么做?我在我的 nginx.conf 中尝试过:

http {    
upstream node-app {
least_conn;
server nodejs:8888 weight=10 max_fails=3 fail_timeout=30s;

}

server {
listen 80;

location / {
alias /usr/share/nginx/html/dist/;
index index.html;
}

location /api {
proxy_pass http://node-app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}

但这不起作用。我只看到 HTML(没有 CSS),并且无法与 nodeJS 容器连接。

最佳答案

假设两个容器在同一台机器上运行,Docker 的 legacy container links是一种可能性。 Networking是新的出路。

启动你的nodejs容器

docker run -d --name nodejs --expose 8888 <YOUR_NODEJS_IMAGE>

-p ...相反,选项--expose ...使您的容器仅对链接的容器可见。

使用 Nodejs 的链接启动 nginx 容器:

docker run -d --name nginx --link nodejs <YOUR_NGINX_IMAGE>

为了从 nginx docker 容器访问 nodejs docker 容器,您必须使用 docker 注入(inject)的环境变量。 This gist给出了如何执行此操作的示例。

关于使用 Nginx 和 Docker 的 Node.JS 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34897399/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com