[英]Nginx filtering by IP address for reverse proxy
我正在使用 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;
}
}
}
每個都有重定向到 https 的端口 80,除了眾所周知的 Lets Encrypt 位置。
我需要做的是限制 IP 地址能夠連接到第四台服務器而不影響當前功能,並且不限制其他服務器。
這個配置參考了Nginx TCP forwarding based on hostname
這可能嗎?
我環顧四周,嘗試了幾種不同的配置變體,最后不得不找到一個解決方法。 由於 stream 塊僅限於具有單個服務器塊,因此無論您包含什么allow
/ deny
語句,都是“全有或全無”。
我確定的解決方法(雖然不理想)似乎非常實用,並且不太難以使用基本同步腳本進行自動化/維護。
我的主要入站代理服務器能夠控制對每個本地 http 服務器的端口 80 上的私有資源的“逐個”訪問,因此它處理所有入站 80 訪問控制和過濾。
但是,如果我需要限制對端口 443 上加密的 tcp stream 的私有資源的訪問,我將 stream 交給輔助 nginx 代理服務器(僅在 443 上運行 stream 代理服務器),並在那里進行額外的過濾和訪問控制.
IP 在私人土地上很便宜,而且延遲極小 (<0.000)。 我確實通過 proxmox lxc 容器運行我的 nginx stream 代理,所以它們實際上在同一台機器上。
我想你甚至可以菊花鏈額外的代理,並通過你的過濾變得非常精細......但如果沒有經過深思熟慮的話,這可能會很快變成一個糾結的 web :)
(甚至可以在相同的 VM/服務器/容器上運行所有 stream 服務器,但 IP 不同。我沒試過。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.