Nginx按IP地址过滤反向代理

qxsslcnc  于 2022-11-02  发布在  Nginx
关注(0)|答案(1)|浏览(208)

我正在使用Nginx反向代理少数Web服务器,每个服务器都被流式传输,运行得非常好,这是配置:

stream {
        map $ssl_preread_server_name $name {
                portal1.site.com portal1_backend;
                portal2.site.com portal1_backend;
                portal3.site.com portal1_backend;
                portal4.site.com portal1_backend;
        }

        upstream portal1_backend {
                server 10.1.1.1:443;
        }

        upstream portal2_backend {
                server 10.1.1.2:443;
        }

        upstream portal3_backend {
                server 10.1.1.3:443;
        }

        upstream portal4_backend {
                server 10.1.1.4:443;
        }
        server {
                listen 10.1.2.2:443;
                proxy_pass $name;
                ssl_preread on;
        }
http {
        server {
                listen 80;
                server_name portal1.site.com;

                location / {
                    return 301 https://$server_name$request_uri;
                }

                location /.well-known/ {
                        proxy_pass http://10.1.1.1:80;
                }  # do not redirect requests for iframe location
        }

        server {
                listen 80;
                server_name portal2.site.com;

                location / {
                        return 301 https://$server_name$request_uri;
                }

                location /.well-known/ {
                        proxy_pass http://10.1.1.2:80;
                }
        }

        server {
                listen 80;
                server_name portal3.site.com;

                location / {
                        return 301 https://$server_name$request_uri;
                }

                location /.well-known/ {
                        proxy_pass http://10.1.1.3:80;
                }
        }

        server {
                listen 80;
                server_name portal4.site.com;

                location / {
                        allow 1.2.3.4;
                        deny all;
                        return 301 https://$server_name$request_uri;
                }

                location /.well-known/ {
                        proxy_pass http://10.1.1.4:80;
                }
        }
}

每个都有端口80重定向到https,除了众所周知的位置让加密。
我需要做的是限制哪些IP地址能够连接到第4台服务器,而不影响当前功能,并且不限制其他服务器。
此配置是针对基于主机名的Nginx TCP转发进行的
这可能吗?

8fsztsew

8fsztsew1#

我看了很长时间,尝试了几种不同的配置变体,最后不得不找到一个解决方案。由于流块被限制为只有一个服务器块,所以无论您包括什么allow/deny语句,都是“all or nothing”。
我选择的解决方案(虽然不是很理想)看起来功能很好,而且用基本的同步脚本自动化/维护起来并不太难。
我的主入站代理服务器能够控制对每个本地http服务器的端口80上的私有资源的访问,所以它处理所有的入站80访问控制和过滤。
但是如果我需要限制对端口443上的私有资源加密tcp流的访问,我会将流交给一个辅助nginx代理服务器(它只在443上运行流代理服务器),并在那里进行额外的过滤和访问控制。
IP在私人领域很便宜,延迟也非常小(〈0.000)。我确实通过proxmox lxc容器运行我的两个nginx流代理“在臀部连接”,所以它们实际上在同一台机器上。
我想你甚至可以菊花链额外的代理,并得到相当详细的过滤...但这可能会变成一个混乱的网络很快,如果不是深思熟虑的计划:)
(May甚至可以在同一个VM/服务器/容器上运行所有流服务器,但IP不同。我没有尝试过。)

相关问题