PHP

网页编程语言
php官网
实验环境:rhel7.6 selinux and iptables disabled
实验主机: server1 172.25.2.1 php
server2 172.25.2.2 tomcat
server3 172.25.2.3 tomcat

一.PHP源码编译

server1
get php-7.4.12.tar.bz2
yum install bzip2 -y
tar jxf php-7.4.12.tar.bz2
rpm -qa | grep php  #检查本机是否安装rpm版本的php
yum install systemd-devel -y  #软件包依赖性
yum install libxml2-devel -y
yum install sqlite-devel -y
yum install libcurl-devel.x86_64 -y
yum install gd-devel-2.0.35-26.el7.x86_64.rpm -y  #后面这三个包自己下的
yum install oniguruma-6.8.2-1.el7.x86_64.rpm oniguruma-devel-6.8.2-1.el7.x86_64.rpm -y

cd php-7.4.12/
./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  #软件编译
make
make install

生成配置文件

cd /usr/local/lnmp/php/etc  #拷贝php-fpm配置文件
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d/
cp www.conf.default www.conf
cd /root/php-7.4.12/
cp php.ini-production /usr/local/lnmp/php/etc/php.ini

cd sapi/fpm/  #拷贝并修改php-fpm启动文件
cp php-fpm.service /etc/systemd/system/  #生成启动脚本
vim /etc/systemd/system/php-fpm.service
 21 ProtectSystem=false  #默认php-fpm启动时只读挂载/usr目录
cd /usr/local/lnmp/php/etc
vim php.ini
962 date.timezone = Asia/shanghai  #修改时区

在这里插入图片描述

cd /usr/local/nginx/conf/
vim nginx.conf
    server {
        listen       80;
        server_name  www.westos.org;
		location / {
            root   html;
            index  index.php index.html index.htm;  #默认发布php
        }
        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;
        }
 }
 nginx -s reload
 cd /usr/local/nginx/html/
 vim index.php
 <?php
phpinfo()
?>

在这里插入图片描述

二.nginx结合php-fpm

(一)php和memcached

Memcached 是一个自由、源码开放、高性能、分布式内存对象缓存系统,目的在于通过减轻数据库负载来使动态 Web 应用程序提速。通过在内存里维护一个统一的巨大的 Hash 表,能够用来存储各种格式的数据.可以类比于 MySQL 这样的服务,而 PHP 扩展的 Memcache 实际上是连接Memcache 的方式。

server1
/usr/local/lnmp/php/bin  #这些都是命令
vim ~/.bash_profile  #将其加入环境变量
source ~/.bash_profile
php -m | grep memcache  #过滤一下,有没有memcache模块
get memcache-4.0.5.2.tgz   #安装缓存模块
tar zxf memcache-4.0.5.2.tgz
cd memcache-4.0.5.2/
yum install autoconf -y  #还需要一个程序
phpize  #生成configure程序
./configure   #直接用默认配置
make
make install
/usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20190902/memcache.so  #memcache提供了这个
vim /usr/local/lnmp/php/etc/php.ini
 887 extension=memcache.so  #左右,调用memcache
systemctl reload php-fpm.service
 
 [root@server1 etc]# php -m | grep memcache
memcache  #模块已加入
yum install memcached -y  #安装memcache后台控制器
systemctl start memcached.service
[root@server1 etc]# netstat -antlp | grep :11211
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      3218/memcached      
tcp6       0      0 :::11211                :::*                    LISTEN      3218/memcached
yum install telnet -y   #memcacehd 的set命令

cp /root/memcache-4.0.5.2/example.php memcache.php /usr/local/nginx/html/  ##模块中有例子,拿来测试一下,其中这个memcache.php里面有密码认证,可以自行修改
yum install telnet -y  
add key flag expiretime bytes  #key : 给这个值设置一个名字;flag : 标志,是一个整数;expiretime : 有效期,以秒为单位,0表示没有延迟;bytes : 这是一个需要存储在memcached的数据的长度;value : 是一个需要存储的数据。数据需要将通过在新的一行后输入
value

在这里插入图片描述

在这里插入图片描述

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

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

(二)openresty+memcached

构建nginx高速缓存,使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
传统缓存策略
高效缓存策略

1.安装

server1
http://openresty.org/en/linux-packages.html#rhel  #访问openresty官网,找对应的系统版本安装源
cd /etc/yum.repos.d/
wget https://openresty.org/package/rhel/openresty.repo  #添加网络源仓库
yum install openresty  #安装软件
[root@server1 yum.repos.d]# rpm -qa | grep openresty  #安装了四个
openresty-zlib-1.2.11-3.el7.x86_64
openresty-openssl111-1.1.1i-1.el7.x86_64
openresty-1.19.3.1-1.el7.x86_64
openresty-pcre-8.44-1.el7.x86_64
rpm -ql openresty-1.19.3.1-1.el7.x86_64  #查看配置文件路径,都在/usr/local/openresty/下
ps aux | grep nginx  #过滤nginx服务进程,有则杀掉

2.基本配置

cd /usr/local/openresty/nginx/conf  #和nginx一模一样
user  nginx;
worker_processes  auto;
events {
    worker_connections  65535;
}
http{
....
upstream memcache {
        server 127.0.0.1:11211;
        keepalive 512;		//保持512个不立即关闭的连接用于提升性能
        }
server{
	....
			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;
      	  	}
	        location ~ \.php$ {
	     	set $key $uri$args;		
            srcache_fetch GET /memc $key;	
            srcache_store PUT /memc $key;
            
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }
	}
}
systemctl start openresty.service
vim /usr/local/openresty/nginx/html/index.php

在这里插入图片描述

systemctl stop  openresty.service  #关闭nginx+memcached
nginx  #开启nginx
vim /usr/local/nginx/html/index.php #写一个PHP的发布内容,如本篇开始的一.源码编译,只是基本配置,将PHP发布

在这里插入图片描述

cp /usr/local/nginx/html/example.php /usr/local/openresty/nginx/html/  #本篇二(一)php+memcached
nginx -s stop
systemctl start openresty.service  #nginx+memcached

在这里插入图片描述
3.nginx结合lua

http{
....
server{
....
location ~ \.php$ {
        default_type  text/html;
        content_by_lua 'ngx.say("this is server1")';   #看lua语言水平怎么样,这也是一个很好的发展方向
        }
 	}
 }

在这里插入图片描述

三.应用(java)服务器

一般使用nginx+tomcat的话,nginx只是作为一个转发,对jsp的处理是由tomcat来处理的。
apache可以支持php\cgi\perl,但是要使用java的话,你需要tomcat在apache后台支撑,将java请求由apache转发给tomcat处理。
apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。
Apache Tomcat发布到网页

(一)tomcat的安装

server2  应用服务器
apache-tomcat-7.0.37.tar.gz  #得到软件包
tar zxf apache-tomcat-7.0.37.tar.gz
mv apache-tomcat-7.0.37 /usr/local/  #放到默认位置,方便管理
cd /usr/local
ln -s apache-tomcat-7.0.37/ tomcat  #做个软连接
rpm -ivh jdk-8u121-linux-x64.rpm  #安装必须组件,java;tomcat服务器主要用于部署java web项目
cd tomcat/bin
./startup.sh  #启动tomcat

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

(二)nginx+tomcat+memcached

1.nginx+tomcat

(1)单点

server1 nginx服务
systemctl stop openresty.service 
cd /usr/local/nginx/conf
vim nginx.conf
http{
...
server {
        listen 80;
        server_name tomcat.westos.org;  #虚拟主机
        location / {  #转发指定服务器
        proxy_pass http://172.25.2.2:8080;
        }
}

}
在真机测试时,加入本地解析
172.25.2.1 tomcat.westos.org

在这里插入图片描述
(2).load balance + tomcat

考虑到负载,因此部署两台tomcat.server3  应用服务器,同三(一)server2部署tomcat
server2 server3
get test.jsp  #写一个数据录入测试脚本
mv test.jsp /usr/local/tomcat/webapps/ROOT  #用tomcat发布
cd /usr/local/tomcat/bin
./startup.sh

nginx含有缓存模块二(二)7
缓存模块下载地址

server1 nginx
vim /usr/local/nginx/conf/nginx.conf
http {
...
        upstream tomcat {
        #ip_hash;  #当server2 down,server3接管;server2 up时,又被server2接管,录入信息一点都没保留
        sticky;  # nginx-sticky-module 为 nginx 的第三方模块,使 nginx 支持 sticky 模式,所谓 sticky 模式就是指同一个用户的访问请求都被发送到同一个 tomcat 上处理。当server2 down,server3接管;server2 up时,仍然在server3上,server2上录入的信息没保留.这两种都有数据丢失
        server 172.25.2.2:8080;
        server 172.25.2.3:8080;
        }
server {
        listen 80;
        server_name tomcat.westos.org;
        location / {
        proxy_pass http://tomcat;
        }
}
}
nginx -s reload

存在数据丢失

2. nginx+tomcat+memcached

在这里插入图片描述

Tomcat-1 (T1) 将 session 存储在memcached-2 (T2)上。只有当 M2 不可用时,T1 才将 session 存储在 memcached-1 上(M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障。

server2 server3
yum install memcached.x86_64 -y
systemctl enable --now memcached.service

session 的序列化方案官方推荐的有 4 种:
1. java serialization
2. msm-kryo-serializer
3. msm-javolution-serializer
4. msm-xstream-serializer

cd /usr/local/tomcat/lib  #下载必要配件,采用性能最好的序列化方案Kryo

asm-3.2.jar kryo-1.04.jar kryo-serializers-0.10.jar memcached-session-manager-1.6.3.jar memcached-session-manager-tc7-1.6.3.jar minlog-1.2.jar msm-kryo-serializer-1.6.3.jar reflectasm-1.01.jar spymemcached-2.7.3.jar

vim /usr/local/tomcat/conf/context.xml  #添加缓存配置,倒数第二行添加
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.2.2:11211,n2:172.25.2.3:11211"
failoverNodes="n1"  #在server2 上此项设置为“n2”
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

cd /usr/local/tomcat/bin
./shutdown.sh 
./startup.sh
yum install telnet -y

查看日志,sticky true 表示session已经在对方主机互存
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
访问 http://tomcat.westos.org/test.jsp,不同的主机访问时会调度到不同的 tomcat 实例上处理来自同一主机的请求会交给同一个 tomcat 实例处理,此时你 down 掉当前正在响应的 tomcat ,nginx 会自动把用户的请求调度到另一个 tomcat 实例上,同时 session 也没有丢掉。

四.goaccess 日志可视化

软件安装与使用

wget https://tar.goaccess.io/goaccess-1.4.tar.gz
tar -xzvf goaccess-1.4.tar.gz
cd goaccess-1.4/
yum install GeoIP-devel-1.5.0-13.el7.x86_64.rpm -y  #必虚要与系统上的版本对应
GeoIP.x86_64                            1.5.0-13.el7                            @anaconda/7.6
yum install ncurses-devel.x86_64 -y
./configure --enable-utf8 --enable-geoip=legacy
make
make install
cd /usr/local/nginx/logs
goaccess access.log -o /usr/local/nginx/html/go.html --log-format=COMBINED --real-time-html

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值