lnmp架构之:PHP

目录

一.php源码编译

 二.静态编译(nginx结合php-fpm)

三.动态编译(添加memcache功能模块)

四.构建nginx高效缓存

五.tomcat结合memcache

一.php源码编译

1.编译nginx

2.软件下载:PHP: Downloads

3.软件编译

解压   tar jxf php-7.4.12.tar.bz2
yum install -y systemd-devel.x86_64 libxml2-devel sqlite-devel.x86_64 libcurl-devel.x86_64
libpng-devel   oniguruma-devel-6.8.2-1.el7.x86_64.rpm oniguruma-6.8.2-1.el7.x86_64.rpm (安装依赖性)
./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-mbstring --enable-bcmath --with-fpm-systemd
make
make install

4.初始化,拷贝php的配置文件

cd /usr/local/php/
cd etc/
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf  修改默认配置文件

 cd php-fpm.d/
 cp www.conf.default  www.conf
 cd php-7.4.12/
 cp php.ini-production /usr/local/php/etc/php.ini 把php的生产环境的主配置文件拷贝 到/usr/local/php/etc/php.ini
 vim /usr/local/php/etc/php.ini  修改时区

cd sapi/
cd fpm/
cp php-fpm.service /usr/lib/systemd/system 把php的systemd的启动脚本放到系统路径里边

 5.修改php的启动文件

vim /usr/lib/systemd/system/php-fpm.service    //默认php-fpm启动时只读挂载/usr目录
systemctl daemon-reload
systemctl start php-fpm

注:在启动php-fpm.service时会报错:[pool www] cannot get uid for user 'nginx'

解决办法就是:useradd nginx

 二.静态编译(nginx结合php-fpm)

cd /usr/local/nginx/
cd conf/
vim nginx.conf
nginx -t
nginx -s reload

 注:当用户访问以.php结尾的页面时,会通过fastcgi反向代理给后端的9000,

cd /usr/local/nginx/
cd html/
vim index.php

 在外部浏览器访问:

三.动态编译(添加memcache功能模块)

客户端 -->nginx -->fastcgi_pass -->*.php --> php-fpm:9000 -->memcache

1.下载memcache:PECL :: Package :: memcache (php.net)

2.软件编译

 tar zxf memcache-4.0.5.2.tgz
 cd memcache-4.0.5.2/
 vim .bash_profile
因为编译需要用到phpize,所以给系统环境变量添加phpize的路径

source .bash_profile
[root@server1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/php/bin
[root@server1 ~]# which php
/usr/local/php/bin/php
[root@server1 ~]# which phpize
/usr/local/php/bin/phpize
phpize
./configure --enable-memcache
make
make install
cd   /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/(扩展路径)

3.配置php加载模块:

vim php.ini
systemctl reload php-fpm.service  reload使更改生效
[root@server1 etc]# php -m | grep memcache
memcache

cd memcache-4.0.5.2/
cp memcache.php example.php /usr/local/nginx/html/
把memcache.php example.php 复制到默认发布页面
yum install -y memcached
systemctl start memcached.service
netstat -antlp 

4. 访问:192.168.78.139/example.php

cd   /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/
vim   memcache.php

访问192.168.78.139/memcache.php

 刷新:192.168.78.139/example.php

再次访问192.168.78.139/memcache.php

5.测试:

ab -c10 -n1000 http://192.168.78.139/index.php

  ab -c10 -n1000 http://192.168.78.139/example.php(用了memcache加速后)

四.构建nginx高效缓存

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

 使用memc-nginx和srcache-nginx模块构建高效缓存策略

传统的缓存策略:客户端 -->nginx -->fastcgi_pass -->*.php --> php-fpm:9000 -->memcache

高效缓存策略:客户端 --> nginx -->memcache

1.停掉nginx(构建高速缓存用到的openresty是nginx的一个分支,openresty也会监听80端口)

2.下载OpenResty - Download

3.编译

tar zxf openresty-1.19.9.1.tar.gz
cd openresty-1.19.9.1/
./configure --with-http_stub_status_module --with-http_ssl_module
make 
make install
cd /usr/local/openresty/nginx/conf
vim nginx.conf

当所请求的uri以“.php”结尾时,首先到memcache中查询有没有以$uri$args为key的数据,如
果有则直接返回;否则,执行location的逻辑,如果返回的http状态码为200,则输出前以
$uri$args为key,将输入结果存入memcache  
4.启动
/usr/local/openresty/nginx/sbin/nginx -t  检测语法
(/usr/local/openresty/nginx/sbin/nginx 启动)
/usr/local/openresty/nginx/sbin/nginx  -s reload 重载,时更改生效
netstat -antlp

 5.测试:拷贝测试页面到当前

cd /usr/local/openresty/nginx/html
cp /usr/local/nginx/html/example.php .   把测试页面拷到当前
cp /usr/local/nginx/html/index.php .
 ab -c10 -n1000 http://192.168.78.139/index.html  静态压测
 ab -c10 -n1000 http://192.168.78.139/index.php
 ab -c10 -n1000 http://192.168.78.139/example.php

五.tomcat结合memcache

1.停掉openresty,启动nginx

/usr/local/openresty/nginx/sbin/nginx -s stop 
nginx

 2.在重新打开两台虚拟机,并安装tomocat

yum install java-1.8.0-openjdk.x86_64
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
cd /usr/local/
ln -s apache-tomcat-7.0.37/ tomcat
cd tomcat/bin/
 ./startup.sh 启动
netstat -antlp  查看是否有8080端口

3.在server1里

cd /usr/local/nginx/conf/  回到原先的nginx
vim nginx.conf

nginx -t 检测语法
nginx -s reload 重载

4.在外部访问:

访问192.168.78.144/index.jsp,定向到后端的tomcat上,因为tomcat和nginx的默认发布目录不一样,所以图片加载不出来

 访问192.168.78.141:8080/index.jsp     和 访问192.168.78.142:8080/index.jsp

5.重新编译nginx

unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
cd nginx-1.22.0/
./configure --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make
cd objs/
\cp -f nginx /usr/local/nginx/sbin/nginx   把nginx的二进制程序强制复到/usr/local/nginx/sbin/nginx
cd /usr/local/nginx/conf/
vim nginx.conf
nginx -t
nginx

mv test.jsp /usr/local/tomcat/webapps/ROOT/
scp test.jsp server3:/usr/local/tomcat/webapps/ROOT/

6.配置tomcat

在另外两台虚拟机
/usr/local/tomcat/bin/shutdown.sh 
yum install -y memcached
systemctl enable --now memcached.service
netstat -antlp  查看11211端口
cd  /usr/local/tomcat/conf
vim  context.xml

在server2和server3上:
拷jar包到/usr/local/tomcat/lib
/usr/local/tomcat/bin/startup.sh  启动
cd /usr/local/tomcat/log
cat catalina.out   查看日志
INFO: MemcachedSessionService finished initialization, sticky true, operation timeout 1000, with node ids [n2] and failover node ids [n1]  一定要看到这条命令。
 

 7.测试故障切换

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值