web服务器:
企业高性能web服务器是一种专门设计用于满足企业级需求的服务器,它具备高性能、高可靠性、灵活可扩展等特点,旨在提供稳定可靠的网站托管解决方案。这种服务器采用先进的云计算技术,拥有强大的计算能力和网络带宽,能够满足高流量网站的需求。同时,它采用分布式架构和冗余设计,具备高可用性和容错能力,即使在硬件故障或网络中断的情况下,也能保证网站的持续运行。此外,企业高性能web服务器支持按需购买和弹性伸缩,用户可以根据实际需求随时调整服务器配置和规模,满足不同规模和需求的网站。这种服务器类型普遍应用于大型企业级应用,提供灵活的解决方案,确保网站的快速响应和流畅访问。
访问服务器基本流程图:
一.web服务器的优势:
- 高性能:采用先进的云计算技术,提供强大的计算能力和网络带宽,满足高流量网站的需求。
- 高可靠性:采用分布式架构和冗余设计,具备高可用性和容错能力,保证网站的持续运行。
- 灵活可扩展:支持按需购买和弹性伸缩,用户可以根据实际需求随时调整服务器配置和规模。
这些特点使得企业高性能web服务器成为构建和托管企业级网站的首选解决方案
二.常见的高性能web服务器
常见的高性能web服务器包括Nginx、Apache、Microsoft IIS、Node.js with Express、Tomcat、Lighttpd。
-
Nginx是一个高性能的、开源的Web服务器和反向代理服务器。它采用事件驱动、非阻塞的架构,能够有效地处理大量的并发连接,特别适合处理静态文件和高并发请求,具有快速和高并发处理能力的特点。Nginx支持多种操作系统,提供灵活的配置选项和丰富的特性,是处理高负载网站的优选服务器之一12。
-
Apache是另一款流行的Web服务器软件,以其稳定性、安全性和可扩展性著称。它适用于各种操作系统,是当前全球最流行的Web服务器软件之一。Apache提供了一个稳定的环境,支持各种Web应用程序的运行1。
-
Microsoft IIS(Internet Information Services)是微软开发的Web服务器软件,与Windows系统紧密集成,支持ASP.NET等Microsoft开发的Web技术。IIS提供了丰富的功能和工具,便于搭建和管理网站,特别适合在Windows服务器上运行1。
-
Node.js with Express结合了Node.js运行时环境和Express框架,允许使用JavaScript编写服务器端代码。Express框架提供了简洁的路由、中间件和模板引擎等功能,使得构建Web应用程序变得简单快捷3。
-
Tomcat是一个开源的Java Servlet容器,实现了Java EE规范中的部分内容。它由Apache软件基金会维护,可以独立运行或与其他Web服务器结合使用,主要用于运行Java Web应用程序3。
-
Lighttpd是一个轻量级的Web服务器,以快速响应时间和低内存占用而著称。它支持多种功能,如FastCGI、SCGI、Auth、输出压缩和URL重写等,适用于需要高性能和可伸缩性的场景3。
这些服务器各有特点和优势,选择使用哪种服务器取决于实际需求、技术背景、预算以及运行环境等因素
三.NGINX简介
3.1正向代理
由于防火墙的原因,我们并不能直接访问谷歌、推特,看GitHub等等,那么我们可以借助 VPN
来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理 “代理” 的是 客户端,而且 客户端是知道目标的,而目标是不知道客户端是通过VPN访问的。
3.2反向代理
当我们在 外网 访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理(Reverse Proxy
),即 反向代理 “代理” 的是 服务器端,而且这一个过程对于客户端而言是透明的。
3.3负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载均衡分发到不同的服务器,也就是我们所说的负载均衡。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?
NGINX负载均衡三种方式:
(1) 轮询法(默认方法):
- 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器
down
掉,能 自动剔除。
适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。
(2) weight 权重模式(加权轮询):
指定轮询几率,weight 和 访问比率成正比,用于后端服务器性能不均的情况。
这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight 和 访问比率 成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大
(3) ip_hash:
我们可以采用 ip_hash 指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session
的问题。
3.4、动静分离
动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、 js 等文件),这些不需要经过后台处理的文件称为 静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开,动态资源做好了拆分以后,我们就可以根据 静态资源 的特点将其做缓存操作,以提高资源的响应速度。
Nginx的 静态处理 能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。 动静分离技术其实是采用代理的方式,在 server{} 段中加入带正则匹配的 location 来指定匹配项;
针对PHP的动静分离:静态页面交给 Nginx 处理,动态页面交给 PHP-FPM 模块或 Apache 处理。在Nginx的配置中,是通过 location 配置段 配合 正则匹配 实现静态与动态页面的不同处理方式。
四.NGINX安装及实验
4.1nginx编译及安装
1.在官网下载NGINX压缩包并利用XSHELL拖入虚拟机中
tar zxf 解压该压缩包

6.NGINX启动文件















1.安装memcache模块
[root@Nginx ~]# tar zxf memcache-8.2.tgz
[root@Nginx ~]# cd memcache-8.2/
[root@Nginx memcache-8.2]# yum install autoconf
[root@Nginx memcache-8.2]# phpize
[root@Nginx memcache-8.2]# ./configure && make && make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-nonzts-20230831/
[root@Nginx memcache-8.2]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-
20230831/
memcache.so opcache.so
2. 复制测试文件到nginx发布目录中
[root@Nginx ~]# cd memcache-8.2/
[root@Nginx memcache-8.2]# ls
autom4te.cache config.log configure.ac example.php Makefile.fragments
README
build config.m4 config.w32 include Makefile.objects runtests.php
config9.m4 config.nice CREDITS libtool memcache.la src
config.h config.status docker LICENSE memcache.php
tests
config.h.in configure Dockerfile Makefile modules
[root@Nginx memcache-8.2]# cp example.php memcache.php /data/php/
[root@Nginx ~]# vim /data/php/memcache.php
define('ADMIN_USERNAME','admin'); // Admin Username
define('ADMIN_PASSWORD','lee'); // Admin Password
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);
$MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
3.配置php加载memcache模块
[root@Nginx ~]# vim /usr/local/php/etc/php.ini
;extension=zip
extension=memcache
;zend_extension=opcache
[root@Nginx ~]# systemctl reload php-fpm
[root@Nginx no-debug-non-zts-20230831]# php -m | grep mem
memcache
4.部署memcached
[root@Nginx ~]# yum install memcached -y
[root@Nginx ~]# systemctl enable --now memcached.service
[root@Nginx ~]# netstat -antlupe | grep memcache
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN
976 1037243 186762/memcached
[root@Nginx ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1
测试
访问 http://php.timinglee.org/example.php 不断刷新访问
访问http://php.timinglee.org/memcache.php 查看命中效果
网页访问效果:
实验七:PHP高速缓存
[root@Nginx ~]# rm -fr /apps/nginx/
[root@Nginx ~]# tar zxf srcache-nginx-module-0.33.tar.gz
[root@Nginx ~]# tar zxf memc-nginx-module-0.20.tar.gz
[root@Nginx ~]# cd nginx-1.26.1/
[root@Nginx nginx-1.26.1]# ./configure --prefix=/apps/nginx --user=nginx --
group=nginx --with-http_ssl_module --with-http_v2_module --withhttp_realip_module --with-http_stub_status_module --with-http_gzip_static_module
--with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --
add-module=/root/memc-nginx-module-0.20 --add-module=/root/srcache-nginx-module-
0.33
[root@Nginx nginx-1.26.1]# make && make install
[root@Nginx ~]# vim /apps/nginx/conf.d/php.conf
upstream memcache {
server 127.0.0.1:11211;
keepalive 512;
}
server {
listen 80;
server_name php.timinglee.org;
root /data/php;
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; #缓存失效时间300秒
memc_pass memcache;
}
location ~ \.php$ {
set $key $uri$args; #设定key的值
srcache_fetch GET /memc $key; #检测mem中是否有要访问的php
srcache_store PUT /memc $key; #缓存为加载的php数据
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
[root@Nginx ~]# systemctl start nginx.service
测试:
[root@apache20 ~]# ab -n500 -c10 http://php.timinglee.org/index.phpConcurrency Level: 10Time taken for tests: 0.255 secondsComplete requests: 500Failed requests: