我有一个运行此配置的docker网络(来自docker-compose.yaml):
networks:
network:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.28.1.0/24
(我的网络称为网络)
我有一个Angular前端在此网络上的容器中运行(172.28.1.4)。前端Web服务器是Nginx服务器。
我希望从Web服务器上调用各种后端(身份验证和数据库)直接转到这些服务器,而不必将它们暴露给外界。
即对用户进行身份验证,如下所示:httpClient.post('172.28.1.5:8080/_user/login',凭据)
我相信应该在nginx配置中完成此操作,但是对于如何允许从nginx访问172.28.1.5而又不暴露172.28.1.5,我一无所知
从Docker的角度来看,服务器彼此可见
我已经尝试使用反向代理,并且可以,但是我不能阻止从外部ips访问该位置
location ~/_user(/.*)*/?$ {
proxy_pass http://auth_server:8080; //auth_server points to 172.28.1.5
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
代理设置。我已经更改了服务器的名称,以阐明它们在网络中的角色。 前端可以像这样调用database_server:
http://external.ip.address:443/_api/any_path 不幸的是,其他人也可以:)
server {
listen 443;
server_name localhost;
location ~/_user(/.*)*/?$ {
proxy_pass http://authentication_server:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location ~/_api(/.*)*/?$ {
proxy_pass http://database_server:80;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location ~/ {
proxy_pass http://ui_frontend_server:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
我的docker设置使之成为可能,因为它将名称“ authentication_server”映射为172.28.1.3
authentication_server_service:
container_name: authentication_server
build: ../authentication_server/
image: authentication_server_image:latest
networks:
network:
ipv4_address: 172.28.1.3