Session与Cookie 、 部署memcached 、 Session共享

链接

一, nginx问题处理

1,支持超长地址栏

默认情况下nginx无法支持长地址栏,会报414错误

打开配置文件,在默认的虚拟主机上方添加两行

client_header_buffer_size 200k;   //第一行表示,用户访问网站的头部信息(包含地址栏)长度支持200k大小
large_client_header_buffers 4 200k;  //第二行表示,如果200k不够,再给4个200k
sbin/nginx  -s  reload   //重加载配置

然后到lnmp_soft目录找到buffer.sh 脚本并运行(该脚本里的4.5可以修改为2.5), 看不到414报错即可./buffer.sh //执行测试脚本,可以支持超长地址栏并看到页面内容,而不是414报错

2,优化nginx并发

在proxy主机:

打开nginx配置文件修改第3行,第13行-

worker_processes  2;   //开启的nginx进程数量,通常是随cpu的核心数一致
worker_connections  50000;   //每个nginx进程支持的并发访问量
sbin/nginx  -s  reload
proxy与web1都执行以下命令
ulimit -n     //查询系统打开文件数量的大小
ulimit -Hn 100000    //定义文本可以同时被打开的次数,硬限制(最大值)
ulimit -Sn 100000    //定义文本可以同时被打开的次数,软限制(目前使用值)

回到web1主机执行命令ab -c 2000 -n 2000 http://192.168.2.5/ 看到100%则
成功
ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。
-c 代表次数 -n 代表个数


永久修改文件打开数量配置,需要重启服务器

vim /etc/security/limits.conf   //修改53、54行

*     soft    nofile           100000
*     hard    nofile           100000

//    *可以写对什么用户或者组生效,但不如直接写*省事,*代表对所有用户和组生效,nofile代表文件同时打开的最大次数

二,解决集群主机过多而导致用户重复登陆网站的问题

在一个集群中,如果网站需要用户输入用户名和密码登陆之后才能继续访问,那么当用户登陆其中一台集群主机之后随着继续访问页面,请求可能被代理服务器轮询到另外一台服务器上,那么对于另外一台服务器来说用户并没有登陆,想查看登陆之后的页面还需要再次登陆,这样集群主机越多需要客户重复登陆的次数就越多

1,为了解决该问题,需要准备以下环境

首先在proxy主机:

cd
scp  lnmp_soft.tar.gz  [email protected]:/root   #给2.100和2.200分别拷贝软件包

然后到web1主机部署LNMP:

[root@web1 ~]# systemctl stop httpd
[root@web1 ~]# tar -xf lnmp_soft.tar.gz
[root@web1 ~]# cd lnmp_soft/
[root@web1 lnmp_soft]# tar -xf nginx-1.17.6.tar.gz
[root@web1 lnmp_soft]# cd nginx-1.17.6/
[root@web1 nginx-1.17.6]# yum -y install gcc make pcre-devel openssl-devel
[root@web1 nginx-1.17.6]#./configure
[root@web1 nginx-1.17.6]#make
[root@web1 nginx-1.17.6]#make install
yum -y install mariadb mariadb-server mariadb-devel
yum -y install php php-mysql php-fpm
systemctl start mariadb
systemctl start php-fpm
[root@web1 nginx]# vim conf/nginx.conf  //修改配置文件,实现动静分离,修改65~71行为以下状态
vim conf/nginx.conf    //修改配置文件,实现动静分离,修改65~71行为以下状态
   location ~ \.php$ {
       root           html;
       fastcgi_pass   127.0.0.1:9000;
       fastcgi_index  index.php;
        #   fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
       include        fastcgi.conf;
   }

配置好lnmp之后

[root@web1 nginx]# sbin/nginx    //开启服务
[root@web1 nginx]# cp ~/lnmp_soft/php_scripts/test.php html/    //拷贝测试文件

使用火狐浏览器访问http://192.168.2.100/test.php

cd ~/lnmp_soft/ php_scripts/
tar -xf php-memcached-demo.tar.gz    //释放带登录功能的网页
cp -r php-memcached-demo/* /usr/local/nginx/html/   //拷贝页面到nginx中

使用火狐浏览器访问http://192.168.2.100/index.php 可以看到有登录界面的网页

随意输入用户名和密码即可成功登录,关闭页面之后直接访问

http://192.168.2.100/home.php可以直接看到登录后页面

web1配置好之后,web2也按照一模一样的过程配置,防火墙都要关闭

2,然后在proxy主机配置集群,注意该主机不能有动静分离的配置

upstream web {     //在默认的虚拟主机上面添加集群
    server 192.168.2.100:80;
    server 192.168.2.200:80;
}

location / {
     proxy_pass http://web;  //然后在默认的虚拟主机中的location里调用集群
}
sbin/nginx -s reload  //重新加载配置文件

http://192.168.2.5/index.php 之后测试效果,不断刷新页面,会看到web1与web2的登录界面(需要提前在web1与web2的index.php页面进行标记)

注意!proxy主机不要配置动静分离


Session存储在服务器端,保存用户名、登录状态等信息

Cookies由服务器下发给客户端,保存在客户端的一个文件

保存的主要内容是sessionID

Session共享

客户 --------------> 服务器

客户Cookies --------------> 服务器Session

目前环境搭建好之后可以按以下步骤测试:

删除web1与web2的session文件

rm  -rf  /var/lib/php/session/*

删除火狐浏览器的历史记录(主要是cookies文件)

http://192.168.2.5/index.php //登录2次才能成功,目前登录2次是正常现象!!


3,上述实验由于web1与web2都是在各自的/var/lib/php/session目录中存储session,所以造成客户需要重复登录,为了统一session存储的位置(该存储方式通常被称为session共享),需要安装专门的数据库工具

测试数据库

memcache可以利用内存读写数据的高性能数据库服务

回到proxy主机:

yum -y install memcached telnet   //安装软件包
systemctl start memcached
telnet 127.0.0.1 11211
set abc 0 200 3     //创建变量abc(如果abc已经存在就是覆盖),0是不压缩数据,数据存储时间200秒,存3个字符
get abc    //获取变量abc
replace abc 0 200 3   //覆盖abc,此时变量abc必须存在
delete abc   //删除abc
add abc 0 200 3    //添加abc变量,如果abc已经存在则会添加失败
flush_all   //删除所有数据
quit   //退出

最后在web1与web2主机修改session存储的位置,实现session共享

vim /etc/php-fpm.d/www.conf  //按G到最后一页
php_value[session.save_handler] = memcache   //这里改成memcache,表示session的存储不在是本地的普通文件,而是去找memcache
php_value[session.save_path] = tcp://192.168.2.5:11211   //这里的路径修改为

安装了memcache服务的服务器地址与端口

yum -y install php-pecl-memcache   //安装php与memcached服务关联的软件包
systemctl restart php-fpm   //重启php-fpm服务

然后去web2做与web1相同的配置

然后关闭所有服务器的防火墙和selinux

最后清空浏览器的历史记录,再访问http://192.168.2.5/index.php仅仅登录一次即可成功


部署环境任务

查看"二阶段"文件夹中的"07_AUTOMATION"自动化运维文档

根据需求创建虚拟机

你可能感兴趣的:(Session与Cookie 、 部署memcached 、 Session共享)