Разрешить доступ к экспресс-приложению только через nginx через докер - PullRequest
0 голосов
/ 07 февраля 2019

Так что в настоящее время я использую API-интерфейс экспресс-сервера, я хочу разрешить доступ к API только в том случае, если пользователь прошел через прокси-сервер nginx.В моей конфигурации прокси-сервера для nginx есть следующая строка для подключения к приложению Express (обратите внимание, что в конфигурации nginx есть больше строк для обслуживания других файлов):

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

Это позволяет мне перейти к моей пользовательской настройке.например, домен: example.com/api / .... и он получит запрос правильно.Однако я также могу перейти на server.ip.here:3000/api / ... и он все равно будет правильно получать информацию.Я хочу исключить возможность для людей вводить IP-адрес сервера и иметь возможность подключаться к API.

(Примечание: для настройки фактического экспресс-приложения я использовал экспресс-генератор для его настройки итолько что добавил несколько тестовых API-маршрутов, чтобы посмотреть, смогу ли я подключиться к нему)

Также обратите внимание, что я запускаю экспресс-приложение и прокси-сервер nginx, использующий docker.

Компоновка docker выглядит так:

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 голосов
/ 08 февраля 2019

Хорошо, я исправил свою проблему.

Я удалил строку в Dockerfile «EXPOSE 3000» и в docker-compose я удалил строку, которая определяет порты «ports: - 3000: 3000» (Iтакже переименовал имя контейнера в приложение).Затем я добавил к службе прокси следующее: «links: - app: app», затем в прокси я изменил proxy_pass на url http://app:3000,, и он работает так, как я хочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...