还不会企业高性能web服务器?快进来学习

目录

Web 服务基础介绍

正常情况下的单次web服务访问流程

Web 服务介绍

Nginx-高性能的 Web 服务端

背景

特点

Nginx 模块介绍

nginx 有多种模块

Nginx 安装

Nginx 编译安装

自行下载包:

使用脚本配置网络:

解压

编译源码

出现报错

 搜索pcre包

安装pcre包

 再编译

下载gcc

再次编译 

 下载:openssl-devel.x86_64

 再次编译

回滚操作(删掉刚刚编译的文件)

 查看 objs 文件

 使用双核进行编译

 查看插件是否生成

 编译安装

 切换到指定的安装目录

 创建nginx用户

 启动nginx

 查看nginx相关文件大小

nginx 的关闭和重启:

关闭nginx

 重启nginx

 把 nginx 软件的命令执行路径添加到环境变量中

 启动nginx

 如果遇到错误

 查看nginx配置文件

 关闭防火墙

 测试:访问nginx服务器(并观察版本号)

隐藏版本号

nginx的平滑升级

上传需要的软件包:

 解压:nginx-1.26.1和echo-nginx-module

 进入nginx-1.26.1并编译和make (不能make install 不然会覆盖掉1.24.2的nginx规则)

 进入 /usr/local/nginx/sbin/ 并备份nginx 文件

 重启nginx服务(先stop,再start)

 测试:通过访问来查看当前nginx的版本(应该是nginx1.66)

 将nginx1.26的内核文件覆盖原nginx1.24

 使用USR2信息对nginx进行平滑升级

使用WINCH信息 回收掉nginx1.24的进程

测试:通过访问来查看当前nginx的版本(应该是nginx1.26.1)

nginx版本回滚

使用-HUP信号来激活 nginx1.24的进程

 再回收掉nginx1.26的进程

 测试:通过访问来查看当前nginx的版本(应该是nginx1.24)

nginx服务的启动脚本编写

nginx全局配置参数优化调整

查看用户

 把两个工作进程各自绑定一个核心

 最大链接数

nginx添加php模块

重新编译nginx

删掉旧的nginx

上传需要的模块软件包  

编译并安装nginx  

结束nginx旧进程(如果没有旧进程就不做)  

启动nginx  

源码编译php

上传php-8.3.9.tra软件包

​编辑 解压包  

编译php  

会出现缺少环境依赖  

我们通过查找这个服务的软件包,安装来解决  

依赖问题总和:

 会发现没有oniguruma-devel 这个包,去网络上下载:(选择的阿里云镜像站)

我们使用wget下载后,再dnf安装oniguruma-devel包  

再次编译:  

make 并 make install  

复制配置文件  

修改时区 

复制启动文件  

修改php配置文件  

复制配置文件  

启动php服务  

添加php环境变量

创建一个目录存放页面并创建一个测试脚本:

给nginx创建一个子配置文件(记得在主配置文件里导入):

在主配置文件里导入子配置文件:  

​编辑 重启nginx

在浏览器进行测试

PHP的动态网页扩展模块(memcache)

下载 autoconf服务和memcached服务  

使用phpizp编译并安装 

在php配置文件里添加memcache模块  

测试:  

复制memcache文件:  

重启服务:  

浏览器访问:  

PHP 高速缓存

修改nginx配置文件,将memcache移到前面

测试(错误率为0!):  

nginx 二次开发版本

openresty

上传openresty-1.25.3.1.tar.gz包:

解压并编译安装openresty:

配置openresty的环境变量:  

​编辑 查看版本号并启动openresty


Web 服务基础介绍

正常情况下的单次web服务访问流程

  1. 用户请求用户在浏览器中输入URL或点击链接,发起HTTP请求。
  2. DNS解析浏览器通过DNS(域名系统)将域名解析为IP地址。
  3. 建立连接浏览器与Web服务器之间建立TCP连接,通常使用三次握手过程。
  4. 发送请求浏览器向Web服务器发送HTTP请求,包括请求方法(GET、POST等)、请求头和可能的请求体。
  5. 服务器处理请求Web服务器接收到请求后,解析请求,可能会调用后端服务(如数据库、API等)进行处理。
  6. 生成响应服务器根据请求生成HTTP响应,通常包括状态码、响应头和响应体(如HTML、JSON等)。
  7. 发送响应服务器将响应发送回浏览器。
  8. 浏览器渲染浏览器接收到响应后,解析HTML并渲染页面,处理CSS和JavaScript。
  9. 关闭连接根据HTTP协议的设置,连接可能会关闭,或者保持活动以便后续请求。

Web 服务介绍

Nginx-高性能的 Web 服务端

背景

  1. 开发动机:Nginx的开发是为了应对C10K问题,即如何高效地处理10,000个并发连接。传统的Web服务器(如Apache)在高并发场景下表现不佳,因此需要一种新的解决方案。
  2. 开源项目:Nginx是一个开源软件,允许用户自由使用和修改,吸引了大量开发者和企业的参与。
  3. 广泛应用:随着互联网的发展,Nginx逐渐被广泛应用于各类网站和应用中,尤其是在高流量和高并发的环境中,如社交媒体、电子商务和内容分发网络(CDN)。

特点

  1. 高性能:Nginx采用异步事件驱动架构,能够高效处理大量并发连接,性能优越。
  2. 反向代理和负载均衡:Nginx可作为反向代理服务器,支持负载均衡、SSL终端处理等功能,增强了系统的可扩展性和可靠性。
  3. 静态文件处理:Nginx在处理静态文件时表现出色,能够快速响应请求,减轻后端服务器的压力。
  4. 模块化设计:Nginx支持丰富的模块,可以根据需要进行扩展,满足不同的应用场景。
  5. 配置灵活:Nginx的配置文件简单明了,易于管理和维护,适合各种规模的应用。
  6. 社区支持:拥有活跃的社区和丰富的文档资源,用户可以方便地获取支持和解决方案。

Nginx 模块介绍

nginx 有多种模块

  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件 驱动机制 、进程管理等核心功能
  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等
  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如: Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
  • 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的 支持
  • Stream服务模块: 实现反向代理功能,包括TCP协议代理
  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 持等

Nginx 安装

Nginx 编译安装

自行下载包:

使用脚本配置网络:

ip地址网卡名主机名
192.168.160.120/24ens33nginx.ysh.org

解压

[root@nginx ~]# tar xzf nginx-1.24.0.tar.gz

 

[root@nginx ~]# cd nginx-1.24.0/
[root@nginx nginx-1.24.0]# ll

 

编译源码

./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

出现报错

 搜索pcre包

[root@nginx nginx-1.24.0]# dnf search pcre

 

安装pcre包

[root@nginx nginx-1.24.0]# dnf install -y pcre-devel.x86_64

 再编译

./configure --prefix=/usr/local/nginx \
--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 

 

下载gcc

[root@nginx nginx-1.24.0]# dnf install -y gcc*

再次编译 

./configure --prefix=/usr/local/nginx --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 

 下载:openssl-devel.x86_64

[root@nginx nginx-1.24.0]# dnf install -y openssl-devel.x86_64

 再次编译

./configure --prefix=/usr/local/nginx --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 ;

 

 当出现红框部分时,编译成功。

回滚操作(删掉刚刚编译的文件)

[root@nginx nginx-1.24.0]# make clean
rm -rf Makefile objs

 查看 objs 文件

[root@nginx nginx-1.24.0]# cd objs/
[root@nginx objs]# ls
autoconf.err  Makefile  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  src

 使用双核进行编译

[root@nginx nginx-1.24.0]# make -j2

 

 查看插件是否生成

[root@nginx nginx-1.24.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
[root@nginx nginx-1.24.0]# cd objs/
[root@nginx objs]# ls
autoconf.err  Makefile  nginx  nginx.8  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  ngx_modules.o  src
[root@nginx objs]#

 编译安装

[root@nginx nginx-1.24.0]# make install

 切换到指定的安装目录

[root@nginx nginx-1.24.0]# cd /usr/local/nginx/
[root@nginx nginx]# ls
conf  html  logs  sbin

 创建nginx用户

[root@nginx nginx]# cd sbin/
[root@nginx sbin]# useradd -s /sbin/nologin -M nginx
[root@nginx sbin]# id nginx
uid=1001(nginx) gid=1001(nginx) groups=1001(nginx)

 启动nginx

[root@nginx sbin]# ll
total 5524
-rwxr-xr-x. 1 root root 5654232 Aug 16 21:39 nginx
[root@nginx sbin]# ./nginx
[root@nginx sbin]# ps aux | grep nginx
root       22989  0.0  0.0   9888   940 ?        Ss   21:42   0:00 nginx: master process ./nginx
nginx      22990  0.0  0.1  13720  4780 ?        S    21:42   0:00 nginx: worker process
root       22992  0.0  0.0   6408  2160 pts/0    S+   21:42   0:00 grep --color=auto nginx
[root@nginx sbin]# netstat -antlupe | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          60024      22989/nginx: master

 查看nginx相关文件大小

[root@nginx sbin]# du -sh nginx
5.4M    nginx

nginx 的关闭和重启:

先注释gcc配置的debug这一行

[root@nginx sbin]# vim /root/nginx-1.24.0/auto/cc/gcc

 

关闭nginx

[root@nginx sbin]# ./nginx -s stop
[root@nginx sbin]# netstat -antlupe | grep nginx-1.24.0
[root@nginx sbin]# netstat -antlupe | grep nginx

 重启nginx

[root@nginx sbin]# ./nginx

 把 nginx 软件的命令执行路径添加到环境变量中

[root@nginx-node1 ~]# vim ~/.bash_profile
export PATH=$PATH:/usr/local/nginx/sbin

 

[root@nginx-node1 ~]# source ~/.bash_profile

[root@nginx-node1 ~]# du -sh /usr/local/nginx/sbin/nginx
1.2M /usr/local/nginx/sbin/nginx 

 启动nginx

[root@nginx-node1 conf]# nginx

 如果遇到错误

[root@nginx-node1 conf]# lsof -i :80
[root@nginx-node1 conf]# kill -9 pid

 查看nginx配置文件

[root@nginx ~]# cd /usr/local/nginx/conf/
[root@nginx conf]# ll

 

 关闭防火墙

[root@nginx conf]# systemctl stop firewalld
[root@nginx conf]# setenforce 0

 测试:访问nginx服务器(并观察版本号)

[root@nginx-node1 conf]# curl -I 192.168.160.120

隐藏版本号

[root@nginx conf]# cd /root/nginx-1.24.0/src/core/
[root@nginx core]# vim nginx.h
将 1.24.0 改为了 1.66.0

 

nginx的平滑升级

上传需要的软件包:

 解压:nginx-1.26.1和echo-nginx-module

[root@nginx ~]# tar zxf nginx-1.26.1.tar.gz
[root@nginx ~]# tar zxf echo-nginx-module-0.63.tar.gz

 进入nginx-1.26.1并编译和make (不能make install 不然会覆盖掉1.24.2的nginx规则)

[root@nginx 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_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --add-module=/root/echo-nginx-module-0.63 

[root@nginx nginx-1.26.1]# make

 进入 /usr/local/nginx/sbin/ 并备份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服务(先stop,再start)

[root@nginx sbin]# nginx -s stop
[root@nginx sbin]# nginx
[root@nginx sbin]# ps aux | grep nginx
root        1960  0.0  0.0   9888   936 ?        Ss   17:34   0:00 nginx: master process nginx
nginx       1961  0.0  0.1  13720  5100 ?        S    17:34   0:00 nginx: worker process
root        1971  0.0  0.0   6408  2112 pts/0    S+   17:34   0:00 grep --color=auto nginx

 测试:通过访问来查看当前nginx的版本(应该是nginx1.66)

[root@nginx ~]# curl -I 192.168.160.120

 将nginx1.26的内核文件覆盖原nginx1.24

[root@nginx sbin]# \cp -f /root/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin/

 使用USR2信息对nginx进行平滑升级

[root@nginx sbin]# kill -USR2 1960
[root@nginx sbin]# ps aux | grep nginx
root        1960  0.0  0.0   9888  2528 ?        Ss   17:34   0:00 nginx: master process nginx
nginx       1961  0.0  0.1  13720  5100 ?        S    17:34   0:00 nginx: worker process
root        2086  0.0  0.1   9916  6432 ?        S    17:34   0:00 nginx: master process nginx
nginx       2087  0.0  0.1  13748  5180 ?        S    17:34   0:00 nginx: worker process
root        2103  0.0  0.0   6408  2112 pts/0    S+   17:35   0:00 grep --color=auto nginx 

使用WINCH信息 回收掉nginx1.24的进程

[root@nginx sbin]# kill -WINCH 1960
[root@nginx sbin]# ps aux | grep nginx
root        1960  0.0  0.0   9888  2528 ?        Ss   17:34   0:00 nginx: master process nginx
root        2086  0.0  0.1   9916  6432 ?        S    17:34   0:00 nginx: master process nginx
nginx       2087  0.0  0.1  13748  5180 ?        S    17:34   0:00 nginx: worker process
root        2127  0.0  0.0   6408  2172 pts/0    S+   17:35   0:00 grep --color=auto nginx

测试:通过访问来查看当前nginx的版本(应该是nginx1.26.1)

 [root@nginx ~]# curl -I 192.168.160.120

 

nginx版本回滚

使用-HUP信号来激活 nginx1.24的进程

[root@nginx sbin]# kill -HUP 1960
[root@nginx sbin]# ps aux | grep nginx
root        1960  0.0  0.0   9888  2528 ?        Ss   17:34   0:00 nginx: master process nginx
root        2086  0.0  0.1   9916  6432 ?        S    17:34   0:00 nginx: master process nginx
nginx       2087  0.0  0.1  13748  5180 ?        S    17:34   0:00 nginx: worker process
nginx       2228  0.0  0.1  13720  4680 ?        S    17:36   0:00 nginx: worker process
root        2232  0.0  0.0   6408  2124 pts/0    S+   17:36   0:00 grep --color=auto nginx

 再回收掉nginx1.26的进程

[root@nginx sbin]# kill -WINCH 2086
[root@nginx sbin]# ps aux | grep nginx
root        1960  0.0  0.0   9888  2528 ?        Ss   17:34   0:00 nginx: master process nginx
root        2086  0.0  0.1   9916  6432 ?        S    17:34   0:00 nginx: master process nginx
nginx       2228  0.0  0.1  13720  5100 ?        S    17:36   0:00 nginx: worker process
root        2270  0.0  0.0   6408  2148 pts/0    S+   17:36   0:00 grep --color=auto nginx

 测试:通过访问来查看当前nginx的版本(应该是nginx1.24)

nginx服务的启动脚本编写

[root@nginx ~]# 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 ~]# systemctl daemon-reload
[root@nginx ~]# nginx -s stop
[root@nginx ~]# ps aux | grep nginx
root        1704  0.0  0.0   6408  2172 pts/0    S+   18:53   0:00 grep --color=auto nginx
[root@nginx ~]# systemctl enable --now nginx.service
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.                                                                       [root@nginx ~]# ps aux | grep nginx
root        1748  0.0  0.0   9924   980 ?        Ss   18:53   0:00 nginx: master process /usr/local/nginx/sbin/nginx                                                                                       
nginx       1749  0.0  0.1  13676  4672 ?        S    18:53   0:00 nginx: worker  process                                                                                      
root        1753  0.0  0.0   6408  2148 pts/0    S+   18:53   0:00 grep --color=auto nginx  

 

nginx全局配置参数优化调整

查看用户

[root@nginx conf]# vim /usr/local/nginx/conf/nginx.conf

[root@nginx conf]# nginx -s reload
[root@nginx conf]# ps aux | grep  nginx

 把两个工作进程各自绑定一个核心

[root@nginx conf]# vim /usr/local/nginx/conf/nginx.conf

[root@nginx conf]# nginx -s reload
nginx: [warn] the number of "worker_processes" is not equal to the number of "worker_cpu_affinity" masks, using last mask for remaining worker processes
[root@nginx conf]# ps aux | grep nginx 

 最大链接数

[root@nginx conf]# ulimit -a

 

 [root@nginx conf]# vim /etc/security/limits.conf

 

 [root@nginx conf]# ulimit -a

 

location用法

[root@nginx conf.d]# vim vhost.conf

server {
  listen 80;
  server_name www.ysh.org;
  root /data/web/html;
  index index.html;

  location = /test {
      root /data/web2;
  }

  location /test {
      root /data/web1;
  }

  location ^~ /t {
      root /data/web3;
  }

  location ~ .html$ {
      root /data/web4;
  }

  location ~* .HTML$ {
      root /data/web5;
  }
}

 

重启并创建html目录和文件:

[root@nginx conf.d]# nginx -s reload

[root@nginx conf.d]# mkdir -p /data/web{1..5}

[root@nginx conf.d]# mkdir -p /data/web{1..5}/test

[root@nginx conf.d]# echo web1 > /data/web1/test/index.html

[root@nginx conf.d]# echo web2 > /data/web2/test/index.html

[root@nginx conf.d]# echo web3 > /data/web3/test/index.html

[root@nginx conf.d]# echo web4 > /data/web4/test/index.html

[root@nginx conf.d]# echo web5 > /data/web5/test/index.html

通过测试可以得到:不同的location优先级

第一: 带 = 号的

第二:~ 里,不带号 和 带号 优先级一样。 谁在前,谁的优先级高。

第三:不带符号的优先级高。

第四:带^的

nginx添加php模块

重新编译nginx

删掉旧的nginx

[root@nginx ~]# rm -rf /usr/local/nginx/
[root@nginx ~]# cd nginx-1.26.1/
[root@nginx nginx-1.26.1]# make clean
rm -rf Makefile objs

上传需要的模块软件包  

[root@nginx ~]# ls
anaconda-ks.cfg                nginx-1.26.1
echo-nginx-module-0.63         nginx-1.26.1.tar.gz
echo-nginx-module-0.63.tar.gz  php-8.3.9.tar.gz
memc-nginx-module-0.20.tar.gz  srcache-nginx-module-0.33.tar.gz
nginx-1.24.0                   vmset.sh
nginx-1.24.0.tar.gz

编译并安装nginx  

[root@nginx nginx-1.26.1]# ./configure --prefix=/usr/local/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 \
> --user=nginx \
> --group=nginx \
> --with-http_v2_module \
> --with-http_realip_module \
> --with-http_stub_status_module \
> --with-http_gzip_static_module \
> --with-stream \
> --with-stream_ssl_module \
> --with-stream_realip_module \
> --with-pcre
[root@nginx nginx-1.26.1]# make && make install

结束nginx旧进程(如果没有旧进程就不做)  

[root@nginx nginx-1.26.1]# killall -9 nginx
[root@nginx nginx-1.26.1]# ps aux | grep nginx
root        6521  0.0  0.0   6408  2164 pts/1    S+   10:40   0:00 grep --color=auto nginx                   

启动nginx  

[root@nginx nginx-1.26.1]# systemctl start nginx
[root@nginx nginx-1.26.1]# nginx -V

源码编译php

上传php-8.3.9.tra软件包

[root@nginx ~]# ls

 解压包  

[root@nginx ~]# tar xzf php-8.3.9.tar.gz

编译php  

[root@nginx ~]# cd php-8.3.9/
[root@nginx php-8.3.9]# ./configure --prefix=/usr/local/php \
> --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 \
> --enable-sockets \
> --enable-soap \
> --disable-debug \
> --enable-xml \
> --enable-ftp \
> --enable-gd \
> --enable-exif \
> --enable-mbstring \
> --enable-bcmath \
> --with-fpm-system

会出现缺少环境依赖  

我们通过查找这个服务的软件包,安装来解决  

[root@nginx php-8.3.9]# dnf whatprovides */libxml-2.0*
[root@nginx php-8.3.9]# dnf install -y libxml2-devel-2.9.13-2.el9.x86_64

类似依赖问题都这样解决。

依赖问题总和:

[root@nginx php-8.3.9]# dnf install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel

 会发现没有oniguruma-devel 这个包,去网络上下载:(选择的阿里云镜像站)

https://mirrors.aliyun.com/rockylinux/9.4/devel/x86_64/kickstart/Packages/o/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm

我们使用wget下载后,再dnf安装oniguruma-devel包  

[root@nginx ~]# 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 ~]# dnf install -y oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm

再次编译:  

[root@nginx php-8.3.9]# ./configure --prefix=/usr/local/php \
> --enable-fpm \
> --with-config-file-path=/usr/local/php/etc \
> --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 \
> --enable-sockets \
> --enable-soap \
> --disable-debug \
> --enable-xml \
> --enable-ftp \
> --enable-gd \
> --enable-exif \
> --enable-mbstring \
> --enable-bcmath \
> --with-fpm-systemd

make 并 make install  

[root@nginx php-8.3.9]# make -j 10
[root@nginx php-8.3.9]# make install

复制配置文件  

[root@nginx php-8.3.9]# cp php.ini-production /usr/local/php/etc/php.ini 

修改时区 

[root@nginx php-8.3.9]# cd /usr/local/php/etc/
[root@nginx etc]# vim php.ini
修改
date.timezone = Asia/Shanghai

复制启动文件  

[root@nginx php-8.3.9]# cd /root/php-8.3.9/sapi/fpm
[root@nginx fpm]# cp php-fpm.service /lib/systemd/system/

修改php配置文件  

[root@nginx fpm]# vim /lib/systemd/system/php-fpm.service
注释掉: read-only

复制配置文件  

[root@nginx etc]# cd /usr/local/php/etc
[root@nginx etc]# cp php-fpm.conf.default php-fpm.conf
[root@nginx etc]# vim  php-fpm.conf
去掉注释:
pid = run/php-fpm.pid

[root@nginx etc]# cd php-fpm.d/
[root@nginx php-fpm.d]# cp www.conf.default www.conf 

启动php服务  

[root@nginx etc]# systemctl daemon-reload
[root@nginx php-fpm.d]# systemctl restart php-fpm
[root@nginx etc]# netstat -tnlup | grep php
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      278450/php-fpm: mas

修改套接字配置:  

[root@nginx etc]# vim php-fpm.d/www.conf
修改:
listen = 0.0.0.0:9000

[root@nginx etc]# systemctl restart php-fpm.service 

添加php环境变量

[root@nginx ~]# vim .bash_profile
添加:
/usr/local/php/bin:/usr/local/php/sbin
[root@nginx ~]# source ~/.bash_profile

创建一个目录存放页面并创建一个测试脚本:

[root@nginx ~]# mkdir -p /data/web/php
[root@nginx ~]# vim /data/web/php/index.php
里面添加:
<?php
  phpinfo();
?> 

给nginx创建一个子配置文件(记得在主配置文件里导入):

[root@nginx ~]# mkdir  /usr/local/nginx/conf.d/
[root@nginx ~]# vim /usr/local/nginx/conf.d/php.conf
添加:
server {
  listen 80;
  server_name www.ysh.org;
  root /data/web/html;
  index index.html;

  location ~ \.php$ {
        root /data/web/php;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi.conf;
  }
}

在主配置文件里导入子配置文件:  

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
添加:
    include "/usr/local/nginx/conf.d/*.conf";

 重启nginx

[root@nginx ~]# systemctl restart nginx

在浏览器进行测试

ysh.org

 

PHP的动态网页扩展模块(memcache)

[root@nginx ~]# tar zxf memcache-8.2.tgz

下载 autoconf服务和memcached服务  

[root@nginx ~]# dnf install -y autoconf
[root@nginx memcache-8.2]# dnf install -y memcached -y
[root@nginx memcache-8.2]# systemctl start memcached.service

使用phpizp编译并安装 

[root@nginx memcache-8.2]# phpize
[root@nginx memcache-8.2]# ./configure
[root@nginx memcache-8.2]# make
[root@nginx memcache-8.2]# make install

在php配置文件里添加memcache模块  

[root@nginx memcache-8.2]# vim /usr/local/php/lib/php.ini
[root@nginx memcache-8.2]# systemctl restart php-fpm.service 

测试:  

[root@nginx memcache-8.2]# php -m | grep mem
memcache

复制memcache文件:  

[root@nginx memcache-8.2]# cp example.php memcache.php /data/web/php/
[root@nginx memcache-8.2]# cd /data/web/php/
[root@nginx php]# vim memcache.php
修改如下:

重启服务:  

[root@nginx php]# systemctl restart php-fpm.service
[root@nginx php]# systemctl restart nginx

浏览器访问:  

ysh.org

ysh.org


PHP 高速缓存

修改nginx配置文件,将memcache移到前面

[root@nginx ~]# vim /usr/local/nginx/conf.d/php.conf
修改:
upstream memcache {
  server 127.0.0.1:11211;
  keepalive 512;
}
server {
  listen 80;
  server_name www.ysh.org;
  root /data/web/html;
  index index.html;

  location /memc {
      internal;
      memc_connect_timeout 100ms;
      memc_send_timeout 100ms;
      memc_read_timeout 100ms;
      set $memc_key $query_string;
      set $memc_exptime 300;
      memc_pass memcache;
  }

  location ~ \.php$ {
      root /data/web/php;
      set $key $uri$args;
      srcache_fetch GET /memc $key;
      srcache_store PUT /memc $key;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi.conf;
  }
}

[root@nginx ~]# systemctl restart nginx.service 

测试(错误率为0!):  

[root@nginx ~]# ab -n500 -c10 http://www.ysh.org/index.php 

nginx 二次开发版本

openresty

上传openresty-1.25.3.1.tar.gz包:

[root@nginx ~]# ls
anaconda-ks.cfg                nginx-1.26.1.tar.gz
echo-nginx-module-0.63         oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
echo-nginx-module-0.63.tar.gz  openresty-1.25.3.1.tar.gz
memcache-8.2上传openresty-1.25.3.1.tar.gz包:package.xml
memcache-8.2.tgz               php-8.3.9
memc-nginx-module-0.20         php-8.3.9.tar.gz
memc-nginx-module-0.20.tar.gz  srcache-nginx-module-0.33
nginx-1.24.0                   srcache-nginx-module-0.33.tar.gz
nginx-1.24.0.tar.gz            vmset.sh
nginx-1.26v 

 

解压并编译安装openresty:

[root@nginx ~]# dnf install -y perl
[root@nginx ~]# tar zxf openresty-1.25.3.1.tar.gz
[root@nginx ~]# cd openresty-1.25.3.1/
[root@nginx 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 openresty-1.25.3.1]# gmake && gmake install 

配置openresty的环境变量:  

[root@nginx bin]# vim ~/.bash_profile
添加:
/usr/local/openresty/bin
[root@nginx bin]# source ~/.bash_profile

 查看版本号并启动openresty

[root@nginx bin]# openresty -v
nginx version: openresty/1.25.3.1
[root@nginx bin]# openresty

测试在浏览器上访问:www.ysh.org

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值