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访问