nginx实现反向代理功能,会话保持

2024-01-09 22:23:43
  • 了解nginx反向代理:
    • 反向代理和正向代理的区别就是:正向代理是代理客户端,反向代理是代理服务器。
    • 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

  • 实验目的:
    • 通过nginx反向代理的功能,实现负载均衡将用户的请求通过算法,分配给后端的web站点。
  • 实验拓扑:
    • 共开启三台虚拟机服务器
    • 一台做nginx代理,另外两台安装http
    • 服务器一:192.168.8.5(nginx代理)
    • 服务器二:192.168.8.6?? (httpd)
    • 服务器三:192.168.8.7?? (httpd)
  • 实验步骤:
    • 1.服务器一安装nginx修改主配置文件实现负载均衡和反向代理
    • 2.服务器二安装httpd 修改网页为web1
    • 3.服务器三安装httpd 修改网页为web2
    • 4.通过真实机访问测试,每次刷新网页,将呈现不同的网页(负载均衡和反向代理实现)
  • 开始部署服务器一:
    • 一.源代码编译安装nginx:
      • 安装前提软件:
        • yum -y install gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel
      • 创建程序用户:
        • useradd -s /sbin/nologin nginx
      • 将软件包通过终端软件拖拽至虚拟机中:
        • cd /usr/src
        • 拖拽
        • 解压:
          • tar xf nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz
          • tar xf ngx_cache_purge-2.3.tar.gz
          • tar xf nginx-1.12.0.tar.gz
      • 编译安装:
        • cd /usr/src/nginx-1.12.0
        • ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
        • --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module \
        • --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client \
        • --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi \
        • --with-pcre --add-module=../ngx_cache_purge-2.3 --with-http_flv_module \
        • --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42 \
        • && make && make install
      • 添加nginx为系统服务并启动:
        • ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
        • 创建缓存目录,给予权限(nginx可以作为缓存服务器,通过配置proxy_cache指令来实现):
          • mkdir -p /var/tmp/nginx/client
          • chown -R nginx:nginx /var/tmp/nginx
      • 创建nginx启动脚本:
        • vim /etc/init.d/nginx
      • 添加执行权限:
        • chmod +x /etc/init.d/nginx?
      • 添加系统服务并启动:
        • chkconfig --add nginx
        • chkconfig nginx on
        • service? nginx? start

      • 修改配置文件,配置反向代理、缓存和lb 负载均衡
      • 注意:(使用yum安装或源代码编译安装,主配置文件存放路径不同)
        • vim /usr/local/nginx/conf/nginx.conf

        • 注意:nginx默认的负载均衡调度算法为轮询算法
  • 开始部署服务器二:
    • 使用yum安装httpd:
      • yum -y install httpd
    • 修改网页:
      • vim /var/www/html/index.html
        • 内容web1
      • 修改主机名:
        • hostnamectl set-hostname web1
        • bash
  • 开始部署服务器三:
    • 使用yum安装httpd:
      • yum -y install httpd
    • 修改网页:
      • vim /var/www/html/index.html
        • 内容web2
      • 修改主机名:
        • hostnamectl set-hostname web2
        • bash
  • 使用客户端访问服务器一:

  • 继续修改服务器一的nginx主配置文件,配置会话保持,黏滞会话

  • ?proxy_buffering on;
  • ????proxy_temp_path /usr/local/nginx/proxy_temp;
  • ????proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m inactive=600m max_size=2g;

  • proxy_redirect off;
    • proxy_set_header Host $host;
    • proxy_set_header X-Real-IP $remote_addr;
    • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    • proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    • proxy_cache my-cache;
    • add_header Nginx-Cache $upstream_cache_status;
    • proxy_cache_valid 200 304 301 302 8h;
    • proxy_cache_valid 404 1m;
    • proxy_cache_valid any 1d;
    • proxy_cache_key $host$uri$is_args$args;
    • expires 30d;
  • 再次测试http://192.168.8.5/
  • 页面将会保留在web1这个页面,至此便实现了会话保持
  • 至此本章实验目标已全部实现,完结!!!
  • 不配置会话保持的弊端:
    • 当某台后端服务器启用了Session来本地化保存用户的一些数据后,下次用户的请求如果转发给了其他后端服务器,将导致之前的Session数据无法访问;
  • 什么是session?
    • ?session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。
    • session是存储于服务器端的特殊对象,服务器会为每一个游览器(客户端)创建一个唯一的session。
      • session类似于一个map可以存放多个键值对,session以键值对的方式存储。
  • 什么是会话保持?:
    • 是负载均衡的一种机制,保证了客户端与服务端的交互的关联性,保证了在进行负载均衡的时候,客户端的请求能够被定位到同一台服务器。
    • 优点:再次请求的时候不需要再此建立连接,不用再次握手
  • nginx配置会话保持还有另外一种方法:
    • 基于ip_hash(哈希算法)的会话保持
      • 在做Nginx的负载均衡时,可以在upstream里设置ip_hash,每个请求按访问ip的hash结果分配,映射到固定某一台的服务器,当后端服务器宕机后,session会丢失,再次发起请求时,会重新固定访问另一台正常的服务器并实现会话保持。缺点就是由于同一个IP客户端都固定访问一个后端服务器,这就可能会导致负载不均衡。
  • 讲解sticky模块:
    • Sticky工作原理
    • Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
    • 1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
    • 2.后端服务器处理完请求,将响应数据返回给nginx。
    • 3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
    • 4.客户端接收请求,并保存带route的cookie。
    • 5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
  • 什么是cookie?
  • cookie的中文翻译是曲奇,小甜饼的意思。cookie其实就是一些数据信息,类型为“小型文本文件”,存储于电脑上的文本文件中。
  • cokkie的用处:
    • ??我们想象一个场景,当我们打开一个网站时,如果这个网站我们曾经登录过,那么当我们再次打开网站时,发现就不需要再次登录了,而是直接进入了首页。例如bilibili,csdn等网站。这就是基于cokkie实现的。
  • 这是怎么做到的呢?其实就是浏览器保存了我们的cookie,里面记录了一些信息,当然,这些cookie是服务器创建后返回给浏览器的。游览器只进行了保存。

文章来源:https://blog.csdn.net/2302_77503226/article/details/135467632
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。