网页编程语言
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
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