我们在 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;
}