nginx文档和指南表明您可以在stream块内执行基于 ip 的白名单/黑名单。
但是,对于使用 ssl 预读读取的某些主机名,我无法找到基于 ip 的allow/deny连接方法。
我有一个 nginx 盒子,它代理专用网络上的许多服务。其中一些服务应该暴露在网络之外,而另一些则不应该。这个 nginx box 代理内部和外部连接。
# 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;
}
}
Run Code Online (Sandbox Code Playgroud)
如何将基于 ip 的阻塞应用到仅指向的连接private.example.com?
我找到了一种解决您问题的简单方法。您应该使用额外的server块来过滤 IP。所以,你的配置应该如下所示:
# 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;
}
}
Run Code Online (Sandbox Code Playgroud)