通过Nginx调度器负载后端两台Web服务器,实现以下目标:

- 部署Nginx为前台调度服务器

- 调度算法设置为轮询

- 后端为两台LNMP服务器

- 部署测试页面,查看PHP本地的Session信息

概念:Session:存储在服务器端,保存用户名、登陆状态等信息。Cookies:由服务器下发给客户端,保存在客户端的一个文件里。保存的内容主要包括:SessionID

拓扑环境:使用4台RHEL7虚拟机,其中一台作为Nginx前端调度器服务器(eth0:192.168.4.5,eth1:192.168.2.5)、两台虚拟机部署为LNMP服务器,分别为Web1服务器(192.168.2.100)和Web2服务器(192.168.2.200),另外一台作为测试用的Linux客户机(192.168.4.10)

拓扑图:

步骤:

一, 部署后端LNMP服务器相关软件

注意:以下部署LNMP服务器的操作,需要在两台后端服务器做相同的操作,下面以Web2服务器(192.168.2.200)为例,对Web1服务器执行相同操作即可。

[root@web2 ~]# yum -y install gcc openssl-devel pcre-devel   #yum安装基础依赖包

[root@web2 ~]# tar -xf nginx-1.12.2.tar.gz

[root@web2 ~]# cd nginx-1.12.2

[root@web2 nginx-1.12.2]# ./configure \      #源码安装Nginx

> --with-http_ssl_module

[root@web2 nginx-1.12.2]# make && make install

[root@web2 ~]# yum -y install mariadb mariadb-server mariadb-devel     #安装MariaDB数据库

[root@web2 ~]# yum -y install php php-mysql php-fpm     #安装PHP

[root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf       #修改Nginx配置文件的默认首页与动静分离)

location / {

root html;

index index.php index.html index.htm;

}

location ~ \.php$ {               #启用动态页面

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi.conf;      #修改默认文件为fastcgi.conf

}

二, 启动LNMP服务器相关的服务

[root@web2 ~]# systemctl stop httpd      #如果该服务存在,则关闭,以避免端口冲突

[root@web2 ~]# systemctl start mariadb    #启动MySQL服务

[root@web2 ~]# systemctl status mariadb

[root@web2 ~]# systemctl start php-fpm     #启动PHP-FPM服务

[root@web2 ~]# systemctl status php-fpm

三, 修改Nginx配置文件,实现代理服务器

- 通过upstream定义后端服务器地址池,默认调度策略为轮询,使用proxy_pass调用upstream定义的服务器地址池

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf

...

http{

upstream webs {

server 192.168.2.100:80;

server 192.168.2.200:80;

}

server {

listen 80;

server_name localhost;

location / {

proxy_pass http://webs;

root html;

index index.php index.html index.htm;

}

...

[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload    #重新加载配置文件

[root@client ~]# curl http://192.168.4.5/index.html    #浏览器访问,查看默认页面加载是否成功

四, 部署web1与web2的测试页面

1. 部署 web1 的测试页面

[root@web1 ~]# tar -xf php-memcached-demo.tar.gz    //找一个php的测试页面

[root@web1 php_scripts]# cd php-memcached-demo

[root@web1 php-memcached-demo]# ls
home.php  images  index.php  login.php  README.md  style.css

[root@web1 php-memcached-demo]# cp -r * /usr/local/nginx/html/      #拷贝php页面到Nginx的网页目录下

[root@web1 php-memcached-demo]# vim home.php

<body bgcolor=blue>    #定义home.php的页面颜色为blue, 以便于区分后端两台不同的web服务器

[root@web1 php-memcached-demo]# vim index.php

<body bgcolor=red>    #定义index.php的页面颜色为red,以便于区分后端两台不同的web服务器

1.1 浏览器访问后端服务器 web1 的测试页面

[root@web1 ~]# firefox http://192.168.2.100       #在web1网站上注册用户,密码

[root@web1 ~]# cd /var/lib/php/session/

[root@web1 ~]# ls     #查看服务器本地生成的Session信息

sess_ahilcq9bguot0vqsjtd84k7244       #Session信息是随机分配的

2. 部署 web2 的测试页面

[root@web2 ~]# tar -xf php-memcached-demo.tar.gz    //找一个php的测试页面

[root@web2 php_scripts]# cd php-memcached-demo

[root@web2 php-memcached-demo]# ls
home.php  images  index.php  login.php  README.md  style.css

[root@web2 php-memcached-demo]# cp -r * /usr/local/nginx/html/      #拷贝php页面到Nginx的网页目录下

[root@web2 php-memcached-demo]# vim home.php

<body bgcolor=blue>    #定义home.php的页面颜色为blue, 以便于区分后端两台不同的web服务器

[root@web2 php-memcached-demo]# vim index.php

<body bgcolor=red>    #定义index.php的页面颜色为red,以便于区分后端两台不同的web服务器

2.1 浏览器访问后端服务器 web2 的测试页面

[root@web2 ~]# firefox http://192.168.2.200       #在web2网站上注册用户,密码

[root@web2 ~]# cd /var/lib/php/session/

[root@web2 ~]# ls     #查看服务器本地生成的Session信息

sess_qqek1tmel07br8f63d6v9ch401    #Session信息是随机分配的

五, 浏览器访问前端调度器Nginx,查看页面

root@client ~]# google-chrome http://192.168.4.5

-  填写注册信息后,刷新,还需要再次注册,说明两台计算机使用的是本地Session.

- 因为,第二台主机并不知道你在第一台主机已经登录,第一台主机的登录信息也没有传递给第二台主机.

- 也就是当前存在的问题: 不同后端web服务器的Session不一致,即没有实现Session的共享.

- 如何实现Session共享,在后面的随笔再介绍.

结束.

实验查看PHP本地的Session信息的更多相关文章

  1. 二十一.构建memcached服务、LNMP+memcached、PHP的本地Session信息、PHP实现session共享

    proxy client web1 web2   1.构建memcached服务 ]# yum -y install memcached ]# cat /etc/sysconfig/memcached ...

  2. 查看历史会话等待事件对应的session信息

    此处以enq: TX - row lock contention等待时间为例. 查看snap_id对应时间 select to_char(s.startup_time,'dd Mon "at ...

  3. 查看锁定的session信息脚本

    查看当前被阻塞的对象和锁信息SELECT DISTINCT       s1.inst_id BlockingInst,       s1.sid BlockingSid,       s1.seri ...

  4. 绑定本地的Session

    绑定本地的Session图示解析: 代码的结构: 代码: SaveServlet.java package com.itheima.servlet; import java.io.IOExceptio ...

  5. 【转载】如何查看sqlserver客户端的版本号信息

    在sqlserver的使用过程中,有时候可能会因为sqlserver版本过低等原因的导致无法附加以及还原数据库,我们可以通过sql server management studio软件的帮助菜单参看到 ...

  6. HCIA-datacom 4.2 实验二:本地AAA配置实验

    关于本实验 AAA是Authentication(认证).Authorization(授权)和Accounting(计费)的简称,是网络安全的一种管理机制,提供了认证.授权.计费三种安全功能.这三种安 ...

  7. 与子域名共用session信息

    参考自 http://www.jb51.net/article/19664.htm 下面的步骤只使用于两个域名在同一个服务起得情况下,如果不在一个服务器上,就需要考虑通过数据库来存储session信息 ...

  8. 获取本地IP地址信息

    2012-06-05    /// <summary>         /// 获取本地IP地址信息         /// </summary>         void G ...

  9. 记录关于使用ADO.NET 连接池连接Oracle时Session信息不更新的坑

    最近的一个项目中,由于界面查询的数据量比较大,关联的表比较多,有些数据查出来需要临时保存起来供后面的查询使用,于是想到了用oracle的临时表来实现这个需求.大家都知道,oracle的临时表有两种:事 ...

随机推荐

  1. SpringCloud 教程 (六)断路器聚合监控(Hystrix Turbine)

    一.Hystrix Turbine简介 看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbi ...

  2. 使用清华大学提供的 Anaconda 镜像下载 Python 软件包

    使用清华大学提供的 Anaconda 镜像下载 Python 软件包 pip install -i http://pypi.tuna.tsinghua.edu.cn/simple tensorflow ...

  3. fedora18 You might need to install dependency packages for libxcb.

    22 down vote The page Qt for X11 Requirements lists some packages required to build Qt on Debian. Th ...

  4. 安装python是提示 0x80072f7d 错误的解决办法

    最简单的方法: Internet 选项-> 高级里面 勾选使用TLS1.1和使用TLS1.2即可.实际测试是ok的

  5. day51—JavaScript绑定事件

    转换学开发,代码100天——2018-05-06 今天学习JavaScript的绑定事件.因为浏览器的原因绑定事件需要考虑兼容性问题. attachEvent     IE浏览器 ,ie9以上事件执行 ...

  6. PANIC: Missing emulator engine program for ‘x86’ CPU.

    参考链接:https://zhidao.baidu.com/question/652153765084187325.html 解决方案:看图最上面路径,进入你的文件夹下,把红文件夹 ( 1 ) 中的所 ...

  7. OpenStack 多节点纳管 vCenter 5.5

    目录 目录 测试环境 Nova 配置OpenStack 纳管 vCenter 虚拟机 Glance 配置OpenStack 纳管 vCenter 镜像 Cinder 配置OpenStack 纳管 vC ...

  8. javaweb学习总结(十)——HttpServletRequest对象(一) https://www.cnblogs.com/xdp-gacl/p/3798347.html

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  9. vue组件父子间通信02

    三.组件间通信($parent $refs) 父组件要想获取子组件的数据:①在调用子组件的时候,指定ref属性<child-component ref="mySon"> ...

  10. CSP2019 —— 今年欢笑复明年,不知退役在眼前

    关于2019CSP-J/-S的一些体会 又是一年退役季,想起在群里看到大佬的一句诗,感慨万千. 今年欢笑复明年,不知退役在眼前 于是便心生文意,随便写点东西来给自己康康. 先说说这次的成绩吧.大家应该 ...