web服务器

Web服务介绍

Apache

Apache起初由美国的伊利诺伊大学香槟分校的国家超级计算机应用中心开发。目前经历了两大版本分别是1.X和2.X ,其可以通过编译安装实现特定的功能。

Apache prefork 模型

1.预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发1024

2.每个子进程有一个独立的线程响应用户请求

3.相对比较占用内存,但是比较稳定,可以设置最大和最小进程数

4.是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景

优点:稳定

缺点:每个用户请求需要对应开启一个进程,占用资源较多,并发性差,不适用于高并发场景

Apache worker 模型

1.一种多进程和多线程混合的模型

2.有一个控制进程,启动多个子进程

3.每个子进程里面包含固定的线程

4.使用线程程来处理请求

5.当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求

6.由于其使用了线程处理请求,因此可以承受更高的并发

优点:相比prefork 占用的内存较少,可以同时处理更多的请求

缺点:使用keepalive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超 时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用(该问题在 prefork模式下,同样会发生)

Apache event 模型

1.Apache中最新的模式,2012年发布的apache 2.4.X系列正式支持event 模型,属于事件驱动模型(epoll)

2.每个进程响应多个请求,在现在版本里的已经是稳定可用的模式

3.它和worker模式很像,最大的区别在于,它解决了keepalive场景下长期被占用的线程的资源浪费问题 (某些线程因为被keepalive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)

4.event MPM中,会有一个专门的线程来管理这些keepalive类型的线程

5.当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场 景下的请求处理能力

优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放

缺点:没有线程安全控制

Nginx

Nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的,开发 工作最早从2002年开始,第一次公开发布时间是2004年10月4日,版本号是0.1.0

功能

1.静态的web资源服务器html,图片,js,css,txt等静态资源

2.http/https协议的反向代理

3.结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求

4.tcp/udp协议的请求转发(反向代理)

5.imap4/pop3协议的反向代理

基础特性

1.模块化设计,较好的扩展性

2.高可靠性

3.支持热部署:不停机更新配置文件,升级版本,更换日志文件

4.低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存

5.event-driven,aio,mmap,sendfile

Web服务相关的功能

虚拟主机(server)

支持 keep-alive 和管道连接(利用一个连接做多次请求)

访问日志(支持基于日志缓冲提高其性能)

url rewirte

路径别名

基于IP及用户的访问控制

支持速率限制及并发数限制

重新配置和在线升级而无须中断客户的工作进

Nginx实战

源码编译

官方源码包下载地址:nginx: download

安装

复制代码
[root@nginx ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y
[root@nginx]# tar zxf nginx-1.24.0.tar.gz
[[email protected]]# useradd -s /sbin/nologin -M nginx
[[email protected]]# ./configure --prefix=/usr/local/nginx \ 
--user=nginx \  #指定nginx运行用户 
--group=nginx \ # 指定nginx运行组 
--with-http_ssl_module \ # 支持https:// 
--with-http_v2_module \ # 支持http版本2 
--with-http_realip_module \ # 支持ip透传 
--with-http_stub_status_module \ # 支持状态页面 
--with-http_gzip_static_module \ # 支持压缩 
--with-pcre \ # 支持正则 
--with-stream \ # 支持tcp反向代理 
--with-stream_ssl_module \ # 支持tcp的ssl加密 
--with-stream_realip_module # 支持tcp的透传ip
[[email protected]]# make && make install

关闭debug功能

root@nginx nginx-1.24.0\]# vim auto/cc/gcc ![](https://i-blog.csdnimg.cn/direct/20782695ccc7423d8333c9c2e3b285e7.png) 编译参数 \[root@nginx nginx-1.24.0\]# vim \~/.bash_profile \[root@nginx nginx-1.24.0\]# source \~/.bash_profile ![](https://i-blog.csdnimg.cn/direct/cb9023fc4d084962850b1bd58b4c4efa.png) 验证版本 \[root@nginx nginx-1.24.0\]# nginx -V ![](https://i-blog.csdnimg.cn/direct/d6a704a534424019a3db0ae83226cc6c.png) ### 平滑升级 #解压新版本 [root@nginx]# tar zxf nginx-1.26.1.tar.gz [root@Nginx nginx]# cd nginx-1.26.1/ #开始编译新版本 [root@Nginx nginx-1.26.1]# ./configure --with-http_ssl_module --withhttp_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module -- with-stream_realip_module #只[[email protected]]# make 查看两个版本 ![](https://i-blog.csdnimg.cn/direct/05a3690cecf942eaa68b1e9f72b51ba6.png) #把之前的旧版的nginx命令备份 [root@nginx nginx-1.26.1]# cd /usr/local/nginx/sbin/ [root@nginx sbin]# cp nginx nginx.24 [root@nginx sbin]# ls nginx nginx.24 #把新版本的nginx命令复制过去 [root@nginx sbin]# \cp -f /root/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin 检测 ![](https://i-blog.csdnimg.cn/direct/4944aa06330e441d813c37792d288908.png) 查看进程 \[root@nginx sbin\]# ps aux \| grep nginx 依旧是旧版本生效 ![](https://i-blog.csdnimg.cn/direct/90895d9043ec483282bfa48e7942ac47.png) 回收旧版本 \[root@nginx sbin\]# kill -99099 ![](https://i-blog.csdnimg.cn/direct/2fbf600da1114ec6b9dfb10812eb0664.png) 新版本生效 ![](https://i-blog.csdnimg.cn/direct/b496b0482ed443a6935d85ab73d905bd.png) ### 回滚 #如果升级的版本发现问题需要回滚,可以重新拉起旧版本的worker [root@nginx sbin]# cp nginx nginx.26 [root@nginx sbin]# ls nginx nginx.24 nginx.26 [root@nginx sbin]# mv nginx.24 nginx [root@nginx sbin]# kill -9 15341 ![](https://i-blog.csdnimg.cn/direct/b7282157d98f4ea498c9bcdff95db88f.png) 回滚完成 ![](https://i-blog.csdnimg.cn/direct/4c92d21b14fd4d02bde6cd9584573f98.png) ### 命令参数 \[root@nginx \~\]# vim /usr/local/nginx/conf/nginx.conf #启动nginx工作进程的用户和组 #启动nginx工作进程的数量 #错误日志记录配置 #pid文件保存路径 ![](https://i-blog.csdnimg.cn/direct/58cad6ebc5254f7ead5649be820cb42d.png)#修改pam限制 \[root@nginx \~\]# vim /etc/security/limits.conf ![](https://i-blog.csdnimg.cn/direct/f86163ef858b43eb90e9f72321f0b390.png) #应用 \[root@nginx \~\]# nginx -g "worker_processes 4;" ![](https://i-blog.csdnimg.cn/direct/41df1ba191d547e68868076adbeb09c4.png)\[root@nginx \~\]# lsof -i :80 查看80端口所占进程 ### 文件编写 \[root@nginx \~\]# vim /lib/systemd/system/nginx.service ![](https://i-blog.csdnimg.cn/direct/ca5e7760f9f5408c81b23d6e70ad76e3.png) \[root@nginx \~\]# systemctl daemon-reload \[root@nginx \~\]# systemctl start nginx ![](https://i-blog.csdnimg.cn/direct/f603f811c5c047c0a60315036cf0dc9c.png) ### 全局参数优化 #导入其他路径的配置文件 \[root@nginx \~\]# vim /usr/local/nginx/conf/nginx.conf ![](https://i-blog.csdnimg.cn/direct/6e40804c14114f43a0902263aa199487.png) 创建目录,编辑目录 \[root@nginx \~\]# mkdir -p /usr/local/nginx/conf.d \[root@nginx \~\]# vim /usr/local/nginx/conf.d/vhost.conf \[root@nginx \~\]# mkdir /data/web/test1 -p \[root@nginx \~\]# echo /data/web/test1 \> /data/web/test1/index.html \[root@nginx conf.d\]# nginx -s reload ![](https://i-blog.csdnimg.cn/direct/66c14b66145844a5822d02f3457423ff.png) 浏览器访问 ![](https://i-blog.csdnimg.cn/direct/b56fc4b9c46941c5854639f8de45a005.png) ### location用法 创建目录,写入文件 \[root@nginx \~\]# mkdir -p /data/web{1..5} \[root@nginx \~\]# mkdir -p /data/web{1..5}/test \[root@nginx \~\]# echo web1 \> /data/web1/test/index.html \[root@nginx \~\]# echo web2 \> /data/web2/test/index.html \[root@nginx \~\]# echo web3 \> /data/web3/test/index.html \[root@nginx \~\]# echo web4 \> /data/web4/test/index.html \[root@nginx \~\]# echo web5 \> /data/web5/test/index.html \[root@nginx \~\]# vim /usr/local/nginx/conf.d/vhost.conf ![](https://i-blog.csdnimg.cn/direct/8a7abb8fe98148d0bbde09d6bf45d39c.png) \[root@nginx \~\]# nginx -s reload 浏览器访问,出现了web5和web4,所以 \~\*优先级和 \~ 相等 ![](https://i-blog.csdnimg.cn/direct/3d6cb52681ec4864aa704710efc82354.png) ![](https://i-blog.csdnimg.cn/direct/bcfb488526284353b97c192b7e6e0ebc.png) 注释掉后两行,访问到的是web1 ![](https://i-blog.csdnimg.cn/direct/f22215e65ba1423ea81462c8efc71f04.png) 注释掉后三行,访问到的是web3 ![](https://i-blog.csdnimg.cn/direct/d532220afdea4458b24977e1169cb8bb.png) 由此可知,对目录匹配优先级从高到低: 1.\~\* 和 \~ 优先级相等 2.不带符号 3. \^\~ 对文件匹配优先级从高到低: 1. = (不支持目录) 2.\~\* 和 \~ 优先级相等 3.不带符号 4. \^\~ ### 账户认证 创建默认认证文件 \[root@nginx \~\]# htpasswd -m /usr/local/nginx/.htpasswd wxq \[root@nginx \~\]# mkdir /data/web/qin \[root@nginx \~\]# echo wxq \> /data/web/qin/index.html \[root@nginx \~\]# vim /usr/local/nginx/conf.d/vhost.conf ![](https://i-blog.csdnimg.cn/direct/d3fb8a5126f94b85842cc57550745a12.png) \[root@nginx \~\]# nginx -s reload 浏览器访问 ![](https://i-blog.csdnimg.cn/direct/82da06fb199e403e846e8423493ffdee.png) 登录成功 ![](https://i-blog.csdnimg.cn/direct/763b7a6bcfd4412cb68bdf7851a1d197.png) ### 自定义日志 #### 自定义错误页面 \[root@nginx \~\]# vim /usr/local/nginx/conf.d/vhost.conf ![](https://i-blog.csdnimg.cn/direct/b0537c3939a6493c8740816a2031ec5e.png) \[root@nginx \~\]# mkdir -p /data/web/errorpage \[root@nginx \~\]# echo error page \> /data/web/errorpage/40x.html \[root@nginx \~\]# nginx -s reload 访问不存在的目录,出现自定义错误信息 ![](https://i-blog.csdnimg.cn/direct/b065486daf1443378ed1542182b64b96.png) #### 自定义错误日志 查看日志目录 ll /usr/local/nginx/logs/ ![](https://i-blog.csdnimg.cn/direct/1a475e1ddf67420ba086e493fcfdd460.png) \[root@nginx \~\]# nginx -s reload \[root@nginx \~\]# mkdir /var/log/timingwxq.org \[root@nginx \~\]# cat /var/log/timingwxq.org/access.log \[root@nginx \~\]# cat /var/log/timingwxq.org/error.log ![](https://i-blog.csdnimg.cn/direct/58dd8df1f3ac44e385126798a27bd70d.png) ### 文件检测 \[root@nginx \~\]# vim /usr/local/nginx/conf.d/vhost.conf ![](https://i-blog.csdnimg.cn/direct/9772d9ce5d0e420aa9b0c50c2159170f.png) \[root@nginx \~\]# mkdir /data/web/html/error \[root@nginx \~\]# echo error default \> /data/web/html/error/default.html ![](https://i-blog.csdnimg.cn/direct/7ba44e9db9b344d782c14162e9f0df2d.png) ### 长链接控制 编辑主配置文件 vim /usr/local/nginx/conf/nginx.conf ![](https://i-blog.csdnimg.cn/direct/65509f3e07ac48a89f3ee751f3b66314.png) #长链接保持时间 5s结束 #长链接请求次数 请求2次 下载测试工具 \[root@nginx \~\]# dnf install telnet -y \[root@nginx \~\]# echo \> /data/web/html/error/default.html ![](https://i-blog.csdnimg.cn/direct/94d7a584b0e84250a1b6b16af0622779.png) ### 下载服务器设置 \[root@nginx \~\]# mkdir /data/web/download \[root@nginx \~\]# dd if=/dev/zero of=/data/web/download/leefile bs=1M count=100 ![](https://i-blog.csdnimg.cn/direct/d7e471929ac44950b6f9da4bc828bf27.png) \[root@nginx \~\]# vim /usr/local/nginx/conf.d/vhost.conf ![](https://i-blog.csdnimg.cn/direct/c051c80423ed46a59407bbe00df15483.png) \[root@nginx \~\]# nginx -s reload 浏览器访问,弹出下载地址 ## ![](https://i-blog.csdnimg.cn/direct/4b58abf6b9434ac88e078c5b0972e6bc.png)Nginx高级配置 ### 状态页 注意,要在本地计算机和linux主机中完成域名解析 \[root@nginx \~\]# vim /usr/local/nginx/conf.d/status.conf ![](https://i-blog.csdnimg.cn/direct/6b2fcf55dc2c4a328e71977337ae33f9.png) \[root@nginx \~\]# nginx -s reload 浏览器访问status.timingwxq.org/status ,出现状态页 ![](https://i-blog.csdnimg.cn/direct/8a4eb1d2e5974d61a42d1f2b8e5fdf87.png) 由于只允许172.25.254.1通过,所以本地访问会报错 ![](https://i-blog.csdnimg.cn/direct/6ac4580f0f134d1cb951314bbf8403d9.png) ### 压缩功能 编辑配置文件 \[root@nginx \~\]# cd /usr/local/nginx/conf/nginx.conf ![](https://i-blog.csdnimg.cn/direct/a56e7d70fa88465bb6f87af0a25518ae.png) \[root@nginx conf\]# nginx -s reload \[root@nginx conf\]# echo Tomorrow will be fine \> /data/web/html/small.html \[root@nginx conf\]# du -sh /usr/local/nginx/logs/access.log 16K /usr/local/nginx/logs/access.log \[root@nginx conf\]# cat /usr/local/nginx/logs/access.log \> /data/web/html/big.html 查看文件 ![](https://i-blog.csdnimg.cn/direct/570399de581b4f99b6ba39291eb732ff.png) ### 变量使用 #nginx的内置变量 \[root@nginx \~\]# vim /usr/local/nginx/conf.d/vars.conf ![](https://i-blog.csdnimg.cn/direct/72c35d5d83494702ae46d33bfd8abf9b.png) #nginx自定义变量 ![](https://i-blog.csdnimg.cn/direct/497d81bc22d448d58a0dc93e973c3821.png) 测试 \[root@nginx \~\]# curl -b "key1=wxq,key2=wxq1" -u wxq:wxq var.timingwxq.org/var?name=wxq\&\&id=6666 ![](https://i-blog.csdnimg.cn/direct/348c0940ab5a4a00974f8d9a10c1beda.png) ### Rewrite相关功能 #### 1.if \[root@nginx conf.d\]# vim vars.conf ![](https://i-blog.csdnimg.cn/direct/19342d7315924d9d9b7d29b5b47bb47e.png) 测试 \[root@nginx conf.d\]# curl var.timingwxq.org/test2/index.html ![](https://i-blog.csdnimg.cn/direct/9a6d3d7579f2401eb57edbe654b7ca45.png) #### 2.break \[root@nginx conf.d\]# vim vars.conf ![](https://i-blog.csdnimg.cn/direct/588d46598897447b9d2626465bf19041.png) 测试 \[root@nginx conf.d\]# curl var.timingwxq.org/break \[root@nginx conf.d\]# curl -A "firefox" var.timingwxq.org/break ![](https://i-blog.csdnimg.cn/direct/ae9b482f39b64dfda78149b63da149bd.png) #### 3.return \[root@nginx conf.d\]# vim vars.conf ![](https://i-blog.csdnimg.cn/direct/1046fc096a4e42cab049932ea28781a2.png) 测试 ![](https://i-blog.csdnimg.cn/direct/4f6d43d1d8514cd5a7830f0dbfd9c1bb.png) ![](https://i-blog.csdnimg.cn/direct/fa1f1cc7e881451d8fb2c06a0ac3a867.png) #### 4.rewirte \[root@nginx conf.d\]# vim vars.conf ![](https://i-blog.csdnimg.cn/direct/4196357284db4f7ebedc0e608173d322.png) 测试 ![](https://i-blog.csdnimg.cn/direct/07e8bd084bcd4817a9e44c92492aaa0b.png) #### 5.break和last \[root@nginx \~\]# mkdir -p /data/web/html/{test1,test2,break,last} \[root@nginx \~\]# echo test1 \> /data/web/html/test1/index.html \[root@nginx \~\]# echo test2 \> /data/web/html/test2/index.html \[root@nginx \~\]# echo last \> /data/web/html/last/index.html \[root@nginx \~\]# echo break \> /data/web/html/break/index.html ![](https://i-blog.csdnimg.cn/direct/8b767ac950534ae0ae21893a4330c91b.png) 测试 ![](https://i-blog.csdnimg.cn/direct/162e87137ec147e983334aa1c43bc953.png) ### 防盗链 nginx主机上: \[root@nginx \~\]# cd /usr/local/nginx/ \[root@nginx nginx\]# mkdir certs \[root@nginx nginx\]# cd certs/ \[root@nginx certs\]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/nginx/certs/timingwxq.org.key \\ -x509 -days 365 -out /usr/local/nginx/certs/timingwxq.org.crt \[root@nginx certs\]# vim /usr/local/nginx/conf.d/vhosts.conf ![](https://i-blog.csdnimg.cn/direct/57f97b8bb9df42f0a9739bded80d9823.png) 另一台主机 172.25.254.132 \[root@node \~\]# yum install httpd -y \[root@node \~\]# vim /var/www/html/index.html ![](https://i-blog.csdnimg.cn/direct/4ce8d975eaee42d0a957351794b94ffe.png) \[root@node \~\]# systemctl enable --now httpd \[root@node \~\]# systemctl start httpd 测试 网址输入 http://172.25.254.132 ![](https://i-blog.csdnimg.cn/direct/a48d85bbf872425aa6a4ca7e76b8d7c4.png) 点击跳转 防盗链网页完成 ![](https://i-blog.csdnimg.cn/direct/cdb9b28e6df64bdeba347a1f2772b581.png) ### http反向代理 实验需要三台主机 nginx:172.25.254.100 web1:172.25.254.10 web2:172.25.254.20 在两台web主机上下载httpd服务 在nginx上测试 ![](https://i-blog.csdnimg.cn/direct/1505f91425f447758eaeb2746df26bb3.png) \[root@nginx \~\]# vim /usr/local/nginx/conf.d/vhosts.conf 注意 proxy只能代理一个 ![](https://i-blog.csdnimg.cn/direct/e9ef593f5022476ab8a1c45d20f6fcdb.png) \[root@nginx \~\]# nginx -s reload web2主机 \[root@web20 \~\]# vim /etc/httpd//conf/httpd.conf \[root@web20 \~\]# systemctl restart httpd 端口改为8080 ![](https://i-blog.csdnimg.cn/direct/dea2d83ac32841de85669f11e4c27c56.png) 测试 ![](https://i-blog.csdnimg.cn/direct/e7d5fedd60954c9292610af45d6ae37d.png) 若想代理两个服务,开启static 在nginx主机 vim /usr/local/nginx/conf.d/vhosts.conf ![](https://i-blog.csdnimg.cn/direct/9551c890e3f6419894576dd85b3ce807.png) 在web2主机创建static目录 \[root@web20 \~\]# mkdir -p /var/www/html/static \[root@web20 \~\]# echo static 172.25.254.20 \> /var/www/html/static/index.html 测试 ![](https://i-blog.csdnimg.cn/direct/a98743ce46be46aabdfec44bcf72e1a8.png) ### 实现动静分离 nginx主机 vim /usr/local/nginx/conf.d/vhosts.conf ![](https://i-blog.csdnimg.cn/direct/0522f3e25a0641c3b17003a7986ae721.png) web1主机 \[root@web10 \~\]# dnf install php -y \[root@web10 \~\]# systemctl restart httpd \[root@web10 \~\]# vim /var/www/html/index.php ![](https://i-blog.csdnimg.cn/direct/3e90c2693d0448df9424d7e960b28cf5.png) 测试 浏览器访问 实现动静分离 ![](https://i-blog.csdnimg.cn/direct/9ab6655c8bb64af2b8cee810cf45a3db.png) ![](https://i-blog.csdnimg.cn/direct/5688efd517b64050963139daa82e243c.png) ### 缓存功能 准备缓存配置 \[root@nginx-node1 conf.d\]# vim /usr/local/nginx/conf/nginx.conf ![](https://i-blog.csdnimg.cn/direct/a5a132cdcf3a4141a6075d9ddbca1d30.png) \[root@nginx-node1 conf.d\]# vim /usr/local/nginx/conf.d/vhosts.conf ![](https://i-blog.csdnimg.cn/direct/9566e64d8e6f4509ac4e2dd507ecadfe.png) 目录会自动生成 ![](https://i-blog.csdnimg.cn/direct/0278f4a68e374a17b3343f6d7d99d68b.png) 访问并验证缓存文件 \[root@web10 \~\]# ab -n1000 -c100 [http://var.timingwxq.org/static/index.html](http://var.timingwxq.org/static/index.html "http://var.timingwxq.org/static/index.html") ![](https://i-blog.csdnimg.cn/direct/c9f12c310e414e35bd07ba3c755808a6.png) ### 负载均衡 \[root@nginx-node1 conf.d\]# vim /usr/local/nginx/conf.d/vhosts.conf 测试,轮询 ![](https://i-blog.csdnimg.cn/direct/3ac58afe1ba24c128631e30ec2b9930b.png) [root@nginx-node1 conf.d]# vim /usr/local/nginx/conf.d/vhosts.conf upstream webcluster{ \#ip_hash; #hash $ request_uri consistent; $cookie_qin; #least_conn; ​ server 172.25.254.10:80 fail_timeout=15s max_fails=3; ​ server 172.25.254.20:8080 fail_timeout=15s max_fails=3; ​ server 172.25.254.100:80 backup; } server { listen 80; server_name var.timingwxq.org; location / { proxy_pass http://webcluster; } } web1主机 \[root@web10 \~\]# mkdir -p /var/www/html/static \[root@web10 \~\]# echo 172.25.254.10 static \> /var/www/html/static/index.html ![](https://i-blog.csdnimg.cn/direct/cfa7addac5a842f9897f3a6ec84993b3.png) 测试,实现负载均衡 ![](https://i-blog.csdnimg.cn/direct/30c1340a01e4403e889bf903ffdbb81d.png) 基于Cookie 实现会话绑定 ![](https://i-blog.csdnimg.cn/direct/271725a8ad854b28abf19cc6fe471ceb.png) 测试 ![](https://i-blog.csdnimg.cn/direct/afc7b789b4bb43a98bde205cbab3d8e5.png) ### php源码编译 nginx升级 \[root@nginx-node1 \~\]# tar zxf nginx-1.26.1.tar.gz \[root@nginx-node1 \~\]# cd nginx-1.26.1/ \[root@nginx-node1 nginx-1.26.1\]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/root/echo-nginx-module-0.63 --add-module=/root/memc-nginx-module-0.20 --add-module=/root/srcache-nginx-module-0.33 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module \[root@nginx-node1 nginx-1.26.1\] make\&\&make install php源码编译 #利用yum解决php依赖 [root@nginx-node1 ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel #下载oniguruma-devel包 [root@nginx-node1 ~]# cd /mnt [root@nginx-node1 ~]# wget https://mirrors.aliyun.com/rockylinux/9.4/devel/x86_64/kickstart/Packages/o/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm [root@nginx-node1 ~]# yum localinstall oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm #解压源码并安装 [root@nginx-node1 ~]# tar zxf php-8.3.9.tar.gz [root@nginx-node1 ~]# cd php-8.3.9/ [root@nginx-node1 php-8.3.9]# ./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-xml \ --enable-ftp \ --enable-gd \ --enable-exif \ --enable-mbstring \ --enable-bcmath \ --with-fpm-systemd\ [root@nginx-node1 php-8.3.9]# make && make install ### nginx和php整合 #### php配置优化 \[root@nginx php-8.3.9\]# cd /usr/local/php/etc/ \[root@nginx etc\]# cp -p php-fpm.conf.default php-fpm.conf #去掉pid注释 \[root@nginx etc\]# vim php-fpm.conf ![](https://i-blog.csdnimg.cn/direct/7823c9c36a0040868c49e6a55b4701ed.png) \[root@nginx php-fpm.d\]# vim www.conf #修改端口号 ![](https://i-blog.csdnimg.cn/direct/173d679339fd4674a3337e8be3e3ba2b.png) \[root@nginx-node1 php-fpm.d\]# cd /root/php-8.3.9/ \[root@nginx-node1 php-8.3.9\]# cp php.ini-production /usr/local/php/etc/php.ini \[root@nginx-node1 php-8.3.9\]# vim /usr/local/php/etc/php.ini #修改时区 ![](https://i-blog.csdnimg.cn/direct/94ed0ef12ff04727b09ce48597b0befb.png) #生成启动文件,注释该内容 ![](https://i-blog.csdnimg.cn/direct/62bae7f3f63a417c87e2a70ca2308744.png) 启动服务 \[root@nginx system\]# systemctl start php-fpm.service \[root@nginx system\]# netstat -antlupe \| grep php ![](https://i-blog.csdnimg.cn/direct/d5b5c785257e4dcf8b62b3787933bfb8.png) \[root@nginx fpm\]# cd /usr/local/php/bin/ #添加php环境变量 \[root@nginx bin\]# vim \~/.bash_profile ![](https://i-blog.csdnimg.cn/direct/03976761a99f43ebbd39e900272d8a5a.png) \[root@nginx bin\]# source \~/.bash_profile #### php测试页面 \[root@nginx-node1 fpm\]# mkdir /data/web/php -p \[root@nginx-node1 fpm\]# vim /data/web/php/index.php ![](https://i-blog.csdnimg.cn/direct/b1b7b183c3d24d2aacf083f56842383f.png) #### nginx配置转发 ![](https://i-blog.csdnimg.cn/direct/8d2ad914a17d400b96ce8c50360de909.png) 测试 ![](https://i-blog.csdnimg.cn/direct/1406e23ab53e49b9b7a47f8e5675f1e8.png) #### 访问php测试页面 ![](https://i-blog.csdnimg.cn/direct/b3cd9099ab5348f2bb6eec9612f55204.png) ### memcache模块 安装memcache模块 \[root@nginx-node1 \~\]# tar zxf memcache-8.2.tgz \[root@nginx-node1 \~\]# cd memcache-8.2/ \[root@nginx-node1 memcache-8.2\]# yum install autoconf \[root@nginx-node1 memcache-8.2\]# phpize \[root@nginx-node1 memcache-8.2\]# ./configure \&\& make \&\& make install 复制测试文件到nginx发布目录中 \[root@nginx-node1 extensions\]# cd /root/memcache-8.2/ \[root@nginx-node1 memcache-8.2\]# cp example.php memcache.php /data/web/php/ \[root@nginx-node1 memcache-8.2\]# vim /data/web/php/memcache.php ![](https://i-blog.csdnimg.cn/direct/24ea98677ac34c379b1c5b64814c2264.png) 配置php加载memcache模块 \[root@nginx-node1 memcache-8.2\]# vim /usr/local/php/etc/php.ini ![](https://i-blog.csdnimg.cn/direct/d31962c4d5384b5d9d9157ecb3d4e73b.png) \[root@nginx-node1\~\]# systemctl reload php-fpm \[root@nginx-node1\~\]# php -m \| grep mem 部署memcached \[root@nginx-node1\~\]# yum install memcached -y \[root@nginx-node1\~\]# systemctl enable --now memcached.service 测试 访问 http://www.timingwxq.org/memcache.php 查看命中效果 ![](https://i-blog.csdnimg.cn/direct/6e26419a30d54ad382714d6665dac87d.png) ![](https://i-blog.csdnimg.cn/direct/543268ee1ab1443cbc7fa401c67fe2e8.png) ### 高速缓存 \[root@nginx-node1 conf.d\]# vim php.conf #使用内置变量$query_string来作为key #缓存失效时间300秒 #设定key的值 #检测mem中是否有要访问的php #缓存为加载的php数据 ![](https://i-blog.csdnimg.cn/direct/c294c304d9994d3b8c6cd25c082d8148.png) \[root@nginx-node1 conf.d\]# nginx -s reload 测试结果 \[root@nginx-node1 conf.d\]# ab -n500 -c10 [http://www.timingwxq.org/index.php](http://www.timingwxq.org/index.php "http://www.timingwxq.org/index.php") ![](https://i-blog.csdnimg.cn/direct/3e8e7ad42dc54b36817b2d183b6a50ba.png) ### 编译安装openresty 解压 \[root@nginx-node1 \~\]# tar zxf openresty-1.25.3.1.tar.gz \[root@nginx-node1 \~\]# cd openresty-1.25.3.1/ 编译 \[root@nginx-node1 openresty-1.25.3.1\]# ./configure --prefix=/usr/local/openresty \\ \> --with-http_realip_module \\ \> --with-http_sub_module \\ \> --with-http_gzip_static_module \\ \> --with-http_stub_status_module \\ \> --without-http_memcached_module \\ \> --with-stream \\ \> --with-stream_ssl_module \\ \> --with-stream_realip_module \\ \> --with-pcre \\ \> --with-http_ssl_module \[root@nginx-node1 openresty-1.25.3.1\]# gmake -j2 \&\& gmake install \[root@nginx-node1 openresty-1.25.3.1\]# cd /usr/local/openresty/ 配置环境变量 \[root@nginx-node1 bin\]# vim \~/.bash_profile ![](https://i-blog.csdnimg.cn/direct/bf626c39081d455e92251249110df23a.png) \[root@nginx-node1 bin\]# source \~/.bash_profile 查看80端口 ![](https://i-blog.csdnimg.cn/direct/a1fd4c1945584c619cc4ebfcf8711af1.png) 测试 浏览器访问172.25.254.100 ![](https://i-blog.csdnimg.cn/direct/e4f03710c3694837998b2cc524cfe193.png)

相关推荐
蓝莓味柯基1 分钟前
DevOps:概念与学习路径
运维·学习·devops
FJW02081417 分钟前
【Linux】web服务器的部署和优化
linux·运维·服务器·rhce
Linux运维老纪23 分钟前
Python文件操作及数据库交互(Python File Manipulation and Database Interaction)
linux·服务器·数据库·python·云计算·运维开发
平生不喜凡桃李35 分钟前
Linux 进程控制
linux·运维·服务器
鱼与宇1 小时前
Linux常用命令
linux·运维·服务器
小南家的青蛙1 小时前
lspci的资料
linux·运维·服务器
敖云岚1 小时前
【那些年踩过的坑】Docker换源加速详细教程(截至2025年4月)
运维·docker·容器
柳如烟@2 小时前
Docker安装ES :确保 Kibana 正确连接 Elasticsearch
运维·数据库·elasticsearch·docker·容器·kibana
网络工程师_ling2 小时前
【WLAN】华为无线AC双机热备负载分担—双链路热备份
运维·网络
饭来_3 小时前
配置 RDP 远程桌面协议连接ubuntu服务器桌面
linux·运维·服务器