目录
一.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端口)
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
/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.测试故障切换