1. 程式人生 > 其它 >Nginx負載均衡會話保持

Nginx負載均衡會話保持

Nginx負載均衡會話保持

Nginx負載均衡會話保持

什麼是會話保持

將使用者登入的狀態記錄下來,並且保持使用者登入。

做會話保持的方式:

  • nginxip_hash(運維)
  • session共享(開發)

cookie:前端記錄會話保持

session:後端記錄會話保持(給cookie加密)

環境準備

主機名 軟體 外網IP 內網IP
web01 phpmyadmin,nginx,php 10.0.0.7 172.16.1.7
web02 phpmyadmin,nginx,php 10.0.0.8 172.16.1.8
lb01 nginx 10.0.0.5 172.16.1.5

部署web

[root@web01 /code]# vim /etc/nginx/conf.d/php.dsr.com.conf 
server {
        listen 80;
        server_name php.dsr.com;
        root /code/phpmyadmin;

        location / {
                index index.php index.html;
        }
        location ~ \.php$ {
                fastcgi_pass unix:/code/php71w.sock;
                include /etc/nginx/fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
}

# 獲取程式碼
[root@web01 /code]# wget http://test.driverzeng.com/Nginx_Code/phpMyAdmin-4.9.0.1-all-languages.zip
# 解壓 
[root@web01 /code]# unzip phpMyAdmin-4.9.0.1-all-languages.zip
# 更改名字
[root@web01 /code]# mv phpMyAdmin-4.9.0.1-all-languages phpmyadmin
# 授權
[root@web01 /code]# chown -R www.www /code/
# 遠端複製給web02
[root@web01 /code]#scp -r /etc/nginx/conf.d/php.dsr.com.conf 172.16.1.8:/etc/nginx/conf.d/

# 修改檔名
[root@web01 phpmyadmin]# cp config.sample.inc.php config.inc.php
# 修改配置檔案(連線資料庫)
[root@web01 phpmyadmin]# vim config.inc.php
$cfg['Servers'][$i]['host'] = '172.16.1.51';
[root@web02 phpmyadmin]# chown www.www /var/lib/php/session/
# 上圖是遠端登入資料庫

## 檢視資料庫使用者
[root@db01 ~]# mysql
MariaDB [(none)]> select user,host from mysql.user;
+----------------+-----------+
| user           | host      |
+----------------+-----------+
| wordpress_user | %         |
| zh_user        | %         |
| root           | 127.0.0.1 |
| root           | ::1       |
|                | db01      |
| root           | db01      |
|                | localhost |
| root           | localhost |
+----------------+-----------+
8 rows in set (0.01 sec)

## 給root授權(可以遠端登入)
MariaDB [(none)]> grant all on *.* to root@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select user,host from mysql.user;
+----------------+-----------+
| user           | host      |
+----------------+-----------+
| root           | %         |
| wordpress_user | %         |
| zh_user        | %         |
| root           | 127.0.0.1 |
| root           | ::1       |
|                | db01      |
| root           | db01      |
|                | localhost |
| root           | localhost |
+----------------+-----------+
9 rows in set (0.00 sec)

## 登入資料庫

配置負載均衡

[root@lb01 conf.d]# vim php_upstream.conf
upstream php_drz_com {
	server 172.16.1.7;
	server 172.16.1.8;
}
server{
	listen 80;
	server_name php.drz.com;
	location / {
		proxy_pass http://php_drz_com;
		include /etc/nginx/proxy_params;
	}
}

配置session共享(redis快取資料庫)

環境準備

主機名 軟體 外網IP 內網IP
web01 phpmyadmin,nginx,php 10.0.0.7 172.16.1.7
web02 phpmyadmin,nginx,php 10.0.0.8 172.16.1.8
lb01 nginx 10.0.0.5 172.16.1.5
db01 redis 10.0.0.51 172.16.1.51
# 1.安裝redis
[root@db01 ~]# yum install redis -y

# 2.修改redis配置檔案
[root@db01 ~]# vim /etc/redis.conf
bind 127.0.0.1 172.16.1.51

# 3.啟動redis
[root@db01 ~]# systemctl start redis

# 4.加入開機自啟
[root@db01 ~]# systemctl enable redis

# 5.檢查埠
[root@db01 ~]# netstat -lntup|grep 6379
tcp        0      0 172.16.1.51:6379        0.0.0.0:*               LISTEN      7545/redis-server 1 
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      7545/redis-server 1 

# 6.檢查程序
[root@db01 ~]# ps -ef|grep [r]edis
redis      7545      1  0 18:28 ?        00:00:00 /usr/bin/redis-server 127.0.0.1:6379

# 7.連線redis
[root@db01 ~]# redis-cli
127.0.0.1:6379>

## 檢視資料庫內容
127.0.0.1:6379> Keys *
1) "PHPREDIS_SESSION:388e33e1e099805c828bd282162ef542"
2) "PHPREDIS_SESSION:629407d75a1d29c511f262e3f8c35f81"

## 檢視資料的存活時間
127.0.0.1:6379> ttl "PHPREDIS_SESSION:388e33e1e099805c828bd282162ef542"
(integer) 868

## 檢視檔案裡的內容
127.0.0.1:6379> get PHPREDIS_SESSION:388e33e1e099805c828bd282162ef542

## 修改資料的生存時間
127.0.0.1:6379> EXPIRE PHPREDIS_SESSION:c31cf9f74609d1655323243febaeb1b9 60


# 8.修改程式,將session存放到Redis中
[root@web01 phpmyadmin]# vim /etc/php.ini
1231 session.save_handler = redis
1265 session.save_path = "tcp://172.16.1.51:6379"
1295 session.auto_start = 1

[root@web01 phpmyadmin]# vim /etc/php-fpm.d/www.conf
396 ;php_value[session.save_handler] = files
397 ;php_value[session.save_path] = /var/lib/php/session

# 9.重啟php
[root@web01 phpmyadmin]# systemctl restart php-fpm