node.js - 只允许通过 nginx 和 docker 访问express app

标签 node.js docker nginx

所以目前我正在运行一个 Express 服务器 api,我只想在用户通过 nginx 代理时才允许访问该 api。在我的 nginx 代理配置中,它具有以下行用于连接到express应用程序(请注意,我在 nginx 配置中有更多行用于服务其他文件):

location ~* ^/(api/|test/){
    proxy_pass http://docker-express-app:3000;
}

这让我可以转到我的自定义域,例如:example.com/api/....,它将正确获取请求。不过,我也可以访问 server.ip.here:3000/api/...,它仍然会正确地为我提供信息。我想消除人们输入服务器 IP 并连接到 API 的能力。

(注意:对于如何设置实际的 Express 应用程序,我使用express-generator 进行设置,并添加了一些测试 api 路由以查看是否可以连接到它)

另请注意,我正在运行 Express 应用程序,并使用 docker 运行 nginx 代理。

docker compose 看起来像这样:

version: '3'
services:
  app:
    container_name: docker-express-app
    restart: always
    build: app/
    command: npm start
    ports:
      - 3000:3000

  proxy:
    container_name: nginx-proxy
    restart: always
    build: proxy/
    ports:
      - 80:80
      - 443:443

代理 Dockerfile:

FROM nginx:alpine
WORKDIR /usr/src/proxy
RUN rm /etc/nginx/conf.d/*
COPY proxy.conf /etc/nginx/conf.d/
COPY views/* ./views/

express 应用程序 Dockerfile:

FROM node:latest
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]

我想要做的就是确保对 api 的请求通过代理路由。这可能吗?

最佳答案

好的,我解决了我的问题。

我删除了 Dockerfile 中的“EXPOSE 3000”行,并在 docker-compose 中删除了定义端口“ports: - 3000:3000”的行(我还将容器名称重命名为 app)。然后,我向代理服务添加了以下内容:“links: - app:app”,然后在代理中我将 proxy_pass 更改为 url http://app:3000 ,它也按照我想要的方式工作。

关于node.js - 只允许通过 nginx 和 docker 访问express app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581926/

相关文章:

docker - 如何在 Kubernetes (GCP) 中预配置 Pod 的 IP 地址?

docker 运行时立即退出,错误代码为 139

bash - 在 docker 容器中的主要服务完全加载后运行 bash 脚本

file - Linux - client_body_in_file_only - 如何为临时文件设置文件权限?

nginx udp代理传ip

node.js - 如何配置 koa-router 在任何一组路由之前运行通用代码?

javascript - 调试使用 tsc 从本地链接的 Node 包编译的 Typescript

javascript - Cheerio.js 没有抓取非内联样式?

mysql - 如何知道mysql数据库中的数据是否更新或发生错误

nginx - 使用 nginx map 指令动态设置代理上游