NGinx 反向代理强制将用户移动到不同的服务器

NGinx 反向代理强制将用户移动到不同的服务器

我们在 Apache 前面使用 NGinx 来平衡网络流量负载 - 是否可以将特定用户(我假设是 IP 地址)移动到特定的 Apache 服务器?

我们正在做一些工作,我们的一些 IP 连接到服务器 1,一些连接到服务器 2,依此类推。更改通过 FTP 发送到服务器 1,然后复制到其他节点。

我们希望所有 IP 地址/用户都指向服务器 1,这样我们就不必等待更改在主机之间复制来检查某些操作是否有效,这是否可能?

答案1

尝试以下操作,但是您可能会重复很多配置(include在这种情况下是您的朋友),并且如果您有很多位置,您也可能会遇到麻烦。

upstream AllServers {
                server server1.example.com;
                server server2.example.com;
                ......
                }

Server {
    server_name example.com;
    listen 80;

    error_page 403 = @internal;

    location / {
                deny youip;
                allow all;
                proxy_pass http://AllServers;
                <rest of config>
                }

    location @internal{
                proxy_pass http://server1.example.com
                <rest of config>
                }
        }

答案2

我已经通过在想要定向到特定服务器的请求中使用额外的 URL 参数解决了该问题。在我的解决方案中,我可以连接到https://example.com?direct=1以使请求转到与 nginx 运行相同的节点上的服务器,或者语句下指定的任何节点if

这是针对 PHP-FPM 的,但对于使用 的反向代理,概念类似proxy_pass。只需fastcgi_pass用替换proxy_pass即可。解决方案如下:

server {
    ... other config ...
    location <appserver> {
        if ($arg_direct = 1) {
            set $upstream unix:/srw/www/example.com/php.sock; # Local upstream server
        }
        if ($arg_direct = 2) {
            set $upstream 10.10.10.1:9000; # Other node IP & Port
        }
        if ($arg_direct !~ "[12]") {
            set $upstream example.com; # Default load balanced group
        }
        fastcgi_pass $upstream;
    }
}

upstream example.com {
    ip_hash;
    server unix:/srw/www/example.com/php.sock
    server 10.10.10.1:9000;
}

相关内容