返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >nginx-会话保持-3
  • 627
分享到

nginx-会话保持-3

nginx服务器php 2023-09-01 08:09:01 627人浏览 泡泡鱼
摘要

基于LNMP在负载均衡集群上部署Wordpress(低配版) 在讲解会话保持之前,我们先利用之前的学习内容,做一个小实验:在负载均衡集群上部署wordpress。 准备三台服务器: 第一台proxy服务器作为代理服务器,负载均衡器,ip:1

基于LNMP在负载均衡集群上部署Wordpress(低配版)

在讲解会话保持之前,我们先利用之前的学习内容,做一个小实验:在负载均衡集群上部署wordpress。

准备三台服务器

第一台proxy服务器作为代理服务器,负载均衡器,ip:192.168.242.140 域名:www.zcg666.com

第二台和第三台做作为提供服务的真实服务器:

WEB-1 ip:192.168.242.137 域名:www.zcy666.com

web-2 ip:192.168.242.138 域名:www.hjf777.com

实验要求:将wordpress这个项目放到两台web服务器上,通过代理服务器对两台web服务器做代理,最后通过浏览器访问代理服务器能够访问wordpress项目。

实验思路:这是一个简单的基于LNMP部署wordpress,先部署好两台web服务器。web-1和web-2上边下载NginxPHPphp-fpm、php-Mysql、php-gd gd。在其中任意一台web服务器上安装mysql数据库(5.37版本的),在mysql中创建wordpress项目所需的数据库。通过nfs共享目录,将wordpress项目放在共享目录中,将共享目录作为nginx的网站发布目录。然后配置nginx支持php。web服务器部署好后在wordpress能够通过浏览器正常访问的前提下,在proxy服务器上部署负载均衡+代理。最后时限通过访问代理服务器能够访问wordpress。

实验过程:

(我所使用的nginx版本都是1.20.2)

实验之前在三台服务器以及windows上做一下本地域名解析:
proxy服务器:192.168.242.140 www.zcg666.com
web-1:192.168.242.137 www.zcy666.com
web-2:192.168.242.138 www.hjf777.com

首先在web-2和web-1上部署nfs共享目录,并将wordpress压缩包上传至共享目录并解压。

web-2[root@web2-server ~]# yum -y install nfs-utils[root@web2-server ~]# systemctl start nfs[root@web2-server ~]# mkdir /nfs-dir[root@web2-server ~]# vim /etc/exports/nfs-dir 192.168.242.137(rw,no_root_squash,sync)   保存退出[root@web2-server ~]# systemctl restart nfs[root@web2-server ~]# exportfs -v      #确保exports配置文件生效[root@web2-server ~]# echo "ceshi" >>/nfs-dir/a.txt    #在共享目录创建测试文件web-1[root@web1-server ~]# yum -y install nfs-utils[root@web1-server ~]# mkdir /nfs-dir         #创建挂载目录[root@web1-server ~]# vim /etc/fstab         #设置开机自动挂载.....192.168.242.138/nfs-dir /nfs-dir nfs       defaults 0 0           挂载设备       挂载点  文件类型   属性            [root@web1-server ~]# systemctl restart nfs[root@web1-server ~]# mount -a[root@web1-server ~]# cat /nfs-dir/a.txtceshi 将wordpress项目的压缩包上传到共享目录,可以通过rpm -ivh下载,或者从windows上上传到共享目录都可以 [root@web1-server ~]# cd /nfs-dir[root@web1-server nfs-dir]# lsa.txt   wordpress-4.9.1-zh_CN.tar.gz[root@web1-server ~]# tar zxf wordpress-4.9.1-zh_CN.tar.gz[root@web1-server nfs-dir]# lsa.txt   wordpress-4.9.1-zh_CN.tar.gz  wordpress        

接着在web-2上下载mysql5.7,在mysql数据库中创建wordpress库,创建对应数据库用户

[root@web2-server ~]# yum -y install nginx php php-fpm php-mysql php-gd gd[root@web2-server ~]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm    #下载mysql的yum仓库[root@web2-server ~]# cd /etc/yum.repos.d[root@web2-server ~]# vim mysql-community.repo[mysql57-community]         #开启mysql5.7关闭mysql8.0...enabled=1.... [mysql80-community]...enabled=0....[root@web2-server ~]# grep password /var/log/mysqld.log    #查看数据库的初始密码[root@web2-server ~]# mysqladmin -uroot -p'S7ydsrRT6w_r' password 'HanJing@123'  修改密码[root@web2-server ~]# mysql -uroot -p'HanJing@123'  进入数据库mysql> create database wordpress;    #创建wordpress项目需要的库mysql> grant all on wordpress.* to 'wordpress'@'%' identified by 'QianFeng@123';mysql> exit

接下来在web-2上编辑nginx和php的配置文件,使nginx支持php

[root@web2-server ~]# cd /etc/nginx/conf.d/[root@web2-server conf.d]# mv default.conf default.conf.bak[root@web2-server ~]# vim /etc/nginx/conf.d/wordpress.confserver {        listen 80;        server_name www.hjf777.com;        access_log /var/log/nginx/nfs-dir_access_log;        location / {                root /nfs-dir/wordpress;                index index.php index.html index.htm;        }         error_page 500 502 503 504 /50x.html;        location = /50x.html {            root  html;        }        location ~ \.php$ {        root               /nfs-dir/wordpress;        fastcgi_pass       127.0.0.1:9000;        fastcgi_index      index.php;        fastcgi_param      SCRIPT_FILENAME  $document_root$fastcgi_script_name;        include            fastcgi_params;        }} 然后修改php的配置文件,将/etc/php.ini文件中的short_open_tag=Off打开[root@web2-server ~]# sed -i '/short_open_tag=Off/c short_open_tag=On' /etc/php.ini然后重启nginx和php[root@web2-server ~]# systemctl restart nginx php-fpm.service

web-1做相同的操作

[root@web1-server ~]# cd /etc/nginx/conf.d/[root@web1-server conf.d]# mv default.conf default.conf.bak[root@web1-server ~]# vim /etc/nginx/conf.d/wordpress.confserver {        listen 80;        server_name www.hjf777.com;        access_log /var/log/nginx/nfs-dir_access_log;        location / {                root /nfs-dir/wordpress;                index index.php index.html index.htm;        }         error_page 500 502 503 504 /50x.html;        location = /50x.html {            root  html;        }        location ~ \.php$ {        root               /nfs-dir/wordpress;        fastcgi_pass       127.0.0.1:9000;        fastcgi_index      index.php;        fastcgi_param      SCRIPT_FILENAME  $document_root$fastcgi_script_name;        include            fastcgi_params;        }} 然后修改php的配置文件,将/etc/php.ini文件中的short_open_tag=Off打开[root@web1-server ~]# sed -i '/short_open_tag=Off/c short_open_tag=On' /etc/php.ini然后重启nginx和php[root@web1-server ~]# systemctl restart nginx php-fpm.service

然后通过浏览器访问web-1和web-2服务器,验证是否可以访问wordpress。在浏览器分别输入www.zcy666.com    www.hjf777.com。看到以下界面就算成功。

接下来就需要在proxy服务器上部署负载均衡+代理了。

[root@proxy-server ~]# yum -y install nginx[root@proxy-server ~]# systemctl start nginx[root@proxy-server ~]# vim /etc/nginx/nginx.conf user  nginx;worker_processes  auto; error_log  /var/log/nginx/error.log notice;pid        /var/run/nginx.pid;  events {    worker_connections  1024;}  http {    include       /etc/nginx/mime.types;    default_type  application/octet-stream;     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';     access_log  /var/log/nginx/access.log  main;    upstream web{                  #创建一个负载均衡地址池 upstream后面跟的是地址池的名字        server www.zcy666.com;     #web-1服务器的域名        server www.hjf777.com;     #web-2服务器的域名        }    sendfile        on;    #tcp_nopush     on;     keepalive_timeout  65;     #gzip  on;     include /etc/nginx/conf.d// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', 'HanJing@123'); define('DB_HOST', '192.168.242.138'); define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', ''); define('AUTH_KEY',         '>$OYl?CV>.zZ>LekR}iDn[.+&7ssW |}?9[E/,-f06IOoI8@l%0T_~c}f.|?G My');define('SECURE_AUTH_KEY',  '7ko&V6CI:_o|fRrJSLrR:y9QB,>yrK~&(.?b_XsmGI=$3s6nFI`gt-9nI>ws@$!;~-L;R:m;`?9kLLpGZ_:@,wwzf3Q&PMCZ8)o1#n(Iu8');define('NONCE_KEY',        '7y`e^p8$E}{Eq;M]k.LI,qz],3Zv?,iIlO}P}Y[-La;f]j%5X}af4vFl;)1Xk%}G');define('AUTH_SALT',        'xE7OwR!}x9FqJzw{C&pHd<1p9z_zc*MiTZ[9895KeMu.dbse?;9D3`w}GfvNbP&/');define('SECURE_AUTH_SALT', '5rexQ,&|XfRoaG`^=x$ x@

 然后在刚才浏览器的页面点击现在安装。然后按提示创建账户即可。

nginx会话保持

nginx会话保持主要有以下几种实现方式。

ip_hash

ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。

ip_hash语法:

upstream web {    ip_hash;    server www.zcy666.com;    server www.hjf777.com; }

注意:
ip_hash简单易用,但有如下问题:

  • 当后端服务器宕机后,session会丢失;
  • 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡;

使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。(需要引入第三方模块才能实现sticky)

sticky语法:

    upstream web{        server www.zcy666.com;        server www.hjf777.com;        sticky expires=1h domain=3evip.cn path=/;        }说明:expires:设置浏览器中保持cookie的时间 domain:定义cookie的域 path:为cookie定义路径

实验案例:这个实验是基于上文wordpress项目的实验环境做的。

Sticky机器:在原有的基础上添加sticky模块,首先准备好一台yum安装好的带有nginx的服务器下载nginx的源码包和sticky的源码包 [root@proxy-server ~]# wget  https://bitbucket.org/nginx-Goodies/nginx-sticky-module-ng/get/08a395c66e42.zip[root@proxy-server ~]# yum -y install unzip[root@proxy-server ~]# unzip 08a395c66e42.zip[root@proxy-server ~]# mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ nginx-sticky-module-ng[root@proxy-server ~]# yum install -y pcre* openssl* GCc gcc-c++ make[root@proxy-server ~]# wget Http://nginx.org/download/nginx-1.20.2.tar.gz[root@proxy-server ~]# tar zxf nginx-1.20.2.tar.gz[root@proxy-server ~]# cd nginx-1.20.2/[root@proxy-server nginx-1.20.2]# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'  --add-module=/root/nginx-sticky-module-ng[root@proxy-server nginx-1.20.2]# make &&make install[root@proxy-server ~]# vim /etc/nginx/nginx.conf    在upstream块中添加sticky参数...    upstream web{        server www.zcy666.com;        server www.hjf777.com;        sticky expires=1h domain=3evip.cn path=/;        }.....   保存退出后从新加载nginx配置[root@proxy-server ~]# nginx -s reload

浏览器访问proxy代理服务器的域名。在网址栏输入域名后,先别按回车进入,按F12打开开发工具,然后在地址栏按回车进入页面,看到如下界面

单击之后就可以看到我们自己定义的缓存格式

来源地址:https://blog.csdn.net/qq_50660509/article/details/129688503

--结束END--

本文标题: nginx-会话保持-3

本文链接: https://lsjlt.com/news/387869.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • nginx-会话保持-3
    基于LNMP在负载均衡集群上部署wordpress(低配版) 在讲解会话保持之前,我们先利用之前的学习内容,做一个小实验:在负载均衡集群上部署wordpress。 准备三台服务器: 第一台proxy服务器作为代理服务器,负载均衡器,ip:1...
    99+
    2023-09-01
    nginx 服务器 php
  • Nginx实现会话保持的两种方式
    目录前言一、基于ip_hash的会话保持二、基于cookie的会话保持总结前言 在我们做Nginx负载均衡的时候经常会遇到会话保持的问题,为了保证同一用户session会被分配到同一...
    99+
    2024-04-02
  • Nginx实现会话保持的方式有哪些
    这篇文章主要介绍Nginx实现会话保持的方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、基于ip_hash的会话保持在做Nginx的负载均衡时,可以在upstream里设置ip_hash,每个请求按访问i...
    99+
    2023-06-29
  • Nginx实现会话保持,集群模式下session域共享
    前言 生产环境下,多数系统为了应对线上多种复杂情况而进行了集群架构的部署,保证系统的高性能、价格有效性、可伸缩性、高可用性等。通常将生产环境下的域名指向Nginx服务,通过它做HTTP协议的Web负载...
    99+
    2023-09-17
    nginx 服务器 负载均衡 java 后端
  • 在K8S中如何实现会话保持
    本篇内容介绍了“在K8S中如何实现会话保持”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!会话保持方案方案一:通过service进行配置在se...
    99+
    2023-07-05
  • Android中Volley框架下保持会话方法
    公司经理把我拉出来,死马当活马医,做一个安卓app,作为刚毕业几个月且只是培训了几个月的小白来说,这无疑是一个非常大的挑战,当然最大的挑战不是这个,最大的挑战时两个周做出来。这...
    99+
    2022-06-06
    volley框架 方法 volley Android
  • 如何通过Memcached实现session server会话保持
    今天小编给大家分享一下如何通过Memcached实现session server会话保持的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-06-27
  • ASP.NET MVC使用Session会话保持表单状态
    本篇实践在ASP.NET MVC 4下使用Session来保持表单的状态。 如上,输入俱乐部名称,点击"添加球员",输入球员名称。我们希望,点击"到别...
    99+
    2024-04-02
  • 在K8S中实现会话保持的两种方案
    目录前言会话保持方案方案一:通过service进行配置方案二:通过ingress配置会话保持总结前言 故事的起因是朋友所在的部门最近基于auth2实现单点登录,他们在测试环境单点登录...
    99+
    2023-03-15
    K8S会话保持 K8S实现会话保持
  • python+pytest接口自动化之session会话保持的实现
    目录前言一、session(会话)二、会话保持三、python进行session会话保持总结前言 在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,...
    99+
    2024-04-02
  • xshell怎么保存会话数据
    本文小编为大家详细介绍“xshell怎么保存会话数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“xshell怎么保存会话数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2022-12-01
    xshell
  • SSH会话保持技巧:在Linux SysOps中实现长时间远程管理
    在Linux SysOps中,保持SSH会话的技巧是确保远程管理的长期稳定性和可靠性的关键。以下是一些实现长时间远程管理的有效技巧:...
    99+
    2023-10-09
    Linux
  • 如何使用Linux服务器保护Web接口免受会话劫持攻击
    要保护Linux服务器上的Web接口免受会话劫持攻击,可以采取以下措施:1. 使用HTTPS:使用HTTPS协议对Web接口进行加密...
    99+
    2023-10-18
    Linux
  • 如何使用Redis保存用户会话Session
    今天就跟大家聊聊有关如何使用Redis保存用户会话Session,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言PHP内置的绘画存储机制是把全部的...
    99+
    2024-04-02
  • PHP 框架安全指南:如何防止会话劫持?
    php 框架可通过以下最佳实践防止会话劫持:1. 使用 https 加密数据;2. 使用强且唯一的会话 id;3. 限制会话持续时间;4. 使用会话令牌;5. 实施 ip 地址绑定;6....
    99+
    2024-05-24
    安全 php laravel
  • 使用Redis保存用户会话Session的案例分析
    这篇文章将为大家详细讲解有关使用Redis保存用户会话Session的案例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言PHP内置的绘画存储机制是把全部的会话数据...
    99+
    2024-04-02
  • PHP获取和/或设置当前会话保存路径
    这篇文章将为大家详细讲解有关PHP获取和/或设置当前会话保存路径,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。获取会话保存路径 <php $savePath = session_save_path(...
    99+
    2024-04-02
  • NGINX & PHP Cookie 会话中 PHPSESSID 缺少 HTTPOnly、Secure 属性解决方案
    NGINX & PHP Cookie 会话中 PHPSESSID 缺少 HTTPOnly、Secure 属性解决方案 1 / 说明 基于安全的考虑,需要给cookie加上Secure和HttpOnly属性,HttpOnly比较好理解,设置...
    99+
    2023-09-01
    php 开发语言
  • Oracle 12c R2中ADG会话保留特性的示例分析
    这篇文章给大家分享的是有关Oracle 12c R2中ADG会话保留特性的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Oracle 12c R2中有一个不错的特性,那就...
    99+
    2024-04-02
  • Nginx隐藏式跳转(浏览器URL跳转后保持不变)
    Nginx的隐藏式跳转可以实现将请求跳转到另一个网站的页面,并且浏览器中URL保持不变。Nginx配置中需要使用rewrite规则。下面提供两个示例来说明这种跳转需求的配置: 一、N...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作