myphpadmin项目理解cookie和session

当我们平时上网的时候,在刷新之后或者退出浏览器再次打开浏览器不需要登陆网页了,这就是利用了cookie和session;

环境配置

hostname wanIP lanIP 角色
web01 10.0.0.7 172.16.1.7 网站服务器1
web02 10.0.0.8 172.16.1.8 网站服务器2
db01 10.0.0.51 172.16.1.51 数据库服务器
lb01 10.0.0.5 172.16.1.5 负载均衡器

配置过程


1、web01和web02安装nginx和php

# 1、上传文件

# 2、解压安装
[root@web01 ~]# tar -xf nginx_and_php.tar.gz
[root@web01 ~]# cd nginx_php/
[root@web01 ~/nginx_php]# yum -y localinstall *.rpm # 3、更改配置文件
[root@web01 ~]# vi /etc/nginx/conf.d/phpadmin.conf
server {
listen 80;
server_name php.gong.com;
root /website/phpadmin;
index index.php; location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params;
}
} # 4、创建管理用户
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -g666 -u666 # 5、更改启动用户
[root@web01 ~]# vi /etc/nginx/nginx.conf user www; [root@web01 ~]# vi /etc/php-fpm.d/www.conf
; Start a new pool named 'www'.
[www] ; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = www
; RPM: Keep a group allowed to write in log dir.
group = www # 6、创建站点目录
[root@web01 ~]# mkdir -p /website/phpadmin/
[root@web01 ~]# cd /website/phpadmin/
## 上传php源码,解压
[root@web01 ~]# unzip phpMyAdmin-4.9.0.1-all-languages.zip
[root@web01 /website/phpadmin]# mv phpMyAdmin-4.9.0.1-all-languages/* ./ # 6、授权
[root@web01 ~]# chown -R www.www /website/phpadmin/ # 7、启动;开机自启
[root@web01 ~]# nginx
[root@web01 ~]# systemctl start php-fpm
[root@web01 ~]# systemctl enable nginx php-fpm # 7、授权session目录
[root@web01 ~]# chown -R www.www /var/lib/php/session # 访问测试

2、安装数据库

# 1、安装数据库
[root@db01 ~]# yum -y install mariadb-server # 7、启动;开机自启
[root@db01 ~]# systemctl start mariadb
[root@db01 ~]# systemctl enable mariadb # 7、创建root密码
[root@db01 ~]# mysqladmin -uroot password '123' # 8、登陆
[root@db01 ~]# mysql -uroot -p123 # 7、创建数据库
MariaDB [(none)]> create database php_db;
Query OK, 1 row affected (0.00 sec) # 7、创建管理数据库用户和密码
MariaDB [(none)]> grant all on php_db.* to php_user@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
# 1、更改php代码,数据库的连接地址

[root@web01 ~]# cd /website/phpadmin/
[root@web01 /website/phpadmin]# cp config.sample.inc.php config.inc.php
[root@web01 /website/phpadmin]# vi config.inc.php
/* Server parameters */
$cfg['Servers'][$i]['host'] = '172.16.1.51';

登陆之后本地的cookie和服务器端的session

把服务器端的session删除之后,刷新页面;会被要求重新登陆。

3、把web01上的配置复制到web02上去

# 1、使用rsync发送到web02
[root@web01 ~]# rsync -avz /etc/nginx/conf.d/phpadmin.conf root@10.0.0.8:/etc/nginx/conf.d/
[root@web01 ~]# rsync -avz /website root@10.0.0.8:/ # 2、启动
[root@web02 ~]# systemctl start nginx php-fpm
[root@web02 ~]# systemctl enable nginx php-fpm # 3、授权
[root@web02 ~]# chown -R www.www /var/lib/php/session

3、加入负载均衡

# 编辑配置文件
[root@lb01 ~]# vi /etc/nginx/conf.d/upstream.conf
upstream phpadmin {
server 172.16.1.7;
server 172.16.1.8;
} server {
listen 80;
server_name php.gong.com;
location / {
proxy_pass http://phpadmin;
include proxy_params;
}
} [root@lb01 /etc/nginx]# vi 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_next_upstream error timeout http_500 http_502 http_503 http_504; proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60; proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k; # 2、启动
[root@lb01 /etc/nginx]# nginx
[root@lb01 /etc/nginx]# systemctl enable nginx

在加入负载均衡之后,会出现下面的情况,刷新要求重新登陆,或者登陆补上的情况,那是因为,如果在web01上存储了session那么客户端通过负载均衡访问到web01的时候cookie的key和session的value是能够匹配的该用户访问合法,但是轮询到wen02的时候,没有session或者是存储了不同的session,就造成了刷新要重新认证或者,登陆不上的情况。

配置redis

4、加入redis

[root@db01 ~]# yum -y install redis

[root@db01 ~]# sed  -i '/^bind/c bind 127.0.0.1 172.16.1.51' /etc/redis.conf

[root@db01 ~]# systemctl start redis
[root@db01 ~]# systemctl enable redis [root@web01 ~]# vim /etc/php.ini
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379" # 可以不加试试
session.auto_start = 1 [root@web01 ~]# vi /etc/php-fpm.d/www.conf
;php_value[session.save_handler] = files
;php_value[session.save_path] = /var/lib/php/session [root@web01 ~]# systemctl restart php-fpm [root@web01 ~]# scp /etc/php.ini root@172.16.1.8:/etc/php.ini
[root@web01 ~]# scp /etc/php-fpm.d/www.conf root@172.16.1.8:/etc/php-fpm.d/www.conf [root@web02 ~]# systemctl restart php-fpm

当有了共享存储的时候,同一域名下的网站的cookie都是一样的,所以无论几台服务器,无论请求分配到哪一台服务器上同一用户的cookie是不变的。也就是说cookie对应的session也是唯一的。所以,这里保证了多台业务服务器访问同一个网站,而刷新不会出现重新登陆或者出现网页报错的情况。

Cookie是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤。另外一个更准确的说法是:Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器,是一种在客户端保持状态的方案。

FBI WARNING

QQ:1402122292 认准原创sheldon 别人叫我晓东

nginx负载均衡搭建phpmyadmin加入redis了解session会话原理的更多相关文章

  1. 使用Nginx负载均衡搭建高性能.NETweb应用程序二

    在文章<使用Nginx负载均衡搭建高性能.NETweb应用程序一>中,让我们对Nginx有了一个初步认识,下面我们将在windows平台下面使用Nginx演示集群部署我们的web应用. 一 ...

  2. 使用Nginx负载均衡搭建高性能.NETweb应用程序(转)

    一.遇到的问题 当我们用IIS服务器部署了一个web应用以后,当很多用户高并发访问的时候,客户端响应就会很慢,客户的体验就会很差,由于IIS接受到客户端请求的时候,就会创建一个线程,当线程达到几千个时 ...

  3. Nginx负载均衡搭建(Window与Linux)

    windows上搭建nginx负载均衡 1.准备几台http服务器软件,这里选用一台apache一台tomcat apache(windows)下载链接:https://www.apachehaus. ...

  4. [例子] nginx负载均衡搭建及测试

    一.Nginx + Tomcat 负载均衡测试(负载均衡+部分静态图片处理) 环境说明:  nginx+tomcat @ubuntu ok 首先你得有一个Ubuntu或者什么其他的linux. 安装j ...

  5. Nginx 负载均衡搭建

    配置文件Nginx/conf/nginx.conf 什么是负载均衡呢? 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设 ...

  6. 使用Nginx负载均衡搭建高性能.NETweb应用程序一

    一.遇到的问题 当我们用IIS服务器部署了一个web应用以后,当很多用户高并发访问的时候,客户端响应就会很慢,客户的体验就会很差,由于IIS接受到客户端请求的 时候,就会创建一个线程,当线程达到几千个 ...

  7. linux下nginx负载均衡搭建

    [一.Nginx能做什么] 1.http服务器.Nginx是一个http服务可以独立提供http服务.可以做网页静态服务器. 2.虚拟主机.可以实现在一台服务器虚拟出多个网站.例如个人网路使用的虚拟主 ...

  8. 负载均衡,最理想使用 redis实现session共享

    负载均衡在多台php服务器负载均衡的情况下,第一秒请求是a服务器,第二秒请求是b服务器, session必须放在一个公共的服务器,最理想是使用 redis实现session共享.内存的速度比磁盘访问快 ...

  9. Centos7 minimal 系列之Nginx负载均衡搭建(四)

    一.Nginx搭建请参考我的上篇文章 http://www.cnblogs.com/WJ--NET/p/8143899.html 二.在IIS上搭建2个网站 三.配置nginx 虚拟机和主机网络互通请 ...

随机推荐

  1. OO第四单元总结暨OO课程总结

    一.第四单元作业总结 本单元的主要任务是对 Uml 图元素进行管理和查询,测试一开始会输入一个静态图,之后会对图中相关内容进行查询. 第13,14次作业 第14次作业新增内容很少,故与第13次作业放在 ...

  2. 消息中间件-ActiveMQ支持的消息协议

    package com.study.mq.a1_example.helloworld.queue; import org.apache.activemq.ActiveMQConnectionFacto ...

  3. Zookeeper基础原理&应用场景详解

    简单了解Zookeeper Tips: 如果之前对Zookeeper不了解的话,这里大概留个印象就好了 Zookeeper是一个分布式协调服务,可以用于元数据管理.分布式锁.分布式协调.发布订阅.服务 ...

  4. pycharm pymysql连接mysql 报错 pymysql.err.InterfaceError: (0, '')

    pycharm  pymysql连接mysql  执行MySQL操作遇到以下报错信息: conn.query(q) File "C:\Software\Python37\lib\site-p ...

  5. Nuget-自定义模板的创建与使用

    参考官方文档: https://docs.microsoft.com/zh-cn/dotnet/core/tools/custom-templates https://devblogs.microso ...

  6. Data Mining UVA - 1591

      Dr. Tuple is working on the new data-mining application for Advanced Commercial Merchandise Inc. O ...

  7. Day11_52_将Set集合转换为List集合

    Set集合转换为List集合 ``` import java.util.*; public class SetReverseLsit { public static void main(String[ ...

  8. JavaScript遍历对象方法总结

    前言 本篇内容将按照下图展开: 遍历Object Object最常见的遍历方法方法就是使用for...in...,但其有一定的局限性,比如只能遍历可枚举属性.虽然Object无法直接使用for循环和f ...

  9. Nest 中处理 XML 类型的请求与响应

    公众号及小程序的微信接口是通过 xml 格式进行数据交换的. 比如接收普通消息的接口: 当普通微信用户向公众账号发消息时,微信服务器将 POST 消息的 XML 数据包到开发者填写的 URL 上. - ...

  10. Java Web中间件

    目录 中间件 常见的web中间件有哪些 Tomcat Weblogic Jboss Jetty Webshere Glasshfish 中间件 我们经常会看到中间件,但是,一直好奇的是,中间件到底是什 ...