nginx的会话共享
Posted 酷gril
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx的会话共享相关的知识,希望对你有一定的参考价值。
1.nginx负载均衡会话保持
1.配置Nginx
[root@web01 conf.d]# cat php.conf
server {
listen 80;
server_name php.drz.com;
root /code/phpMyAdmin-4.9.0.1-all-languages;
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 fastcgi_params;
}
}
[root@web01 conf.d]# systemctl restart nginx
2.安装phpmyadmin (web01和web02上都装)
[root@web01 conf.d]# cd /code
[root@web01 code]# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.zip
[root@web01 code]# unzip phpMyAdmin-4.9.0.1-all-languages.zip
3.配置phpmyadmin连接远程的数据库
[root@web01 code]# cd phpMyAdmin-4.9.0.1-all-languages/
[root@web01 phpMyAdmin-4.9.0.1-all-languages]# cp config.sample.inc.php config.inc.php
[root@web01 phpMyAdmin-4.9.0.1-all-languages]# vim config.inc.php
/* Server parameters */
$cfg['Servers'][$i]['host'] = '172.16.1.51';
4.配置授权
[root@web01 conf.d]# chown -R www.www /var/lib/php/
[root@web01 phpMyAdmin-4.8.4-all-languages]# ll /var/lib/php/session/
总用量 4
-rw-------. 1 www www 2424 8月 21 18:41 sess_e96b27a6a628be47745a10a36e2fcd5a
5.将web01上配置好的phpMyAdmin以及nginx配置文件推送web02主机上
[root@web01 code]# scp -rp phpMyAdmin-4.8.4-all-languages root@172.16.1.8:/code/
[root@web01 code]# scp /etc/nginx/conf.d/php.conf root@172.16.1.8:/etc/nginx/conf.d/
6.在web02上重载nginx服务
[root@web02 code]# systemctl restart nginx
7.授权
[root@web02 code]# chown -R www.www /var/lib/php/
8.接入负载均衡
[root@lb01 conf.d]# vim proxy_php.com.conf
upstream php {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name php.drz.com;
location / {
proxy_pass http://php;
include proxy_params;
}
}
[root@lb01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 conf.d]# systemctl restart nginx
使用负载均衡的轮询功能之后,会发现,如果将session保存在本地文件的话,永远都登不上去
使用redis解决会话登录问题
1.安装redis内存数据库
[root@db01 ~]# yum install redis -y
2.配置resis监听在172.16.1.0网段上
[root@db01 ~]# sed -i '/^bind/c bind 127.0.0.1 172.16.1.51' /etc/redis.conf
启动redis
[root@db01 ~]# systemctl start redis [root@db01 ~]# systemctl enable redis
4.php配置session连接redis
#1.修改/etc/php.ini文件 [root@web ~]# vim /etc/php.ini session.save_handler = redis session.save_path = "tcp://172.16.1.51:6379" ;session.save_path = "tcp://172.16.1.51:6379?auth=123" #如果redis存在密码,则使用该方式 session.auto_start = 0 #2.注释php-fpm.d/www.conf里面的两条内容,否则session内容会一直写入/var/lib/php/session目录中 ;php_value[session.save_handler] = files ;php_value[session.save_path] = /var/lib/php/session
5.重启php-fpm
[root@web01 code]# systemctl restart php-fpm
6.将web01上的配置好的文件推到web02
[root@web01 code]# scp /etc/php.ini root@172.16.1.8:/etc/php.ini [root@web01 code]# scp /etc/php-fpm.d/www.conf root@172.16.1.8:/etc/php-fpm.d/www.conf
7.web02重启php-fpm
[root@web02 code]# systemctl restart php-fpm
8.redis 查看数据
[root@db01 redis]# redis-cli 127.0.0.1:6379> keys * 1) "PHPREDIS_SESSION:1365eaf0490be9315496cb7382965954"
以上是关于nginx的会话共享的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat+Memcached+Nginx实现session会话共享