首页 > 解决方案 > 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

标签: dockernginx

解决方案


推荐阅读