目标

我们将使用 NGINX 作为 NodeJS 服务器的反向代理

将使用来自 Docker Hub 的 2 个 Docker 镜像:

  • NodeJS
  • NGINX

环境

  • NodeJS
  • Docker

示例

NodeJS HTTP服务

我们将创建一个简单的节点服务器。我们将使用httpnode 中的模块并制作一个简单的 http 服务器。server.js文件包含我们服务器的代码

var http = require('http');
var server = http.createServer(function (request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.end("Node & Docker Running...");
});
server.listen(3333);
console.log("Node HTTP Server started at http://localhost:3333/");

如果我们node server.js在终端上运行,它将在本地主机的 3333 端口启动服务器

我们可以打开浏览器并访问http://localhost:3333/

现在,我们要为我们的节点服务器创建一个 docker 镜像。为此,我们需要创建一个Dockerfile使用以下命令命名的文件

FROM mhart/alpine-node
COPY server.js .
EXPOSE 3333
CMD node server.js

在这里,我使用了mhart/alpine-node(Minimal Node.js Docker Image)来拥有 NodeJS 环境

EXPOSE 3333意味着 3333作为访问端口

现在我们已经Dockerfile准备好了,我们将从这个文件构建一个 Docker 镜像

docker build -t docknode .

我现在将运行 docker 镜像,它将为我们创建一个容器

docker run -d -p 3333:3333 --name node-server  docknode

运行此命令后,我们的 NodeJS 服务器应该在名为 的 Docker 容器内运行node-server

Nginx 反代

Node Docker 镜像中的 NodeJS 服务器正在运行,接下来我们需要添加 NGINX 反向代理

使用来自 DockerHub 的官方 NGINX 镜像

FROM nginx
COPY default.conf /etc/nginx/conf.d/

default.conf

server {
  location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://server:3333;
  }
}

在配置中,我们有http://server:3333. 这3333是来自我们的 NodeJS Docker 容器的端口

docker build -t docknginx .

image.png

为了验证我们的图像在我们的本地机器上可用,我们可以运行以下命令来查看镜像列表

docker images

image.png

运行 Nginx 反代服务器容器

docker run -d -p 8080:80 --link node-server:server --name nginx-proxy  docknginx

运行命令后,如果我们现在转到浏览器并点击http://localhost:8080/,我们可以看到我们的 NodeJS 应用程序现在正在这个端口上运行

image.png

我们实际上是通过 NGINX 访问 NodeJS 服务器,因为它在这里用作反向代理

点赞(0)

评论列表 共有 0 评论

暂无评论

微信服务号

微信客服

淘宝店铺

support@elephdev.com

发表
评论
Go
顶部