所以目前我正在运行一个 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/