LINUX学习------Linux自动化运维——NGINX+PHP

Nginx,PHP配置
PHP 即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中

一、PHP的源码编译

1、获取PHP软件包

在这里插入图片描述

2、编译php

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx  --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring  --enable-bcmath --with-fpm-systemd 		##配置
依赖性:
yum install -y systemd-devel
yum install -y libxml2-devel 
yum install -y sqlite-devel 
yum install -y libcurl-devel 
yum install libpng-devel -y oniguruma-devel   #此安装包不在软件仓库中,需手动下载 
yum install oniguruma-6.8.2-1.el7.x86_64.rpm 
yum install oniguruma-devel-6.8.2-1.el7.x86_64.rpm
make				##编译
make install 	 	##部署

完成在这里插入图片描述在这里插入图片描述
在这里插入图片描述

二、PHP_FPM

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器

1、php_fpm文件配置

(1)

cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
cd /usr/local/php/etc/php-fpm.d
cp www.conf.default www.conf

在 php-fpm.conf配置文件中取消此行注释
在这里插入图片描述
(2)

cd /root/php-7.4.12/
cp php.ini-production /usr/local/php/etc/php.ini
cd /usr/local/php/etc/
vim php.ini 

在 php.ini 配置文件中取消此行注释并修改
在这里插入图片描述(3)
添加php-fpm.service服务为系统进程

cd /root/php-7.4.12/sapi/fpm
vim php-fpm.service
cp php-fpm.service /usr/lib/systemd/system
systemctl daemon-reload
systemctl start php-fpm.service

编辑 php-fpm.service配置文件注释此行
在这里插入图片描述

2、nginx+php-fpm

server1配置文件中去掉注释并修改

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;
}

在这里插入图片描述编写php发布文件
在这里插入图片描述

实验测试
在这里插入图片描述

3、添加环境变量

cd /usr/local/lnmp/php/bin/
pwd			##/usr/local/lnmp/php/bin
cd
vim .bash_profile	##在.bash_profile文件添加文件路径
///
PATH=$PATH:$HOME/bin:/usr/local/lnmp/php/bin
///
source .bash_profile 		##使其生效
which php					##/usr/local/lnmp/php/bin/php
which phpize				##/usr/local/lnmp/php/bin/phpize
echo $PATH

在这里插入图片描述

三、memcache模块

1、memcache 安装和编译

下载memcache并解压 
cd /root/memcache-4.0.5.2 
yum install autoconf -y 
yum install automake.noarch -y 
phpize				##扩展成功 

在这里插入图片描述
对memcache进行源码编译
make
make install
cd /usr/local/php/etc/
vim php.ini
systemctl reload php-fpm.service
php -m | grep memcache
在这里插入图片描述vim php.ini 更改配置文件
在这里插入图片描述出现memcache表示添加成功
在这里插入图片描述

2、构建nginx高速缓存

使用memc-nginx模块构建高效透明的缓存机制。如果需要做到高速缓存,nginx可以跳过php直接向memcache存储,但是只能做静态存储 ,如果需要动态存储,还是要调用php,通过php调用到数据后下一次nginx就可以直接从memcache那里取,效率大大提高。因此高速缓存时两种策略在同时进行。

在这里插入图片描述

cd memcache-4.0.5.2/ 
cp example.php memcache.php /usr/local/nginx/html/ 
yum install memcached -y 
cat /etc/sysconfig/memcached 		##11211端口
netstat -antlp
cd /usr/local/nginx/html/
vim memcache.php
nginx -s reload	
systemctl start php-fpm.service	
systemctl start memcached.service  

在这里插入图片描述
在这里插入图片描述
配置memcache.php文件
在这里插入图片描述分别访问172.25.22.1/example.php和memcache.php测试页
在这里插入图片描述
在这里插入图片描述

此时我们可以看到,当前的信息处理率不能达到百分百,需要进行优化。

在真机中执行压力测试命令,对其进行优化

 ab -c20 -n 1000 http://172.25.7.1/example.php 

在这里插入图片描述刷新页面,可以看到经真机的压力测试,信息处理率达到百分百
在这里插入图片描述

四、配置php加载模块openresty

基于openresty(构建高效透明的缓存机制) 访问,能将缓存放在nginx中,速度更快,是基于Nginx的核心Web应用程序服务器。

nginx -s stop					##停止之前的nginx
tar zxf openresty-1.19.3.1.tar.gz
cd openresty-1.19.3.1/
./configure --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
 make&&make install
 vim /usr/local/openresty/nginx/conf/nginx.conf
 ///
user  nginx;
worker_processes  auto;

events {
    worker_connections  65535;
}

        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;
        }
///

cd ..
cd html/
cp /usr/local/nginx/html/example.php .		
cp /usr/local/nginx/html/index.php .
/usr/local/openresty/nginx/sbin/nginx -t
/usr/local/openresty/nginx/sbin/nginx -s reload
报错 nginx: [error] invalid PID number "" in "/usr/local/openresty/nginx/logs/nginx.pid"
/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf				##指定nginx.conf文件的位置
/usr/local/openresty/nginx/sbin/nginx -s reload

真机浏览器访问:
在这里插入图片描述

此时在真机中压力测试
在这里插入图片描述

更改配置提升性能

vim /usr/local/openresty/nginx/conf/nginx.conf
http {
        upstream memcache {
        server 127.0.0.1:11211;
        keepalive 512;					##保持512个不立即关闭的连接用于提升性能
        }

    include       mime.types;
    default_type  application/octet-stream;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /memc {
        internal;						##表示只接受内部访问
        memc_connect_timeout 100ms;
        memc_send_timeout 100ms;
        memc_read_timeout 100ms;
        set $memc_key $query_string;	##使用内置的$query_string来作为key
        set $memc_exptime 300;			##表示缓存失效时间
        memc_pass memcache;
        }

/usr/local/openresty/nginx/sbin/nginx -t
/usr/local/openresty/nginx/sbin/nginx -s reload

在真机中再次进行压力测试
ab -c10 -n 5000 http://172.25.7.1/example.php
ab -c10 -n 5000 http://172.25.24.1/index.php
在这里插入图片描述

五、 tomcat结合memcache实现session交叉存放

什么是session?
session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。

为了对数据的保存更加牢靠,我们选择交叉存放session的方法,即将访问tomcat1上的数据存放在memcache2中,将访问tomcat2上的数据存放在memcache1中,这样存放,当某个tomcat服务断了之后,访问它的客户session并不会消失,而是存放在了对立的memcache,如果存放session的memcache坏了,那么它的数据会立即切换到另一个memcached中…

tomcat下载地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src/master/

在server2和server3主机中操作:
下载apache-tomcat-7.0.37.tar.gz和 jdk-8u121-linux-x64.rpm安装包

在server2中:///
tar zxf apache-tomcat-7.0.37.tar.gz  #解压
rpm -ivh  jdk-8u121-linux-x64.rpm  #安装rpm包
mv apache-tomcat-7.0.37 /usr/local/ #移动目录到指定路径下
cd /usr/local/
ln -s apache-tomcat-7.0.37/ tomcat  #方便起见建立tomcat软连接
cd /usr/local/tomcat/webapps/ROOT/
lftp 172.25.254.250  #连接服务器下载文件 
cd /pub/docs/lamp
get test.jsp    #下载一个.jsp文件,用于后面测试
cd /usr/local/tomcat/bin
ls    #bin目录中有启动和停止tomcat的脚本
./startup.sh  #启动tomcat
\\\
在server3中可以不必下载,直接从server2中scp传输即可
相同的操作,最终启动tomcat 

配置server1主机中的nginx.conf配置文件
vim /usr/local/nginx/conf/nginx.conf
利用sticky模块,将server2,server3的8080端口写入
在这里插入图片描述
在这里插入图片描述

nginx -t 
nginx -s reload

此时可以在浏览器中访问172.25.7.1/test.jsp
可以看到如下:
在这里插入图片描述
在server2中,配置tomcat
交叉存储,所以我们的两台tomcat(server2、server3)分别对应的是memcache (n2、n1)

cd /usr/local/tomcat/conf
vim context.xml

 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
 memcachedNodes="n1:172.25.7.2:11211,n2:172.25.7.3:11211"
 failoverNodes="n1"
 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
 />

正常运行的情况下server2中的tomcat往n2中储存,server3中的tomcat往n1中储存,如下图,在server2中的储存策略 failoverNodes=“n1” 当交叉存储失败时server2与n1连接

在这里插入图片描述
cd /usr/local/tomcat/lib下

lftp 172.25.254.250
cd /pub/docs/lamp/jar
mget *      #下载所有tomcat所匹配的jar包
exit
ls
rm -fr memcached-session-manager-tc6-1.6.3.jar    #删除6版本的memcache
cd /usr/local/tomcat/bin
./startup.sh    #启动

重新启动tomcat,再在浏览器中访问
此时可以看到
在这里插入图片描述
此时浏览器显示的是server3中的tomcat2,由于我们用的是sticky模块,即当server3中的tomcat2宕掉时,server2中的tomcat1会接手
这里我们可以停掉serve3中的tomcat

/usr/local/tomcat/bin/shutdown.sh   #关闭tomcat2

在这里插入图片描述
在server3中 配置tomcat,与server2一样配置

cd /usr/local/tomcat/conf
vim context.xml
\\\
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.7.2:11211,n2:172.25.7.3:11211"
failoverNodes="n2"         ##此处当存储失败时访问n2设备
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
\\\

cd /usr/local/tomcat/lib下

lftp 172.25.254.250
cd /pub/docs/lamp/jar
mget *
exit
ls
rm -fr memcached-session-manager-tc6-1.6.3.jar    #删除6版本的memcache
cd /usr/local/tomcat/bin
./startup.sh

在server2、server3中都下载telnet.x86_64
yum install telnet.x86_64 -y

此时可以在浏览器中输入几组名字密码
用tenet指令在对应的tomcat上查看
此处访问到的是server3的tomcat,默认储存在了n1中,n1的memcache是server2中的设备,故应该在server2中才能查看到我们输入的两组数据
在这里插入图片描述
#这里我们分别在servre2 server3中输入指令进行查看
telnet localhost 11211
get 76227198A7AD4E5BB850EE59580FCC5E-n1 #此处的id号是浏览器中显示的

在这里插入图片描述
在这里插入图片描述
结果只有在server2中才可以查看到结果

那么这样的交叉存储如果n1的memcache在我们存储过程中突然坏掉或者被关掉会怎么样呢

这里我们将server2中的memcache停掉

systemctl stop memcache.service

继续在浏览器中输入一组数据
在这里插入图片描述
浏览器中server3的设备自动变换为了n2,此时我们可以看到,当server3交叉存储失败的时候将会存储在自己主机中的n2,memcache中
此时的信息我们应该在server3中的memcache访问
在这里插入图片描述
成功查到新输入的数据
这就是nginx+tomcat+memcache实现session交叉存放的原理!

六、goaccess日志可视化

下载地址: http://tar.goaccess.io/goaccess-1.4.tar.gz

安装:
这里我直接获取本地资源

lftp 172.25.254.250
cd pub/docs/lamp
get goaccess-1.4.tar.gz\
tar zxf goaccess-1.4.tar.gz   #解压
./configure --enable-utf8 --enable-geoip=legacy   #安装测试
测试缺少两个插件,需要安装
lftp 172.25.254.250
cd pub/docs/lamp
get GeoIP-devel-1.5.0-13.el7.x86_64.rpm  
exit
rpm -ivh  GeoIP-devel-1.5.0-13.el7.x86_64.rpm 
yum install ncurses-devel.x86_64    ##安装这两个缺少的插件
重新configure
make 
make install

可视化日志监控

cd /usr/local/nginx/logs
ls
goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html   ##监控access.log日志

浏览器访问172.25.7.1/report.html 可以看到可视化日志
在这里插入图片描述

可以在真机中压力测试,增加请求量
ab -c10 -n 1000 http://172.25.7.1/index.html #增加1000访问
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值