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