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
  1. 启动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的会话共享的主要内容,如果未能解决你的问题,请参考以下文章

nginx负载均衡session共享

Nginx添加stickky保持会话共享

Tomcat+Memcached+Nginx实现session会话共享

Nginx实现会话保持,集群模式下session域共享

nginx+redis主从+tomcat一机多实例实现会话共享

redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享)