Nginx配置实现用IP灰度测试(不同用户ID)

 更新时间:2024年11月27日 10:32:07   作者:sky学Linux  
本文主要介绍了使用Nginx配置实现基于IP的灰度发布实验,以及如何通过不同用户ID测试灰度发布,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一.配置Nginx实现用IP测试灰度发布

实验要求

要求不同IP的客户访问相同代理时,可以看到不同集群主机的内容 

环境准备

主机名    IP地址    角色
proxy(已存在)    eth1:192.168.99.5/24    代理服务器
web1(已存在)    eth1:192.168.99.100/24    web服务器
web2(已存在)    eth1:192.168.99.200/24    web服务器

创建不同集群,准备多台集群主机

通过$remote_addr变量识别不同客户机

1)为web1搭建nginx虚拟主机

[root@proxy python]# scp /root/lnmp_soft/nginx-1.22.1.tar.gz 192.168.99.100:/root
[root@proxy python]# scp /root/lnmp_soft/nginx-1.22.1.tar.gz 192.168.99.200:/root
[root@web1 ~]# systemctl disable --now httpd    #取消开机自启,停止httpd服务
[root@web1 ~]# yum -y install make gcc openssl-devel pcre-devel #安装基础依赖包
[root@web1 ~]# tar -xf nginx-1.22.1.tar.gz
[root@web1 ~]# cd nginx-1.22.1/
[root@web1 nginx-1.22.1]# ./configure 
[root@web1 nginx-1.22.1]# make && make install
[root@web1 nginx-1.22.1]# vim /usr/local/nginx/conf/nginx.conf  #默认server listen 80的不要动,直接另外写一个server
http {    
...
    server {                      #此为新添加的server
        listen       8001;
        server_name  localhost;
        root html8001;
        index index.html;
}
    server {
        listen       80;
        server_name  localhost;
...
[root@web1 nginx-1.22.1]# /usr/local/nginx/sbin/nginx 
[root@web1 nginx-1.22.1]# mkdir /usr/local/nginx/html8001
[root@web1 nginx-1.22.1]# echo web1-nginx-80 > /usr/local/nginx/html/index.html
[root@web1 nginx-1.22.1]# echo web1-nginx-8001 > /usr/local/nginx/html8001/index.html

使用web1测试

[root@web1 nginx-1.22.1]# curl 192.168.99.100
web1-nginx-80
[root@web1 nginx-1.22.1]# curl 192.168.99.100:8001
web1-nginx-8001

2)为web2搭建nginx

[root@web2 ~]# systemctl disable --now httpd
[root@web2 ~]# yum -y install make gcc openssl-devel pcre-devel #安装基础依赖包
[root@web2 ~]# tar -xf nginx-1.22.1.tar.gz
[root@web2 ~]# cd nginx-1.22.1/
[root@web2 nginx-1.22.1]# ./configure 
[root@web2 nginx-1.22.1]# make && make install
[root@web2 nginx-1.22.1]# /usr/local/nginx/sbin/nginx 
[root@web2 nginx-1.22.1]# echo web2-nginx-80 > /usr/local/nginx/html/index.html

3)使用proxy主机在nginx配置中创建集群

[root@proxy python]# killall uwsgi      #停止uwsgi
[root@proxy python]# cd /usr/local/nginx
[root@proxy nginx]# cp conf/nginx.conf.default conf/nginx.conf  #恢复配置文件
[root@proxy nginx]# vim conf/nginx.conf
http {    
...
    upstream default {              #正常业务集群
        server 192.168.99.100:80;
        server 192.168.99.200:80;
    }
    upstream s8001 {
        server 192.168.99.100:8001;   #新版本业务集群1
    }
    server {
        listen       80;
        server_name  localhost;
        set $group "default";       #自己定义变量$group,值为default,访问default集群
        if ($remote_addr ~ "192.168.99.1"){  #如果客户机ip是包含192.168.99.1就访问新版本业务集群1,$remote_addr为nginx的内置变量,代表访问者的ip
             set $group s8001;  #变量重新赋值
        }
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://$group;       #调用集群
            root   html;
            index  index.html index.htm;
        }
...
[root@proxy nginx]# /usr/local/nginx/sbin/nginx -s reload

使用proxy测试

[root@proxy ~]# curl 192.168.99.5   #显示正常业务集群
web1-nginx-80
[root@proxy ~]# curl 192.168.99.5   #显示正常业务集群
web2-nginx-80

web1访问proxy

[root@web1 ~]# curl 192.168.99.5    #显示新版本业务集群1
web1-nginx-8001

二、通过不同用户ID测试灰度发布

实验要求

不同ID的客户访问相同代理时,可以看到不同集群主机的内容

部署LNPM环境(已操作)

proxy主机部署LNMP服务器相关软件(前面已经安装过,在此不在重复安装)

1)proxy主机修改Nginx配置文件(修改默认首页与动静分离)

[root@proxy ~]# cd /usr/local/nginx
[root@proxy nginx]# cp conf/nginx.conf.default conf/nginx.conf  #恢复配置文件
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
...
 location  ~  \.php$  {
            root           html;
            fastcgi_pass  unix:/run/php-fpm/www.sock;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }
...        

php-fpm的配置文件之前已经修改好,此时不用修改

启动LNMP服务器相关的服务

1)重新加载Nginx服务

[root@proxy nginx]# /usr/local/nginx/sbin/nginx -s reload
[root@proxy nginx]# ss -antlp | grep :80   

2)启动MySQL服务(已经启动则不需要执行)

[root@proxy nginx]# systemctl start mariadb
[root@proxy nginx]# systemctl status mariadb

3)启动PHP-FPM服务(已经启动则不需要执行)

[root@proxy nginx]# systemctl start  php-fpm
[root@proxy nginx]# systemctl status php-fpm
[root@proxy nginx]# cp /root/lnmp_soft/php_scripts/test.php /usr/local/nginx/html/
[root@proxy nginx]# curl 192.168.99.5/test.php      #测试动态页面
<html>
<body>
This is HTML message
</br>
c is bigger</body>
</html>

4) 配置好lnmp之后,拷贝带登录效果的测试页面

[root@proxy nginx]# cd /root/lnmp_soft/php_scripts/
[root@proxy nginx]# tar -xf php-session-demo.tar.gz    #释放带登录功能的网页
[root@proxy nginx]# cp -r php-session-demo/* /usr/local/nginx/html/   #拷贝页面到nginx中

使用浏览器访问192.168.99.5/index.php  可以看到有登录界面的网页

如果想要访问此网站时直接输入http://192.168.99.5就能访问到这个登录页面,可以更改以下配置实现

[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
server {
   listen 80;
   
   location / {
      root html;
      index index.php index.html index.htm;     #新添加index.php
   }

...
 location  ~  \.php$  {
            root           html;
            fastcgi_pass  unix:/run/php-fpm/www.sock;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }
...  
[root@proxy nginx]# /usr/local/nginx/sbin/nginx -s reload

直接输入http://192.168.99.5就能访问到登录页面,输入任意用户名和密码登录测试即可

注:这里index.php是登录前页面 ,home.php是登录后才能看的页面

修改home.php页面

1)修改home.php页面

[root@proxy php_scripts]# vim /usr/local/nginx/html/home.php        #修改php页面,将原有Welcome那行修改成以下状态
Welcome :  <?php
if(preg_match("/^abc/",$_SESSION['login_user'])) {      #preg_match匹配正则,如果登录账号是以abc开头,就连接99.100,否则连接99.200
echo "<a href='http://192.168.99.100'>开始</a>";
}
else
{
echo "<a href='http://192.168.99.200'>开始</a>";
}
?>

2)测试

浏览器访问192.168.99.5/index.php分别输入不同名称的账户,可以看到"开始"连接的是不同的地址

三、通过不同用户ID测试灰度发布

实验要求
不同ID的客户访问相同代理时,可以看到不同集群主机的内容
部署LNPM环境(已操作)
proxy主机部署LNMP服务器相关软件(前面已经安装过,在此不在重复安装)

1)proxy主机修改Nginx配置文件(修改默认首页与动静分离)

[root@proxy ~]# cd /usr/local/nginx
[root@proxy nginx]# cp conf/nginx.conf.default conf/nginx.conf  #恢复配置文件
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
...
 location  ~  \.php$  {
            root           html;
            fastcgi_pass  unix:/run/php-fpm/www.sock;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }
...        

php-fpm的配置文件之前已经修改好,此时不用修改
启动LNMP服务器相关的服务

1)重新加载Nginx服务

[root@proxy nginx]# /usr/local/nginx/sbin/nginx -s reload
[root@proxy nginx]# ss -antlp | grep :80   

2)启动MySQL服务(已经启动则不需要执行)

[root@proxy nginx]# systemctl start mariadb
[root@proxy nginx]# systemctl status mariadb

3)启动PHP-FPM服务(已经启动则不需要执行)

[root@proxy nginx]# systemctl start  php-fpm
[root@proxy nginx]# systemctl status php-fpm
[root@proxy nginx]# cp /root/lnmp_soft/php_scripts/test.php /usr/local/nginx/html/
[root@proxy nginx]# curl 192.168.99.5/test.php      #测试动态页面
<html>
<body>
This is HTML message
</br>
c is bigger</body>
</html>

到此这篇关于Nginx配置实现用IP灰度测试(不同用户ID)的文章就介绍到这了,更多相关Nginx IP灰度测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx禁止ip访问或非法域名访问

    Nginx禁止ip访问或非法域名访问

    这篇文章主要介绍了Nginx禁止ip访问或非法域名访问,需要的朋友可以参考下
    2022-04-04
  • 详解使用Nginx和uWSGI配置Python的web项目的方法

    详解使用Nginx和uWSGI配置Python的web项目的方法

    这篇文章主要介绍了使用Nginx和uWSGI配置Python的web项目的方法,与其他CGI连接方式相比uwsgi的连接性能也较为出众,需要的朋友可以参考下
    2015-12-12
  • Nginx转发丢失cookie表现形式及解决方案

    Nginx转发丢失cookie表现形式及解决方案

    本文主要介绍了Nginx转发丢失cookie表现形式及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • LNMP编译安装之nginx安装配置方法图文教程

    LNMP编译安装之nginx安装配置方法图文教程

    这篇文章主要为大家详细介绍了LNMP编译安装之nginx安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 一文详解Nginx的强缓存和协商缓存

    一文详解Nginx的强缓存和协商缓存

    这篇文章主要为大家详细介绍了Nginx中强缓存和协商缓存的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • 在Nginx中配置SSL的详细指南

    在Nginx中配置SSL的详细指南

    在当今的网络环境中,数据安全至关重要,SSL和 TLS为数据传输提供了加密保护,Nginx 是一款高性能的 Web 服务器,广泛应用于处理 HTTPS 请求,本文将详细介绍如何在 Nginx 中配置 SSL,需要的朋友可以参考下
    2025-06-06
  • nginx+lua(openresty)实现黑/白名单权限控制的示例

    nginx+lua(openresty)实现黑/白名单权限控制的示例

    本文介绍了如何使用Openresty进行权限控制和灰度发布,具体通过定时器定期更新黑名单数据,进行用户过滤和权限管控,具有一定的参考价值,感兴趣的可以了解一下
    2024-09-09
  • Web服务器-Nginx-高并发问题

    Web服务器-Nginx-高并发问题

    Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性
    2025-08-08
  • nginx中的location路径配置(实路径和虚路径)

    nginx中的location路径配置(实路径和虚路径)

    这篇文章主要介绍了nginx中的location路径配置(实路径和虚路径),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Nginx安装出现错误解决方案

    Nginx安装出现错误解决方案

    这篇文章主要介绍了Nginx安装出现错误解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论