Nginx中、PHP配置、nginx结合php-fpm、memcache模块、openresty模块
一、PHP的源码编译
1、软件包下载
https://www.php.net/
##解压
tar -xjf php-7.4.12.tar.bz2
2、编译php
configure
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/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 #此安装包不在软件仓库中,csdn中搜索下载
yum install oniguruma-6.8.2-1.el7.x86_64.rpm
yum install oniguruma-devel-6.8.2-1.el7.x86_64.rpm
configure完成
编译 make
安装 make install
二、拷贝php-fpm配置文件
1、php-fpm.conf
2、www.conf
进入php-fpm.conf文件,将注释打开
3、php.ini
设置地区时间
4、php-fpm.service,读取并开启服务
注释
三、nginx中使用php-fpm
1、修改nginx配置文件
进入nginx的配置目录,编辑配置文件,注释之前的设定,取消php的注释
cd /usr/local/nginx
vim conf/nginx.conf
nginx -s reload
在html中编写php发布页面,重新启动服务,在真机浏览器访问http://172.25.73.1/index.php
2、添加环境变量
四、php添加memcache功能模块
1、软件包准备
http://pecl.php.net/package/memcache ##网址下载
2、软件安装
解压软件包进入目录,执行phpize,提醒缺少依赖。phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块。
安装依赖,重新phpize
yum install autoconf -y
yum install automake.noarch -y
phpize ##扩展成功
对memcache进行源码编译、make、mkae install
./configure --enable-debug
make
make install
编辑php.ini ,然后重启服务,执行php -m可以看到memcache
cd /usr/local/lnmp/php/etc/
ls
vim php.ini
///
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ; ##在这个位置
;;;;;;;;;;;;;;;;;;;;;;
938 extension=memcache ##连接php与memcache服务
///
php -m | grep memcache ##出现memcache表示添加成功
systemctl reload php-fpm.service
php -m ##测试php服务是否正常,可以看到memcache
3、构建nginx高速缓存,添加memcache功能模块
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制。先安装memcached,并开启服务,查看端口。
yum install -y memcached
systemctl start memcached.service
netstat -antlp ##11211端口
cat /etc/sysconfig/memcached ##11211端口
cd memcache目录,拷贝文件并编译,最后重启服务
cd
cd memcache-4.0.5.2/
ls
cp example.php /usr/local/nginx/html/
cp memcache.php /usr/local/nginx/html/
cd /usr/local/nginx/html/
ls
vim memcache.php
///
define('ADMIN_PASSWORD','root'); // Admin Password ##设定密码
$MEMCACHE_SERVERS[] = '172.25.73.1:11211'; // add more as an array ##server1IP
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array ##注释
///
nginx -s reload ##重启nginx
systemctl start php-fpm.service ##开启服务
systemctl start memcached.service ##开启服务
此时服务配置成功,访问172.25.73.1/memcache.php。使用 用户名,密码 登陆
五、配置php加载模块openresty
基于openresty(构建高效透明的缓存机制) 访问,能将缓存放在nginx中,速度更快
1、准备
nginx -s stop ##先停止nginx服务
https://openresty.org/cn/ ##软件下载
2、软件安装
tar zxf openresty-1.19.3.1.tar.gz
ls
cd openresty-1.19.3.1/
ls
./configure --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
make
make install
3、软件配置
cd /usr/local/openresty/nginx.conf
vim 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
ERROR
/usr/local/openresty/nginx/sbin/nginx -s reload
报错 nginx: [error] invalid PID number "" in "/usr/local/openresty/nginx/logs/nginx.pid"
解决:使用nginx -c的参数指定nginx.conf文件的位置,conf文件的位置在nginx -t的返回信息中
/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
/usr/local/openresty/nginx/sbin/nginx -s reload
4、更改配置改进一步来提升性能
cd /usr/local/openresty/nginx/conf
vim 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
5、在真机进行压力测试
ab -c10 -n 5000 http://172.25.73.1/example.php
///
Complete requests: 5000
Failed requests: 0
Total transferred: 1425000 bytes
HTML transferred: 580000 bytes
///
##可以看到压测速度很快,且没有报错,速度很快。
ab -c10 -n 5000 http://172.25.73.1/index.php
///
Complete requests: 5000
Failed requests: 492
(Connect: 0, Receive: 0, Length: 492, Exceptions: 0)
Total transferred: 358824457 bytes
HTML transferred: 357979457 bytes
///
##传输量大幅度提升
六、tomcat + memcache 高可用
1、在server2 与 server3 安装 jdk 与 tomcat
向 server3 部署 tomcat 与 jdk 的操作
bin/shutdown.sh ##关闭服务进行scp
netstat -antlp
cd /usr/local/
scp -r tomcat/ server3:/usr/local/
scp jdk-8u121-linux-x64.rpm server3:
在server3的操作
rpm -ivh jdk-8u121-linux-x64.rpm ##安装
cd /usr/local/
cd tomcat/
bin/startup.sh ##开启服务
netstat -antlp ##查看端口
2、重新启动server2 的 tomcat
在浏览器使用172.25.73.2:8080访问
在浏览器使用172.25.73.3:8080访问
3、tomcat+Nginx
在server1中
cd /usr/local/nginx/conf
vim nginx.conf
http {
upstream tomcat {
server 172.25.73.2:8080;
server 172.25.73.3:8080;
}
}
location / {
root html;
index index.html index.htm index.php index.jsp;
}
server{
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
}
nginx -t
nginx -s reload
在浏览器使用172.25.73.1/index.jsp访问到此页面
在server2 的==/usr/local/tomcat/webapps/ROOT添加一个test.jsp页面
在server3 的/usr/local/tomcat/webapps/ROOT==添加一个test.jsp页面
使用浏览器访问,并添加数据,查看日志
cd /usr/local/tomcat/logs
cat catalina.out
可以看到刚刚在网页添加的数据,此时将server2的 tomcat 关闭,继续输入新的数据,Nginx的健康检测会快速切换到server3,不会影响输入数据,但是刚刚在网页输入的数据丢失
3、tomcat结合memcache实现实现session共享
为了解决上述问题,在实际生产中都是tomcat结合memcache实现实现session共享
当服务开启时:
server2的tomcat将数据保存在server3的session中
server3的tomcat将数据保存在server2的session中
当server2的tomcat关闭,server3将数据保存在server3的session中
当server3的tomcat关闭,server2将数据保存在server2的session中
1、在server2与server3安装memcached
yum install -y memcached
systemctl start memcached
2、配置server2 与 server3
server2中
cd /usr/local/tomcat/conf
vim context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.73.2:11211,n2:172.25.72.3:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
/
下载jar包 如图下
cd /usr/local/tomcat/lib
cd /usr/local/tomcat ##关闭重启服务
bin/shutdown.sh ##关闭服务
bin/startup.sh ## 在开启服务
tail -f logs/catalina.out ##查看日志 出现配置文件[n1]代表成功
在server3中
cd /usr/local/tomcat/conf
vim context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.73.2:11211,n2:172.25.72.3:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
/
下载jar包 如图上
cd /usr/local/tomcat/lib
cd /usr/local/tomcat ##关闭重启服务
bin/shutdown.sh ##关闭服务
bin/startup.sh ## 在开启服务
tail -f logs/catalina.out ##查看日志 出现[n2]代表成功
访问页面建立user1、user2、、、、红色标记的ID可以用telnet查询
要在server2、server3中下载
cd /usr/local/tomcat
yum install -y telnet
telnet localhost 11211
get ID 查询
此时关闭server2的tomcat,在网页继续输入数据,然后查询,数据没有丢失并且在写入