不带镜像模块的 Nginx 镜像

不带镜像模块的 Nginx 镜像

曾经有一次,某个已经不在我公司工作的人员决定手动编译 nginx,而并不知道自己在做什么,并将其投入生产。

现在我们无法添加模块,而且我们无法关闭 nginx 并重新开始一个新实例,因为这会破坏客户的体验(因为它正在生产中)。

为了更接近目标(我们可以用一个新的 nginx 实例替换这个 nginx 实例),我们想实现镜像。同样,我们现在无法安装镜像模块。我们必须以其他方式进行安装。

我对 nginx 一无所知,但我总是想学习并且喜欢上网与人们讨论一些事情。

基本上,我们有一个用作反向代理的 nginx。发送到的请求url/apis*被重定向到内部 API 服务器。出于测试目的,我们需要将此流量镜像到另一台服务器。工作中有人想出了这个解决方案,使用post_action

location ~* /apis*$ {
  proxy_pass http://api_server/$1;
  proxy_set_header Host      $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_pass_request_headers      on;
  gzip "on";
  keepalive_timeout 10;
  post_action @mirror_test;
  }

  location @mirror_test{
    proxy_ignore_client_abort on;
    proxy_pass http://test_api_server/$1;
  }
}

现在,这个解决方案确实正确地镜像了流量,但是,我们不确定响应是否被忽略了。阅读镜像模块文档,它表示使用该模块的镜像子请求响应将被忽略,我们希望获得相同的行为。对客户端的响应应仅来自主服务器 ( api_server),而不是来自镜像服务器 ( test_api_server)。

那么,在这种配置中,来自镜像服务器的响应是否会被忽略?

答案1

你可以升级 nginx 而不删除单个客户端连接:https://www.digitalocean.com/community/tutorials/how-to-upgrade-nginx-in-place-without-dropping-client-connections

更新:以下文字回答了您在评论中提出的问题:

优雅地更新可执行文件的第一步是实际更新二进制文件。使用适合您的 Nginx 安装的任何方法执行此操作,无论是通过包管理器还是源安装。

因此,您可以使用想要包含或排除的模块对源进行全新安装,然后使用该二进制文件进行升级过程。

相关内容