nginx 文档和指南显示,您可以在stream块中执行基于IP的白名单/黑名单。
但是,我不知道如何allow / deny基于IP的连接,只有某些使用SSL预读的主机名。
我有一个nginx框代理专用networking上的许多服务。 其中一些服务应该暴露在networking之外,而有些则不应该。 这个nginx框代理内部和外部的连接。
# TCP proxying with SSL passthrough & vhosts stream { map $ssl_preread_server_name $name { public.example.com public; private.example.com private; default default_upstream; } upstream public { server 10.0.0.2:443; } upstream private { server 10.0.0.3:443; } upstream default_upstream { server 10.0.0.4:443; } server { listen 443; proxy_pass $name; ssl_preread on; } }
如何将基于IP的阻止应用于仅以private.example.com为目标的连接?
我find了一个简单的方法来解决你的问题。 您应该使用额外的server块来过滤IP。 所以,你的configuration应该看起来像这样:
# TCP proxying with SSL passthrough & vhosts stream { map $ssl_preread_server_name $name { public.example.com public; private.example.com private; default default_upstream; } upstream public { server 10.0.0.2:443; } upstream private { #server 10.0.0.3:443; server 127.0.0.1:444; } upstream default_upstream { server 10.0.0.4:443; } server { listen 444; proxy_pass 10.0.0.3:443; ssl_preread on; deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; deny all; } server { listen 443; proxy_pass $name; ssl_preread on; } }