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
- 安装前提软件:
- 一.源代码编译安装nginx:
-
-
- 修改配置文件,配置反向代理、缓存和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
- vim /var/www/html/index.html
- 使用yum安装httpd:
- 开始部署服务器三:
- 使用yum安装httpd:
- yum -y install httpd
- 修改网页:
- vim /var/www/html/index.html
- 内容web2
- 修改主机名:
- hostnamectl set-hostname web2
- bash
- vim /var/www/html/index.html
- 使用yum安装httpd:
- 使用客户端访问服务器一:
- 继续修改服务器一的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客户端都固定访问一个后端服务器,这就可能会导致负载不均衡。
- 基于ip_hash(哈希算法)的会话保持
- 讲解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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!