docker - nginx,访问内网其他服务器
问题描述
我有一个使用此配置运行的 docker 网络(来自 docker-compose.yaml):
networks:
network:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.28.1.0/24
(我的网络名为network)
我有一个在这个网络(172.28.1.4)的容器中运行的 Angular 前端。前端 Web 服务器是一个 nginx 服务器。
我希望从 Web 服务器调用各种后端(身份验证和数据库)直接访问这些服务器,而不会将它们暴露给外界。
即对用户进行身份验证,如下所示: httpClient.post('172.28.1.5:8080/_user/login', credentials)
我相信这应该在 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
解决方案
推荐阅读
- asp.net - 跨域 Cookie 共享
- mongodb - 如何使环回 4 中的模型在其模式中具有唯一值?
- google-apps-script - 如何允许从网络应用程序下载文件?
- javascript - 如何禁用/启用表单或多个表单元素之间的选择选项?
- javascript - 如何在 javascript setTimeout() 之后调用 PHP 函数?
- swift - 如何在多个拆分视图控制器之间传递数据?
- c++ - 如何组合两个字符数组而不会出现此错误?
- bash - 使脚本输出 CSV 友好
- node.js - 带有子分类文件夹的命令处理程序
- javascript - 鼠标单击按钮时更改悬停颜色