nginx+php+高速缓存memcache

1.php源码编译(php-fpm)

1.1 软件下载

php官网:php官网
在这里插入图片描述
在这里插入图片描述

1.2 软件编译

- 软件编译:
	 1. tar jxf php-7.4.6.tar.bz2
	 2. cd php-7.4.6
	 3. ./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
	 4. 对应configure的解释
		软件安装路径,配置文件路径,允许fpm服务,fpm服务的所有者和组是nginx,一些功能模块,不允许debug,一些功能模块,最后是允许使用systemctl控制
	 5. make 
	 6. make install
	7. CGI、FastCGI和php-fpm的概念和区别
	CGI:CGI(Common Gateway Interface),公共网关接口,它是Web服务器与外部应用程序(CGI程序)之间传递信息的接口标准。通过CGI接口,Web服务器就能够获取客户端提交的信息,并转交给服务器端的CGI程序处理,最后返回结果给客户端。也就是说,CGI实际上是一个接口标准。我们通常所说的CGI是指CGI程序,即实现了CGI接口标准的程序。只要某种语言具有标准输入、输出和环境变量,如perl、php、C等,就可以用来编写CGI程序。CGI程序的工作方式:Web服务器一般只处理静态文件请求(如 jpg、htm、html),如果碰到一个动态脚本请求(如php),web服务器主进程,就fork出一个新的进程来启动CGI程序,也就是说将动态脚本请求交给CGI程序来处理。启动CGI程序需要一个过程,比如,读取配置文件,加载扩展等。CGI程序启动后,就会解析动态脚本,然后将结果返回给Web服务器,最后Web服务器再将结果返回给客户端,刚才fork的进程也会随之关闭。这样,每次用户请求动态脚本,Web服务器都要重新fork一个新进程,去启动CGI程序,由CGI程序来处理动态脚本,处理完后进程随之关闭。这种工作方式的效率是非常低下的。
	FASTCGI:FastCGI也是语言无关的。其主要行为是将CGI解释器进程保持在内存中并因此获得高效的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因。

	FastCGI是一种进程管理工具,它可以在内存中管理CGI进程。
	FastCGI进程管理器需要单独启动。启动FastCGI后,会生成一个FastCGI主进程和多个子进程(子进程其实就是CGI解释器进程)。
	当客户端请求Web服务器上的动态脚本时,Web服务器会将动态脚本通过TCP协议交给FastCGI主进程,FastCGI主进程根据情况,安排一个空闲的子进程来解析动态脚本,处理完成后将结果返回给Web服务器,Web服务器再将结果返回给客户端。该客户端请求处理完毕后,FastCGI子进程并不会随之关闭,而是继续等待主进程安排工作任务。
	由此可知,FastCGI的工作效率是非常高的
	
	php-fpm: fpm是FastCGI Process Manager的缩写,那么,fpm就是FastCGI进程管理器的简称。
	php-fpm就是php中的FastCGI进程管理器。
	对于php5.3之前的版本来说,php-fpm是一个第三方的补丁包,旨在将FastCGI进程管理整合进PHP包中。
	在php5.3之后的版本中,php-fpm不再是第三方的包,它已经被集成到php的源码中了。php-fpm提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以php-fpm被PHP官方收购了。

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

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

- 拷贝php-fpm配置文件:
	cp php.ini-production /usr/local/lnmp/php/etc/php.ini
	cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
	cp sapi/fpm/php-fpm.conf /usr/local/lnmp/php/etc/  ##解压位置进行复制
	cp sapi/fpm/www.conf /usr/local/lnmp/php/etc/php-fpm.d/    ##解压位置进行复制

cp sapi/fpm/php-fpm.conf /usr/local/lnmp/php/etc/ ##解压位置进行复制
在这里插入图片描述

在这里插入图片描述
cp sapi/fpm/www.conf /usr/local/lnmp/php/etc/php-fpm.d/ ##解压位置进行复制(不需要修改文件内容)

在这里插入图片描述

cp php.ini-production /usr/local/lnmp/php/etc/php.ini
在这里插入图片描述
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/

在这里插入图片描述

- 修改php-fpm启动文件:
	# vim /usr/lib/systemd/system/php-fpm.service
	ProtectSystem=false	//默认php-fpm启动时只读挂载/usr目录
	# systemctl daemon-reload
	# systemctl start php-fpm

在这里插入图片描述

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

2.nginx结合php-fpm

修改php时区问题

在这里插入图片描述

在这里插入图片描述
nginx结合php-fpm

- 修改nginx配置文件:
	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;
	        }

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
访问效果

在这里插入图片描述

3. php添加memcache功能模块

在这里插入图片描述

3.1 添加环境变量

在这里插入图片描述

在这里插入图片描述

3.2 下载高速缓存压缩包

在这里插入图片描述
- 在使用php的过程中,我们常常需要去添加一些PHP扩展库。但是重新对php进行编译是比较蛮烦的,所以这时候我们可以使用phpize对php进行添加扩展。并且phpize编译的扩展库可以随时启用或停用,比较灵活。
- 其实phpize是一个运行脚本,主要作用是检测php的环境还有就是在特定的目录生成相应的configure文件,这样makeinstall之后,生成的.so文件才会自动加载到php扩展目录下面。

在这里插入图片描述

3.3 软件安装

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

3.4 配置php加载模块

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

- Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要
- 方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的
- 电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入
- 命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以
- 在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录
- 服务器。Telnet是常用的远程控制Web服务器的方法

在这里插入图片描述
在这里插入图片描述
测试高速缓存memcache+php

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

在这里插入图片描述

测试效果

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

在这里插入图片描述
memcache高速缓存会快一点
在这里插入图片描述

在这里插入图片描述

普通的php解析
在这里插入图片描述

在这里插入图片描述

4. 构建nginx高速缓存

在这里插入图片描述

4.1 软件下载

软件下载: 软件下载

4.2 软件安装

-   # wget https://openresty.org/package/rhel/openresty.repo(直接下载仓库文件)
	# mv openresty.repo /etc/yum.repos.d/
	# yum install -y openresty

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

在这里插入图片描述

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

4.3 软件配置

- # cd /usr/local/openresty/nginx/conf
  # vim nginx.conf
	upstream memcache {
	        server 127.0.0.1:11211;
	        keepalive 512;		//保持512个不立即关闭的连接用于提升性能
	        }
	
	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;
  	    }

- 当所请求的uri以“.php”结尾时,首先到memcache中查询有没有以$uri$args为key
的数据,如果有则直接返回;否则,执行location的逻辑,如果返回的http状态码
为200,则在输出前以$uri$args为key,将输入结果存入memcache。

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

在这里插入图片描述

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

配置高速缓存

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

配置完成进行压力测试
在这里插入图片描述
在这里插入图片描述
使用nginx+php的方式测试

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

5. nginx结合lua

- location @client {
	proxy_pass  http://172.25.0.3;
	}
  location ~ \.php$ {
	default_type  text/html;
	content_by_lua 'ngx.say("this is westos.org")';
	access_by_lua '
	if ngx.var.remote_addr == "172.25.0.250" then
	ngx.exec("@client")
	end
	';
	}

在这里插入图片描述

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

在这里插入图片描述

6. tomcat结合memcache

6.1 tomcat

  • Apache是普通服务器,本身只支持html即普通网页。不过可以通过插件支持php,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)。Apache只支持静态网页,但像php,cgi,jsp等动态网页就需要Tomcat来处理。 Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。但是,不能将 Tomcat 和 Apache Web 服务器混淆,Apache Web Server 是一个用 C 语言实现的 HTTP web server;这两个 HTTP web server 不是捆绑在一起的。Apache Tomcat 包含了一个配置管理工具,也可以通过编辑 XML 格式的配置文件来进行配置。Apache,nginx,tomcat并称为网页服务三剑客,可见其应用度之广泛。
  • Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。 Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,servlet)。
    两者都是一种容器,只不过发布的东西不同:Apache是html容器,功能像IIS一样;Tomcat是jsp/servlet容器,用于发布jsp及java的,类似的有IBM的websphere、BEA的Weblogic,sun的JRun等等。
    打个比方:Apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上。
    tomcat下载网址

server2上的操作

在这里插入图片描述

  • JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
    下载地址
    在这里插入图片描述
    启动tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
server1进行nginx配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
访问不到图片是因为nginx和tomcat都有各自的默认发布目录,这张图片不在nginx的默认发布目录,所以看不到。
解决办法:一是通过域名直接proxy_pass到tomcat服务器上,也就是域名负载均衡
二是将图片放入nginx默认发布目录
在这里插入图片描述

server3上的配置和server2是一样的

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改配置文件解决上面的问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试server2和server3上的test.jsp文件

在这里插入图片描述
在这里插入图片描述
test.jsp文件

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

在这里插入图片描述
出现的问题及解决方案

在这里插入图片描述

cookie解决
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过ip_hash解决
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2 tomcat+memcached

在这里插入图片描述

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

在这里插入图片描述

server2主机

软件下载:
将.jar软件安装包都存放到/usr/local/tomcat/lib下

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

在这里插入图片描述

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.13.2:11211,n2:172.25.13.3:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

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

server3上的操作和server2上的操作一样,这里就不在重复操作了!
只是/usr/local/tomcat/conf/context.xml文件内容发生一点小改变。

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.13.2:11211,n2:172.25.13.3:11211"
failoverNodes="n2"   ##这里是n2,server3主机
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.13.2:11211,n2:172.25.13.3:11211"
failoverNodes="n2"   ##这里是n2,server3主机
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

测试

两台主机都好着

在这里插入图片描述

一台主机tomcat挂掉

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

在这里插入图片描述

因为是交叉存储,即使server3停止掉memcached服务,但是信息还是会存到server2主机上。
在这里插入图片描述

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

7. goaccess日志可视化

- 软件安装:
	# wget https://tar.goaccess.io/goaccess-1.4.tar.gz
	# tar -xzvf goaccess-1.4.tar.gz
	# cd goaccess-1.4/
	# ./configure --enable-utf8 --enable-geoip=legacy
	# make
	# make install
- 软件使用:
	# goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html

7.1 软件安装

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210109111207955.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3F3ZXJ0eTEzNzI0MzE1ODg=,size_16,color_FFFFFF,t_70)

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

7.2 软件使用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Studying!!!

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值