因此,当前我正在运行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的请求通过代理路由。这可能吗?
答案 0 :(得分:0)
好,我解决了我的问题。
我删除了Dockerfile“ EXPOSE 3000”中的行,并在docker-compose中删除了定义端口“ ports:-3000:3000”的行(我还将容器名称重命名为app)。然后,我在代理服务中添加了以下内容:“链接:-app:app”,然后在代理中将proxy_pass更改为URL http://app:3000,并且它也可以按我的意愿工作。