仅允许使用docker

时间:2019-02-07 20:40:19

标签: node.js docker nginx

因此,当前我正在运行Express Server 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路由以查看是否可以连接到它)

还请注意,我正在使用docker运行express应用和nginx代理。

泊坞窗的组成如下:

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/

快递应用Dockerfile:

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

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

1 个答案:

答案 0 :(得分:0)

好,我解决了我的问题。

我删除了Dockerfile“ EXPOSE 3000”中的行,并在docker-compose中删除了定义端口“ ports:-3000:3000”的行(我还将容器名称重命名为app)。然后,我在代理服务中添加了以下内容:“链接:-app:app”,然后在代理中将proxy_pass更改为URL http://app:3000,并且它也可以按我的意愿工作。