我已经将 Nginx 服务器设置为 L4 代理(带流模块的转发代理),在 nginx.conf 文件中具有以下配置;
stream {
resolver 8.8.8.8;
server {
listen 443;
ssl_preread on;
proxy_connect_timeout 5s;
proxy_pass $ssl_preread_server_name:$server_port;
}
}
一切正常,上面的配置。但假设我想限制传递给我的代理服务器的 URL 的访问。不是通过限制 IP 地址,而是通过 URL 名称。
我做了一项研究并设置了以下配置文件,不知何故我能够控制传递给我的代理的 URL。
但问题从这里开始。如果调用一个大型网站,因为它在后台加载了许多链接或子域,并且知道我已经限制了允许通过的 URL,并且通配符子域在流块中不起作用,所以我无法加载请求的网站完全地。
是否有解决方案让它在流块中用于支持域子域的通配符?我的新配置如下:
stream {
map $ssl_preread_server_name $name {
ipchicken.com ipchicken.com;
www.bbc.com www.bbc.com;
www.bbc.co.uk www.bbc.co.uk;
bbci.co.uk bbci.co.uk;
}
server {
resolver 8.8.8.8;
listen 443;
ssl_preread on;
proxy_connect_timeout 5s;
proxy_pass $name:$server_port;
}
}
events {
}
您正在寻找
hostnames
关键字。使用此关键字,您可以将*.example.com
其用作example.com
域的通配符条目。server_name
与指令类似,您可以.example.com
同时使用example.com
and*.example.com
:作为替代方案,您可以在
map
块中使用任何正则表达式,即