Nginx 从入门到实战:安装、配置、升级与高级应用全解析
1 Nginx 概述和安装
2 Nginx 介绍
Nginx:engine X ,2002年开发,分为社区版和商业版(nginx plus ) 2019年3月11日 F5 Networks 6.7亿美元的价格收购 Nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务 器 解决C10K问题(10K Connections)
Nginx官网: http://nginx.org
nginx的其它的二次发行版:
- Tengine:由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加 了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了 很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。从2011年12月开始, Tengine成为一个开源项目官网: The Tengine Web Server
- OpenResty:基于 Nginx 与 Lua 语言的高性能 Web 平台, 章亦春团队开发,
官网: OpenResty® - 开源官方站
2.1 Nginx 功能介绍
- 静态的web资源服务器html,图片,js,css,txt等静态资源
- http/https协议的反向代理
- 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
- tcp/udp协议的请求转发(反向代理)
- imap4/pop3协议的反向代理
3 Nginx安装
3.1 Nginx获取
- 网站获取下载链接,用wget命令下载
- 提前准备好安装包,传入并下载
我这里使用方法2,自备安装包后传入进行安装
对包进行解压缩:
tar zxf nginx-1.24.0.tar.gz
可以看到nginx的目录解压出来了
3.2 安装相关依赖(一次性)
安装nginx相关依赖插件:
dnf install gcc pcre-devel zlib-devel openssl-devel -y
3.3 编译安装 Nginx
进入目录文件后进行编译安装:
[root@nginx nginx-1.24.0]# ./configure \
> --prefix=/usr/local/nginx \ # 设置 Nginx 的安装路径为 /usr/local/nginx
> --user=nginx \ # 指定 Nginx 进程将以 nginx 用户身份运行
> --group=nginx \ # 指定 Nginx 进程的组为 nginx> --with-http_ssl_module \ # 启用 HTTP SSL 模块
> --with-http_v2_module \ # 启用 HTTP/2 模块,支持 HTTP/2 协议
> --with-http_realip_module \ #支持ip透传
> --with-http_gzip_static_module \ #支持压缩
> --with-http_stub_status_module \ #支持状态页面
> --with-pcre \ #支持正则
> --with-stream \ #支持tcp反向代理
> --with-stream_ssl_module #支持tcp的ssl加密
创建一个专门运行 Nginx 服务的系统用户 :
useradd -s /sbin/nologin -M nginx
进入目录文件进行编译:
cd nginx-1.24.0/
运行下面命令:
./configure
--prefix=/usr/local/nginx
--user=nginx
--group=nginx
--with-http_ssl_module
--with-http_v2_module
--with-http_realip_module
--with-http_gzip_static_module
--with-http_stub_status_module
--with-pcre --with-stream
--with-stream_ssl_module
取消debug模式,减小编译大小:
vim auto/cc/gcc
将debug模式注释掉
编译:
make
安装:
make install
修改全局配置:
vim ~/.bash_profile
填入如下内容:
export PATH=$PATH:/usr/local/nginx/sbin
重新加载全局配置:
source ~/.bash_profile
查看nginx版本:
nginx -v
修改nginx对外显示得名称和版本:
4 平滑升级和回滚
4.1 平滑升级和回滚介绍
- 将旧Nginx二进制文件换成新Nginx程序文件(注意先备份)
- 向master进程发送USR2信号
- master进程修改pid文件名加上后缀.oldbin,成为nginx.pid.oldbin
- master进程用新Nginx文件启动新master进程成为旧master的子进程,系统中将有新旧两个Nginx主 进程共同提供Web服务,当前新的请求仍然由旧Nginx的worker进程进行处理,将新生成的master进 程的PID存放至新生成的pid文件nginx.pid
- 向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止
- 向旧master进程发送QUIT信号,关闭老master,并删除Nginx.pid.oldbin文件
- 如果发现升级有问题,可以回滚∶向老master发送HUP,向新master发送QUIT
4.1.1 实现平滑升级和回滚
启动nginx:
nginx
4.1.2 获取新nginx安装包
我在这已经准备好了新的安装包
进行解压:
tar zxf nginx-1.26.1.tar.gz
4.1.3 增加新模块(可选)
这里不添加新模块的可以跳过
先准备好新增模块的安装包
进行解压
tar zxf echo-nginx-module-0.63.tar.gz
4.1.4 进行编译安装
这是新加的模块,没加的可以忽略
进行编译:
make
编译完成:
4.1.5 对旧版nginx命令进行备份
来到 /usr/local/nginx/sbin/
cd /usr/local/nginx/sbin/
ll
为了以防万一,对旧版的nginx命令进行备份,以便出现问题能够进行回滚操作:
cp nginx nginx.old
4.1.6 将新版的nginx命令替换掉现在的 nginx
使用新版nginx命令对现版本的nginx命令进行覆盖操作
\cp -f /root/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin/
查看替换情况,替换成功
4.1.8 进行平滑升级
查看当前nginx的版本:
curl -I 172.25.254.10
当前nginx版本为1.24.0
筛选nginx进程:
ps aux |grep nginx
可以看到新版的nginx已经可以看到,但是因为未进行替换升级,只有旧版的master在监听端口
平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的 nginx
#此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80
#此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进 程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。
kill -USR2 7838
再次查看nginx运行状况:
ps aux | grep nginx
发现新版的nginx已经上来了
回收旧版本:
kill -WINCH 7838
旧进程已经被回收:
查看当前nginx状况:
curl -I 172.25.254.10
版本号已经变更为1.26.1:
4.1.9 回滚
操作与升级类似
先进行备份,然后将nginx文件覆盖,
使用命令:
[root@Nginx sbin]# kill -HUP 端口号
将老版本的进程提上来
- 将新进程杀掉,kill -WINCH 端口号
- 完成回滚操作
先查看当前得版本:
curl -I 172.25.254.10
先当前得版本进行备份,因为是1.26.1,版本较新,我这边命名为nginx.new:
cp nginx nginx.new
备份完毕,将要回滚得old版本将nginx文件覆盖:
mv nginx.old nginx
查看进程,找到老版本端口号
ps aux | grep nginx
将老版本进程提上来:
kill -HUP 7838
查看进程状况:
ps aux | grep nginx
将之前1.26.1版本的进行kill,实现回滚操作:
kill -WINCH 7858
查看进程状况:
ps aux | grep nginx
1.26.1版本的进程以及kill了,留下的是1.24的进程
查看版本情况:
curl -I 172.25.254.10
成功实现回滚:
4.1.10 进行平滑升级和回滚时的排错(可选)
发生如下图情况:
进行平滑升级后,新版本进程仍未上来,那么可以进行下面步骤:
将当前的nginx进程杀掉:
然后将我们之前备份的ngin.old 手动回滚:
[root@nginx sbin]# \cp -f /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx
再次启动nginx,版本号显示1.24.0,回滚完毕:
此时再进行平滑升级操作即可。
5 nginx核心配置
5.1 nginx服务的启动脚本编写
编辑 /lib/systemd/system/ 下的文件,底下的名字自己取
vim /lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
重新读取配置:
[root@nginx sbin]# systemctl start nginx
关闭nginx:
[root@nginx sbin]# killall nginx
启动nginx:
[root@nginx sbin]# systemctl start nginx
可以看见配置完成:
#########################
5.2 实现nginx的高并发配置
查看当前系统支持打开的文件数量:
ulimit -a
查看到当前系统支持最多打开1024个文件:
先对最大文件打开数进行修改:
vim /etc/security/limits.conf
编辑文件最大打开数为100000:
ulimit -n 100000
再次进行查看:
ulimit -n
编辑nginx配置文件:
vim /usr/local/nginx/conf/nginx.conf
修改
重启服务:
systemctl restart nginx
测试:
ab -n100000 -c5000 http://172.25.254.10/index.html
5.3 新建一个 PC web 站点
编辑nginx配置文件:
vim /usr/local/nginx/conf/nginx.conf
填入如下内容:
include "/usr/local/nginx/conf.d/*.conf";
创建子配置文件目录:
mkdir -p /usr/local/nginx/conf.d/
编写子配置文件:
vim /usr/local/nginx/conf.d/vhosts.conf
指定域名为www.rin.com
server{listen 80;server_name www.rin.com;root /web/html;index index.html;
}
为主机添加域名解析:
vim /etc/hosts
重载配置:
nginx -s reload
为测试提供其前提条件:
在默认发布目录填入内容为:
echo rin-172.25.254.10 > /usr/local/nginx/html/index.html
为子配置目录填入内容为:
mkdir -p /web/html
echo www.rin.com > /web/html/index.html
测试:
当使用IP进行访问:
curl 172.25.254.10
当使用域名进行访问:
curl www.rin.com
5.4 root 与 alias
root:指定web的家目录,在定义location的时候,文件的绝对路径等于 root+location
创建网站文件,并进行编辑内容
[root@nginx sbin]# mkdir /data/web/test -p
[root@nginx sbin]# echo This is test > /data/web/test/index.html
检验并重启服务:
[root@nginx sbin]# nginx -t
[root@nginx sbin]# systemctl restart nginx
编辑配置:
vim /usr/local/nginx/conf.d/vhost.conf
server{listen 80;server_name www.rin.com;root /web/html;index index.html;location /test {root /web/test;}
}
测试:
alias:定义路径别名,会把访问的路径重新定义到其指定的路径,文档映射的另一种机制;仅能用于 location上下文,此指令使用较少
重新编写个test2网页文件夹,并进行内容编写:
[root@nginx sbin]# mkdir /data/web/test2 -p
[root@nginx sbin]# echo This is test2 > /data/web/test2/index.html
修改路径配置:(location与alias最后面要有斜杠就一起都有,反之没有就一起都没有)
重启服务,并进行测试:
[root@nginx sbin]# systemctl restart nginx
测试完毕。
5.5 Ngin账户认证:
创建或更新一个存储基本认证用户名和密码的文件。这个命令会在 /usr/local/nginx/.htpasswd
文件中创建一个名为 admin
的用户,并为其设置密码。
htpasswd -cm /usr/local/nginx/.htpasswd admin
查看创建情况:
cat /usr/local/nginx/.htpasswd
创建login登录页面:
mkdir -p /web/login
echo login > /web/login/index.html
编辑子文件配置:
vim /usr/local/nginx/conf.d/vhosts.conf
location /login {root /web;index index.html;auth_basic "piease input username and password";auth_basic_user_file "/usr/local/nginx/.htpasswd";}
测试:
直接访问登录页面:
curl www.rin.com/login/
携带账户密码访问:
curl -uadmin:123 www.rin.com/login/
5.6 自定义错误页面:
创建错误页面目录:
mkdir -p /web/errorpage
创建错误页面并填入信息:
echo error-rin-error > /web/errorpage/error.html
编辑子配置文件:
vim /usr/local/nginx/conf.d/vhosts.conf
error_page 500 502 503 504 404 /errorpage/error.html;location /errorpage {root /web;
}
检测配置语法是否有误:
nginx -t
重载服务配置:
systemctl reload nginx.service
测试:
当访问没有的目录时,会跳转到自定义错误页面:
curl www.rin.com/a
5.7 自定义错误日志:
systemctl reload nginx.service
测试:
ll /usr/local/nginx/logs/
可以看到已经自动创建了 前面定义的日志目录:
手动访问成功和失败,让日志产生内容:
curl www.rin.com
curl www.rin.com/a
查看内容:
ll /usr/local/nginx/logs/
tail -5 /usr/local/nginx/logs/rin.access
tail -5 /usr/local/nginx/logs/rin.error
5.8 长连接配置:
keepalive_timeout timeout [header_timeout]; #设定保持连接超时时长,0表示禁止长连接,默认为75s#通常配置在http字段作为站点全局配置keepalive_requests 数字; #在一次长连接上所允许请求的资源的最大数量#默认为100次,建议适当调大,比如:500keepalive_requests 3;keepalive_timeout 65 60;#开启长连接后,返回客户端的会话保持时间为60s,单次长 连 接累计请求达到指定次数请求或65秒就会被断开,第二个数字60为发送给客户端应答报文头部中显示的超时时 间设置为60s:如不设置客户端将不显示超时时 间。Keep-Alive:timeout=60 #浏览器收到的服务器返回的报文#如果设置为0表示关闭会话保持功能,将如下显示:#Connection:close 浏览器收到的服务器返回的报文
编辑keepalived配置文件:
vim /usr/local/nginx/conf/nginx.conf
下载测试软件:
dnf install telnet -y
填入如下内容:
重新加载配置:
systemctl reload nginx.service
测试:
telnet 172.25.254.10 80
逐行输入以下内容(按一次回车输入一行):
GET / HTTP/1.1
Host: 172.25.254.10
Connection: close最后按两次回车(发送一个空行),触发请求发送。


5.9 作为下载服务器配置
创建共享资源存放目录:
mkdir -p /web/download
建立实验素材:
大小为50M
dd if=/dev/zero of=/web/download/rin bs=1M count=50
编辑子文件配置:
location /download {autoindex on;autoindex_exact_size on;autoindex_localtime on;limit_rate; }
重新加载服务:
systemctl reload nginx.service
查看下载页:
curl www.rin.com/download/
下载文件:
linux上测试:
curl -O www.rin.com/download/rin
网页测试:
6 Nginx 高级配置
6.1 nginx状态页面:
编辑子文件配置:
vim /usr/local/nginx/conf.d/vhosts.conf
server{listen 80;server_name www.rin.com;root /web/html;index index.html;error_page 500 502 503 504 404 /errorpage/error.html;location /status {stub_status;auth_basic "auth login";auth_basic_user_file /usr/local/nginx/.htpasswd;allow 192.168.0.0/16;allow 172.25.0.0/16;deny all;
}
重新加载服务配置:
systemctl reload nginx.service
测试:
带上用户密码访问页面:
curl -uadmin:123 www.rin.com/status/
6.2 Nginx 压缩功能
Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文 件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相 应的CPU资源。
Nginx对文件的压缩功能是依赖于模块 ngx_http_gzip_module,默认是内置模块
配置命令:
#启用或禁用gzip压缩,默认关闭
gzip on | off;
#压缩比由低到高从1到9,默认为1,值越高压缩后文件越小,但是消耗cpu比较高。基本设定未4或者5
gzip_comp_level 4;
#禁用IE6 gzip功能,早期的IE6之前的版本不支持压缩
gzip_disable "MSIE [1-6]\.";
#gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
#启用压缩功能时,协议的最小版本,默认HTTP/1.1
gzip_http_version 1.0 | 1.1;
#指定Nginx服务需要向服务器申请的缓存空间的个数和大小,平台不同,默认:32 4k或者16 8k;
gzip_buffers number size;
#指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错
gzip_types mime-type ...;
#如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开
gzip_vary on | off;
#预压缩,即直接从磁盘找到对应文件的gz后缀的式的压缩文件返回给用户,无需消耗服务器CPU
#注意: 来自于ngx_http_gzip_static_module模块
gzip_static on | off;
编辑nginx.conf配置文件:
vim /usr/local/nginx/conf/nginx.conf
填入如下内容,相关配置信息参考上面的配置内容。
gzip on ;gzip_comp_level 4;gzip_disable "MSIE [1-6]\.";gzip_min_length 4k;gzip_vary on;gzip_static on;
测试准备:
创建small文件:
echo rin-small > /usr/local/nginx/html/small.html
创建big文件:
cp /usr/local/nginx/logs/access.log /usr/local/nginx/html/big.html
查看大小:
du -sh /usr/local/nginx/html/big.html
du -sh /usr/local/nginx/html/small.html
进行测试:
curl --head --compressed 172.25.254.10/small.html
curl --head --compressed 172.25.254.10/big.html
Nginx 的 Gzip 配置已经生效,small.html 没有被压缩,而 big.html 被压缩了。这符合之前设置的 gzip_min_length 4k
配置。
6.3 重新添加echo模块,并实现nginx变量使用:
将nginx.conf配置文件及其子配置文件vhost.conf进行备份:
cp /usr/local/nginx/conf.d/vhosts.conf vhost.conf.bat
cp /usr/local/nginx/conf/nginx.conf nginx.conf.bat
查看当前安装的模块配置:
nginx -V
将echo模块安装包解压:
tar xzf echo-nginx-module-0.63.tar.gz
进入nginx.26.1目录:
cd nginx-1.26.1/
进行编译,同时加上新模块,路径+安装包名:
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --add-module=/root/echo-nginx-module-0.63
编译:
make
编译安装:
make install
查看模块安装情况:
nginx -V
重启nginx:
systemctl restart nginx.service
编辑子配置文件:
vim /usr/local/nginx/conf.d/vhosts.conf
location /var {default_type text/html;echo "客户端IP: $remote_addr";echo "请求参数: $args";echo "是否有参数: $is_args";echo "请求URI(不含参数): $document_uri";echo "请求主机名: $host";echo "限速值(字节/秒): $limit_rate";echo "客户端端口: $remote_port";echo "请求方法: $request_method";echo "请求协议: $scheme";echo "服务器端口: $server_port";echo "用户浏览器: $http_user_agent";
}
测试:
curl -A "Mozilla/5.0 (Test) curl" "http://www.rin.com/var?name=test&age=20"
6.4 匹配ssl证书及全站加密:
创建证书储存文件:
mkdir /usr/local/nginx/certs
创建证书:
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/nginx/certs/rin.key -x509 -days 365 -out /usr/local/nginx/certs/rin.crt
编辑nginx子配置文件:
vim /usr/local/nginx/conf.d/vhosts.conf
配置全站加密以及当 访问文件不存在时,访问页面重定向到首页:
listen 443 ssl;ssl_certificate /usr/local/nginx/certs/rin.crt;ssl_certificate_key /usr/local/nginx/certs/rin.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; location / {if ( $scheme = http ){rewrite /(.*) https://$host/$1;}}
测试:访问http连接,会将其转到https:
curl -I http://www.rin.com
6.5 当访问文件不存在重定向到首页:
编辑nginx子配置文件:
vim /usr/local/nginx/conf.d/vhosts.conf
填入如下配置:
if ( !-e $request_filename ){rewrite /(.*) https://$host/index.html;}
测试
当访问文件不存在:
curl -L -k http://www.rin.comcurl -L -k http://www.rin.com/a
会重定向到首页:
7 nginx反向代理
名称 | IP、VIP | 角色 |
---|---|---|
webservera | ip:172.25.254.10 | Nginx 反向代理服务器 |
nginxrs1 | ip:172.25.254.110 | 后端服务器 1(静态资源) |
nginxrs2 | ip:172.25.254.120 | 后端服务器 2(动态脚本处理) |
对rs1进行配置:
安装httpd:
dnf install httpd -y
对rs1的默认发布目录进行编写内容:
echo rs1-172.25.254.110 > /var/www/html/index.html
重启服务:
systemctl start httpd
关闭防火墙:
systemctl stop firewalld.service
对rs2:
安装httpd:
dnf install httpd -y
编辑尾缀为php的默认发布文件:
echo "rs2-php-172.25.254.120" > /var/www/html/info.php
重启服务:
systemctl start httpd
关闭防火墙:
systemctl stop firewalld.service
对nginx代理服务器进行配置:
配置其子配置文件:
vim /usr/local/nginx/conf.d/vhosts.conf
server{listen 80;server_name www.rin.com;location / {proxy_pass http://172.25.254.110:80;}location ~ \.(php|jsp|js)$ {proxy_pass http://172.25.254.120:80;}
}
测试:
当访问域名:
curl www.rin.com
当访问页面尾缀为php时:
curl www.rin.com/info.php
7.1 反向代理示例: 缓存功能
名称 | IP、VIP | 角色 |
---|---|---|
client | ip:172.25.254.220 | 测试机 |
webservera | ip:172.25.254.10 | Nginx 反向代理服务器 |
nginxrs1 | ip:172.25.254.110 | 后端服务器 1 |
nginxrs2 | ip:172.25.254.120 | 后端服务器 2 |
对nginx主配置文件:
vim /usr/local/nginx/conf/nginx.conf
填入如下内容:
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20minactive=120s max_size=1g;
填入配置的目录会自动生成:
ll /usr/local/nginx/proxy_cache/
tree /usr/local/nginx/proxy_cache/
编辑nginx子配置文件:
vim /usr/local/nginx/conf.d/vhosts.conf
填入如下内容:
location / {proxy_pass http://172.25.254.110:80;proxy_cache proxycache;proxy_cache_key $request_uri;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 1m;}
重载配置:
nginx -s reload
测试:
在clien测试机上进行测试:
ab -n10000 -c500 http://www.rin.com/index.html
当未配置缓存:
当进行缓存配置:
7.2 http 反向代理负载均衡
配置rs1和rs2:
dnf install httpd -y
echo rs1-172.25.254.110 > /var/www/html/index.html
echo rs2-172.25.254.120 > /var/www/html/index.html
重启服务:
systemctl start httpd
关闭防火墙:
systemctl stop firewalld.service
配置nginx子配置文件:
vim /usr/local/nginx/conf.d/vhosts.conf
upstream webserver {server 172.25.254.110:80 weight=1 fail_timeout=15s max_fails=3;server 172.25.254.120:80 weight=1 fail_timeout=15s max_fails=3;server 172.25.254.10:80 backup;
}server{listen 80;server_name www.rin.com;location / {proxy_pass http://webserver;#proxy_cache proxycache;#proxy_cache_key $request_uri;#proxy_cache_valid 200 302 301 10m;#proxy_cache_valid any 1m;}
配置完重载配置:
nginx -s reload
测试:
在测试机进行实验
curl www.rin.com
7.3 FastCGI
下载依赖软件:
dnf install -y bzip2 systemd-devel libxml2-devel sqlite-devel
libpng-devel.x86_64 libcurl-devel
下面两个包要手动查找更新:
yum install oniguruma-6.9.6-1.el9.6.x86_64.rpm -yyum install oniguruma-devel-6.9.6-1.el9.6.x86_64.rpm -y
解压php压缩包:
tar xzf php-8.3.9.tar.gz
进入php目录:
cd 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
make && make install
切换目录
cd /usr/local/php/etc/
配置文件:
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
编辑配置文件:
cd php-fpm.d/
cp www.conf.default www.conf
编辑配置文件:
cd /root/php-8.3.9/
cp php.ini-production /usr/local/php/etc/php.ini
修改时区:
vim /usr/local/php/etc/php.ini
进行注释:
vim /lib/systemd/system/php-fpm.service
启动php:
systemctl start php-fpm.service
查看进程:
netstat -antlupe | grep php
创建php目录:
mkdir /web/php
编写php默认发布文件:
vim /web/php/index.php
填入如下内容:
<?php
phpinfo();
?>
nginx配置转发:
编辑nginx子配置目录:
server {listen 80;server_name www.rin.com;location ~ \.php$ {root /web;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi.conf;fastcgi_param SCRIPT_FILENAME $document_root/php$fastcgi_script_name;}
}
重新加载配置:
nginx -s
测试:
代码行:
curl www.rin.com/index.php
网页:
添加php环境变量:
找到php/bin:
ll /usr/local/php/bin/
编辑系统环境变量:
vim /root/.bash_profile
在原本的变量后面添加, 以 : 隔断:
:/usr/local/php/bin
重载环境配置:
source .bash_profile
7.4 php的动态扩展模块(php的缓存模块)
7.5 安装memcache模块
安装依赖:
dnf install autoconf -y
解压:
tar xzf memcache-8.2.tgz
来到memcache目录:
cd memcache-8.2/
phpize
./configure && make && make install
ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20230831
cd ~/memcache-8.2/
cp example.php memcache.php /web/php/
修改登入账号密码以及指定查看ip和端口:
vim /web/php/memcache.php
配置php加载memcache模块:
vim /usr/local/php/etc/php.ini
填入如下配置:
extension=memcache
重新加载服务配置:
systemctl reload php-fpm.service
php -m | grep mem
部署memcached:
yum install memcached -y
systemctl enable --now memcached.service
netstat -antlupe | grep memcache
测试:

ab -n500 -c10 http://www.rin.com/index.php
ab -n500 -c10 http://www.rin.com/example.php

指标 | /example.php | /index.php |
---|---|---|
总耗时 (秒) | 0.587 | 0.619 |
吞吐量 (请求 / 秒) | 851.23 | 807.15 |
平均响应时间 (毫秒) | 11.748 | 12.389 |
失败请求数 | 0 | 38 |
传输速率 (KB / 秒) | 231.09 | 59,160.27 |
7.6 nginx 二次开发版-openresty:
Nginx 是俄罗斯人发明的, Lua 是巴西几个教授发明的,中国人章亦春把 LuaJIT VM 嵌入到Nginx 中,实现了 OpenResty 这个高性能服务端解决方案OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将Nginx有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。OpenResty 由于有功能强大且方便的的API,可扩展性更强,如果需要实现定制功能,OpenResty是个不错的选择官网: http://openresty.org/cn/
安装依赖:
dnf install gcc pcre-devel openssl-devel perl zlib-devel -y
创建用户:
useradd -r -s /sbin/nologin nginx
解压openresty压缩包:
tar zxf openresty-1.25.3.1.tar.gz
进入目录:
cd openresty-1.25.3.1
编译:
./configure
--prefix=/apps/openresty
--user=nginx
--group=nginx
--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
编译安装:
gmake && gmake install
bianyibian'yi