什么是会话保持?

将用户的登录状态记录下来,并且保持用户登录

会话保持的方式有:

  • 运维 nginx ip_hash
  • 开发 session共享

cookie 前端记录回话保持

session 后端记录回话保持

cookie

  • 前端开发将用户登录的信息,保存到浏览器中,(开发工具F12---->application------->cookie)
  • 如果仅仅将用户的登录信息保存在cookie中,随时可以修改

session

  • 后端开发人员,将用户的登录信息,记录在服务器中(共享存储,某一个目录下的某个文件,数据库中,缓存数据库中)
  • session是对cookie做的一个加密,保存在服务器中

实践部署:

主机名 外网IP 内网IP 角色 环境
db01 10.0.0.51 172.16.1.51 数据库 mariadb
lb01 10.0.0.5 172.16.1.5 负载均衡 nginx
web01 10.0.0.7 172.16.1.7 phpmyadmin nginx php
web02 10.0.0.8 172.16.1.8 phpmyadmin nginx php

db01数据库部署:

#下载数据库
yum install mariadb-server
#启动服务
systemctl start mariadb
#创建数据库用户和密码
[root@db01 ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> `grant all on *.* to admin@'%' identified  by '123';`  
Query OK, 0 rows affected (0.00 sec)

web01和web02部署

# 下载phpmyadmin
wget http://test.driverzeng.com/Nginx_Code/phpMyAdmin-4.9.0.1-all-languages.zip
#解压/改名
unzip phpMyAdmin-4.9.0.1-all-languages.zip && mv phpMyAdmin-4.9.0.1-all-languages admin
#下载Nginx和php   //本地压缩包安装
yum localinstall -y *.rpm
# 编写nginx配置文件
vim /etc/nginx/conf.d/php.conf
server{
        listen 80;
        server_name php.xxx.com;
        root /code/admin;
        location / {
                index index.php index.html;
        }
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
}
#创建站点目录
mkdir /code
#移动admin到/code下
mv admin /code
# 移动到admin目录例修改代码链接数据库的配置文件
cd /code/admin
cp config.sample.inc.php config.inc.php     
vim config.inc.php
    #在31行左右
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';     #//localhost修改为数据库IP
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
#授权
chown -R www.www /code
chown www.www /var/lib/php/session
# 创建用户
groupadd -g 666 www && useradd -g 666 -u 666 -s /sbin/nologin -M www
# 修改nginx和php主配置你文件
vim /etc/nginx/nginx.conf
    user www;   #//user_nginx 修改为user_www
vim /etc/php-fpm.d/www.conf
    ; RPM: apache Choosed to be able to access some dir as httpd
    user = www     #//apache修改为www
    ; RPM: Keep a group allowed to write in log dir.
    group = www    #//apache修改为www
#将刚才所有修改过的配置文件拷贝给web02   
scp /etc/nginx/conf.d/php.conf root@10.0.0.8:/etc/nginx/conf.d/
scp /etc/nginx/nginx.conf root@10.0.0.8:/etc/nginx/
scp /etc/php-fpm.d/www.conf root@10.0.0.8:/etc/php-fpm.d/
scp -r /code root@10.0.0.8:/
    #如果php拷贝失败,则可能是web02没有安装php服务, 拷贝完成后需到web02查看拷贝文件是否为修改后的文件
    #因为scp拷贝的特性,所有需要重新授权
#本地域名解析
10.0.0.7 php.xxx.com
10.0.0.8 php.xxx.com
#启动服务
systemctl start nginx php-fpm
#浏览器访问   
php.xxx.com
#如果报如下错,授权即可
phpMyAdmin - Error
Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.
session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13)
session_start(): Failed to read session data: files (path: /var/lib/php/session)
chmod 777 /var/lib/php/session
#登录输入db01数据库的用户名和密码即可

image-20230506151137543

添加phpmyadmin的负载均衡

lb01负载均衡部署:

# 安装nginx
yum install -y nginx
# 编写配置文件
vim /etc/nginx/conf.d/lb.php.conf
upstream  php {
        server 172.16.1.7:80;
        server 172.16.1.8:80;
}
server {
        listen 80;
        server_name php.jj.com;

        location / {
                proxy_pass http://php;
                include proxy_params;
        }
}
#添加负载优化目录
 vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
#语法检查
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#重启服务
systemctl restart nginx
# 本地域名解析
10.0.0.5 php.jj.com
#浏览器访问
php.jj.com
    #不出意外会出现如下报错

image-20230506152822371

??????

#为什么出现如上界面呢》那是因为我们端口选择的80,而nginx服务默是默由上往下的顺序读取配置文件,而排在最前面的就是默认界面,所有当我们访问网址的时候会出现如上界面
我们只要把默认配置文件打包重启服务即可
[root@web01 ~]# gzip /etc/nginx/conf.d/default.conf 
[root@web01 ~]# systemctl restart nginx
#再次访问界面就会出现如下界面

image-20230506153135778

制作session共享

在做完负载均衡后,当我们在登录phpmyadmin时候出现如下报错

image-20230506153321681

这是因为在用户登录时,session没有做共享的原因

db01部署redis服务

# 安装redis
yum install -y redis
# 修改redis配置文件   //在61行左右
vim /etc/redis.conf
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1     #//修改为0.0.0.0   (表示任何人都可以访问)
# 启动服务
systemctl start redis
#查看端口
[root@db01 ~]# netstat  -lntup | grep 6379
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      8480/redis-server 0

web01和web02配置

web01配置:
# 修改php程序的配置文件
vim /etc/php.ini
    #第1231行左右
    [Session]
    ; Handler used to store/retrieve data.
    ; http://php.net/session.save-handler
    session.save_handler = redis      #//files修改为redis
    #第1264行左右
    ; RPM note : session directory must be owned by process owner
    ; for mod_php, see /etc/httpd/conf.d/php.conf
    ; for php-fpm, see /etc/php-fpm.d/*conf
    session.save_path = "tcp://172.16.1.51:6379"  #//把此行注释打开,/tmp修改为tcp://172.16.1.51:6379
 # 修改php启动配置文件  最后这倒数二三行内容注释掉即可!!! 用;
    ;session.save_path = "tcp://172.16.1.51:6379?auth=123" # 如果redis存在密码,则使用该方式(1264行附近)
 vim /etc/php-fpm.d/www.conf
    ;php_value[session.save_handler] = files
    ;php_value[session.save_path] = /var/lib/php/session
#把web01配置文件拷贝给web02即可
scp /etc/php.ini root@10.0.0.8:/etc/
scp /etc/php-fpm.d/www.conf root@10.0.0.8:/etc/php-fpm.d/
#web01和web02重启服务
systemctl restart nginx php-fpm
#浏览器访问登录

image-20230506155047375