什么是会话保持?
将用户的登录状态记录下来,并且保持用户登录
会话保持的方式有:
- 运维 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数据库的用户名和密码即可
添加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
#不出意外会出现如下报错
??????
#为什么出现如上界面呢》那是因为我们端口选择的80,而nginx服务默是默由上往下的顺序读取配置文件,而排在最前面的就是默认界面,所有当我们访问网址的时候会出现如上界面
我们只要把默认配置文件打包重启服务即可
[root@web01 ~]# gzip /etc/nginx/conf.d/default.conf
[root@web01 ~]# systemctl restart nginx
#再次访问界面就会出现如下界面
制作session共享
在做完负载均衡后,当我们在登录phpmyadmin时候出现如下报错
这是因为在用户登录时,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
#浏览器访问登录