У меня есть две докерские службы (угловое веб-приложение и серверная часть tomcat), которые я хочу защитить с помощью третьей докерской службы, которая представляет собой nginx, настроенный как обратный прокси-сервер.Моя конфигурация прокси работает, но я страдаю от базовой авторизации, которую должен обрабатывать и мой обратный прокси.Когда я защищаю свой угловой сервис с помощью базовой аутентификации через конфигурацию обратного прокси-сервера, все работает нормально, но мой бэкэнд все еще доступен для всех.Когда я добавляю также базовую аутентификацию в бэкэнд-сервис, у меня возникает проблема, заключающаяся в том, что мой базовый заголовок конфигурации аутентификации из моего внешнего интерфейса не перенаправляется / не добавляется в бэкэнд-запросы REST.Можно ли настроить обратный прокси-сервер nginx для добавления заголовка авторизации к каждому запросу, отправляемому веб-интерфейсом.Или, может быть, я ошибаюсь, и есть лучшее решение?
![infrastructure scheme](https://i.stack.imgur.com/NVSx8.png)
![browser](https://i.stack.imgur.com/T4W5v.png)
Вот моя конфигурация docker и nginx:
Конфигурация обратного прокси:
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
upstream docker-nginx {
server frontend-nginx:80;
}
upstream docker-tomcat {
server backend-tomcat:8080;
}
map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
'' 'registry/2.0';
}
server {
listen 80;
location / {
auth_basic "Protected area";
auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd;
add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
proxy_pass http://docker-nginx;
proxy_redirect off;
}
}
server {
listen 8080;
location / {
auth_basic "Protected area";
auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd;
add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
proxy_pass http://docker-tomcat;
proxy_redirect off;
}
}
}
docker-compose (настройка всех контейнеров):
version: '2.4'
services:
reverse-proxy:
container_name: reverse-proxy
image: nginx:alpine
volumes:
- ./auth:/etc/nginx/conf.d
- ./auth/nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "80:80"
- "8080:8080"
restart: always
links:
- registry:registry
frontend-nginx:
container_name: frontend
build: './frontend'
volumes:
- /dockerdev/frontend/dist/:/usr/share/nginx/html
depends_on:
- reverse-proxy
- bentley-tomcat
restart: always
backend-tomcat:
container_name: backend
build: './backend'
volumes:
- /data:/data
depends_on:
- reverse-proxy
restart: always
registry:
image: registry:2
ports:
- 127.0.0.1:5000:5000
volumes:
- ./data:/var/lib/registry
внешний Dockerfile:
FROM nginx
COPY ./dist/ /usr/share/nginx/html
COPY ./fast-nginx-default.conf /etc/nginx/conf.d/default.conf
Конфигурация внешнего интерфейса:
server {
listen 80;
sendfile on;
default_type application/octet-stream;
gzip on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.";
gzip_min_length 256;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 9;
root /usr/share/nginx/html;
location / {
try_files $uri $uri/ /index.html =404;
}
}
Внутренний Dockerfile:
FROM openjdk:11
RUN mkdir -p /usr/local/bin/tomcat
COPY ./backend-0.0.1-SNAPSHOT.jar /usr/local/bin/tomcat/backend-0.0.1-SNAPSHOT.jar
WORKDIR /usr/local/bin/tomcat
CMD ["java", "-jar", "backend-0.0.1-SNAPSHOT.jar"]