news 2026/3/10 3:42:51

nginx实战-PHP——day2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nginx实战-PHP——day2

nginx实战-PHP

课程目标

  1. 项目的开发流程

  2. 理解静态资源与动态资源

  3. fastcgi与php-fpm模块

  4. LNMP项目部署

  5. CA与https

  6. nginx平滑升级

课程实验

  1. 项目的开发流程概述

  2. 静态资源与动态资源实验

  3. fastcgi与php-fpm模块实验

  4. PHP项目的部署

  5. 私有证书与公有证书的制作

  6. nginx平滑升级实验

课堂引入

  1. 一个完整的项目的生命周期是有很多个流程的,运维只是其中一个重要的流程

授课进程

一、项目开发流程
1、项目生命周期

需求收集

这是软件的起源,也是软件开发生命周期的重要一步。在这个阶段,开发团队与业务利益相关者密切合作,了解用户需求,定义项目的范围,并确定要解决的问题。需求收集阶段的目标是确保所有相关方对项目的期望和需求都得到理解和满足

设计

在设计阶段,开发团队将分析收集到的需求,并创建软件的设计方案。这个方案将包括软件的架构、接口设计、数据设计以及安全和性能考虑。设计阶段的输出是一个详细的设计文档,它为编码阶段提供了清晰的指南

编码

编码阶段是将设计转化为实际的代码。在这个阶段,开发团队负责根据设计文档编写代码,并确保代码的质量和可维护性。编码过程中需要遵循编码规范、最佳实践和团队约定的代码风格

测试

在测试阶段,团队将验证软件的各项功能是否按预期工作。测试类型可能包括单元测试、集成测试、系统测试以及验收测试。通过测试,团队可以发现并修复潜在的问题和错误,从而提高软件的质量和稳定性

部署运维

部署阶段是将软件发布到生产环境的过程。在此阶段,团队将确保软件在目标环境中正常运行,并解决任何可能出现的问题。部署完成后,团队将进行最终的验证和用户培训,以确保用户能够顺利地使用软件维护阶段是软件生命周期中最长的一个阶段。在这个阶段,团队将对已发布的软件进行维护,包括错误修复、功能增强以及定期的更新和升级。此外,团队还将持续监控软件的性能,以确保其持续可用和安全
二、资源
1、概述

一个应用程序要想在Internet上被外界访问,则需将其部署在Web服务器上

也就是说Web资源存放在Web服务器上。这也可以说明: web服务器有着充当web资源容器的功能。这也是为何能将web服务器称为web容器的原因。如Tomcat容器

总结:在web容器上的都可以称之为资源。

外界访问该应用程序的目的,就是要获取该应用中包含相应的web资源。这些web资源可以分为两类:静态web资源 和 动态web资源

2、静态与动态

静态web资源:

  • 优 点:访问速度快

  • 缺 点:交互性差,要想页面内容发生改变则必须手动修改页面文件,很不方便。

  • 如:HTML、CSS、JavaScript、图片

动态web资源:

  • 优 点:动态资源可以根据需求获取不同的内容;而页面内容数据的更新,却无需修改页面文件

  • 缺 点:访问速度不及静态页面

  • 如:JSP/Servlet….

3、常见的资源文件
资源文件语言识别框架识别
index.phpPHPWindows/Linux+nginx+php+mysql
index.pypythonWindows/Linux+apache+python+mysql
index.jspJAVAwindows/Linux+nginx+tomcat+mysql
index.aspc#Windows+iis+asp.net+sql-server/oracle/mogodb
三、LNMP项目部署
1、Linux部署
#!/bin/bash ​ # 1. 设置主机名 hostnamectl set-hostname lnmp ​ # 2. 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config ​ # 3. 配置yum源 cd /etc/yum.repos.d mv CentOS-Base.repo CentOS-Base.repo.backup curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache ​ yum install epel-release -y ​ # 4. 重启 reboot
2、nginx部署
vim /etc/yum.repos.d/nginx.repo ​ [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true ​ [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true ​ yum install yum-utils -y yum install nginx -y systemctl enable nginx --now
3、PHP部署
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装php7的yum源,默认是5的版本 yum-config-manager --enable remi-php73 # 配置升级 yum install -y php php-mysqlnd gd php-gd vim /usr/share/nginx/html/index.php ​ <?php phpinfo(); ?> ​ vim /etc/nginx/conf.d/default.conf ​ server { location / { ... index index.php index.html; ... } } ​ systemctl restart nginx 访问地址:http://IP

这种情况通常是因为nginx没有将PHP文件交给PHP解释器处理,而是直接返回了文件内容,导致浏览器将其当作下载文件。

安装并启用php-fpm

yum install php-fpm.x86_64 -y systemctl enable php-fpm --now

修改nginx配置文件

vim /etc/nginx/conf.d/default.conf location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } systemctl restart nginx

4、MySQL部署
yum -y install mariadb-server mariadb systemctl enable mariadb --now mysql -uroot -p SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456'); # 设置初始化密码 flush privileges; # 刷新权限 create database wordpress default charset utf8; # sql 创建数据库 exit; # 退出数据库
5、业务上线
1. 上传源码包 2. 解压缩源码并进入源码目录 3. 复制文件到nginx的页面目录

四、fastcgi与php-fpm模块
1、cgi概述

CGI : Common Gateway Interface,公共网关接口。在物理层面上是一段程序,运行在服务器上,提供同客户端HTML页面的接口

Nginx+CGI处理步骤

用户发送HTTP请求到Web服务器 Web服务器fork一个CGI子进程,将用户请求交给CGI程序 CGI程序把处理结果传送给Web服务器,CGI子进程被销毁 Web服务器把结果返回到用户

什么是fork?

fork()系统调用用于创建新进程,新创建的进程为子进程,调用fork()并创建新进程的进程是父进程。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,这俩个进程默认完成同样的功能,但如果初始参数和传入的变量不同,俩个进程也可以完成不同的功能

调用fork发生了什么?

子进程创建后,系统会给子进程分配资源,然后把原来的进程的所有值都复制到新的子进程中,只有少数值与原来的进程的值不同;其实就是父进程的一份副本。但是子进程和父进程驻留在不同的内存空间上。这些内存空间具有相同的内容,并且一个进程执行的任何操作都不会影响其他进程

CGI缺点

  • CGI每处理一个请求,就要fork一个子进程,处理完请求,再销毁子进程。频繁的创建和销毁进程,就会大大降低Web服务器的效率

2、fastcgi

FastCGI是一个可伸缩的、高速的在HTTP服务器和动态脚本语言间通信的接口,主要优点是把动态语言和HTTP服务器分离开来

主要是将CGI进程保持在内存中进行管理调度,以获得较高的性能

fastCGI的工作原理

Web服务器启动时载入fastCGI进程管理器 fastCGI进程管理器自身初始化,启动多个CGI子进程并等待来自Web服务器的连接 当客户端请求到达Web服务器时,fastCGI进程管理器选择并连接到一个CGI进程来处理请求 fastCGI子进程完成处理后将结果返回给Web服务器

问题:Nginx下fastCGI与服务器是分离的,就是Nginx无法直接调用fastCGI,需要用spawn-fcgi来管理

3、php-fpm

FPM(FastCGI 进程管理器)是 PHP FastCGI 的主要实现,实现了许多对高负载网站有用的功能。FPM 管理多个 PHP 进程,并通过 FastCGI 协议与 Web 服务器通信,提供更好的性能和资源管理。一般 nginx 服务器使用FPM。

PHP-FPM使用了多进程模型来处理PHP请求。当Web服务器接收到一个PHP请求时,它将该请求转发给PHP-FPM进程管理器。PHP-FPM会根据配置文件中的参数来创建、管理和回收PHP解释器进程(也称为worker进程),并将请求分配给这些worker进程来处理。这种多进程模型使得PHP-FPM能够处理大量并发请求,并提高PHP应用程序的性能和稳定性

FPM的工作流程

1. Web服务器接收到一个包含PHP请求的HTTP请求。 2. Web服务器将该请求转发给PHP-FPM进程管理器。 3. PHP-FPM进程管理器接收到请求后,从空闲进程池中选择一个worker进程来处理该请求。如果没有空闲进程,则根据配置文件中的参数决定是否要创建新的worker进程。 4. 选定的worker进程接收到请求后,会解析PHP代码并执行相应的操作。它可以连接数据库、进行文件读写、生成HTML等。 5. worker进程将处理结果返回给PHP-FPM进程管理器。 6. PHP-FPM进程管理器将处理结果返回给Web服务器。 7. Web服务器将最终结果返回给客户端。

https://blog.csdn.net/jkzyx123/article/details/131870649

五、CA与https
1、概述

CA:即Certificate Authority,证书颁发机构的简称。

CA认证:是一种数字证书,由权威的第三方机构颁发,用于证明网站或组织的身份和合法性。它可以帮助用户确认所访问的网站是否真实可信,防止用户遭受假冒网站的欺诈

https:HTTPS(Hypertext Transfer Protocol Secure)是HTTP(Hypertext Transfer Protocol)的扩展版。它利用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对数据进行加密,确保数据在客户端和服务器之间传输的过程中不被窃取或篡改。 HTTPS的主要目的是确保数据在客户端(如浏览器)和服务器之间传输时的机密性、完整性和真实性。这种保护机制极大地提高了数据传输的安全性,防止了信息被窃取和篡改。HTTPS常用于需要保护敏感信息的场景,如网上银行、电子商务网站、电子邮件服务和社交媒体平台等。

2、私有证书

基于https的协议工作的一中虚拟主机,要构建这样的网站需要mod_ssl模块的支持。且需要提供两个文件:证书文件和私钥文件,证书文件是标识这个网站服务器身份的,私钥文件主要用来实现在服务器端对数据进行加密,然后在网站中传输的。

1. 准备存放证书和秘钥的目录 2. 生成私钥 3. 使用秘钥文件生成证书申请书 4. 同意申请,生成证书 5. 编辑nginx配置文件,设置https访问 6. 访问验证
# 准备存放证书和秘钥的目录 mkdir /etc/nginx/ssl # 生成私钥(使用openssl生成基于rsa数学算法长度为2048bit的秘钥,文件必须以key为结尾) openssl genrsa 2048 > /etc/nginx/ssl/server.key # 使用秘钥文件生成证书申请书 openssl req -new -key /etc/nginx/ssl/server.key > /etc/nginx/ssl/server.csr # 同意申请,生成证书 openssl req -x509 -days 365 -key /etc/nginx/ssl/server.key -in /etc/nginx/ssl/server.csr > /etc/nginx/ssl/server.crt # 编辑nginx配置文件,设置https访问 vim /etc/nginx/conf.d/default.conf server { listen 443 ssl; server_name www.haha.com; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; } systemctl restart nginx # 访问验证 https://www.haha.com/

3、公有证书

前提:公有证书需要有公网的服务器,公网的IP,域名,机构签发的证书,才能够演示

1. 购买阿里云主机 2. 安装nginx 3. 查看防火墙是否开放相应的端口 4. 购买域名 5. 域名解析 6. 申请CA证书 7. 上传证书 8. 修改nginx配置,添加证书 9. 测试访问
六、nginx平滑升级
1、概述

随着 Nginx 越来越流行,并且 Nginx 的优势也越来越明显,Nginx 的版本迭代也开起了加速模式。新版本也带来了新的功能,例如 stream 四层代理功能等,伴随着 Nginx 的广泛应用,版本升级必然越来越快。一般有两种情况下需要升级 Nginx:一种是确实要升级 Nginx 的版本,另一种是要为 Nginx 添加新的模块

2、原理
  • 在不停掉老进程的情况下,启动新进程

  • 老进程负责处理仍然没有处理完的请求,但不再接受处理请求

  • 新进程接受新请求

  • 老进程处理完所有请求,关闭所有连接后,停止

3、实战

此处就不行平滑升级的演示了,平滑升级需要使用源码的方式进行安装(晚上的作业)

课堂小结

  1. 项目的开发流程概述

  2. 静态资源与动态资源实验

  3. fastcgi与php-fpm模块实验

  4. PHP项目的部署

  5. 私有证书与公有证书的制作

  6. nginx平滑升级实验

课后作业

  1. 完成课堂的案例及练习

  2. 将今天的内容整理为思维导图的形式

  3. 完成以下需求

实现nginx的平滑升级

扩展内容

面试题

1、 fastcgi和cgi的区别

2、nginx的平滑升级是如何实现的?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/9 19:38:53

AI 自动生成报表

1. AI 生成图表 向上汇报经常需要制作图表&#xff0c;如果没有顺手的工具&#xff0c;可能需要花费大量的时间消耗在报表的制作上。随着AI的迅猛发展&#xff0c;我们通过一个简单的对话来低成本实现报表的生成。 2. 使用到的工具 MCP 平台&#xff1a;https://www.modelscope…

作者头像 李华
网站建设 2026/3/9 19:38:51

Unity学习笔记(十二)碰撞中的刚体和碰撞器

碰撞产生的必要条件 两个物体都有碰撞器&#xff0c;至少有一个物体有刚体刚体1.它就是模拟力的作用2.Mass质量 默认为KG 质量越大 阻性越大3.Drag空气阻力 根据力移动对象时影响对象的空气阻力大小。影响移动&#xff0c;0表示没有空气阻力4.Use Gravity 是否受重力影响5.Angu…

作者头像 李华
网站建设 2026/3/9 19:38:41

微服务架构下的全方位测试策略

微服务架构的测试挑战与机遇随着企业数字化转型加速&#xff0c;微服务架构因其灵活性、可扩展性和技术异构性成为主流。据预测&#xff0c;到2025年&#xff0c;超70%的新建系统将采用此架构。然而&#xff0c;分布式系统带来的服务依赖复杂、部署频繁、故障隔离困难等挑战&am…

作者头像 李华
网站建设 2026/3/9 7:33:59

Qwen2.5-VL 3B模型震撼发布:轻量级视觉大模型如何重构行业应用范式?

近期&#xff0c;Qwen2.5-VL系列多模态大模型&#xff08;包含3B、7B、72B三个参数版本&#xff09;正式揭开神秘面纱。作为该系列的轻量化代表&#xff0c;3B版本在保持部署门槛优势的同时&#xff0c;实现了视觉理解能力的跨越式升级。该模型突破性地支持通过生成精确边界框或…

作者头像 李华
网站建设 2026/3/10 3:37:32

企业级知识库问答系统实战:从架构到部署的完整指南,大模型入门

文章详解了大模型智能问答系统的构建全流程&#xff0c;涵盖架构设计、检索增强生成、性能优化、部署维护等关键技术&#xff0c;提供完整代码实现和解决方案&#xff0c;并分享AI学习路线与面试资源&#xff0c;助力开发者全面掌握大模型应用开发。 本文较长&#xff0c;请双击…

作者头像 李华
网站建设 2026/3/4 23:40:12

PHP 8.6 JIT性能突破:3种典型应用架构下的真实加速比分析

第一章&#xff1a;PHP 8.6 的 JIT 编译性能基准测试PHP 8.6 即将发布&#xff0c;其核心优化之一是进一步增强的 JIT&#xff08;Just-In-Time&#xff09;编译器。本章通过标准基准测试工具对 JIT 在典型工作负载下的性能表现进行量化分析&#xff0c;涵盖数值计算、字符串处…

作者头像 李华