首页 > 系统相关 >nginx与php-fpm通信协议 和 优化

nginx与php-fpm通信协议 和 优化

时间:2022-08-21 23:12:45浏览次数:72  
标签:socket fpm 通信协议 worker nginx 进程 php

CGI:通信网关协议

  • CGI协议:动态语言的代码文件需要对应的语言解释器才能被服务器识别,CGI协议就是用来使得解释器与服务器之间互相通信

image

请求链路:
1、客户端输入ur
2、解析到服务器IP
3、请求发送到Web服务器(nginx)
4、Nginx收到请求,通过fast-cgi协议,将请求数据发送到php-fpm进程管理器
5、php-fpm进程管理器将任务发给子进程:fork的子worke进程
6、work进程中的php解释器执行php文件来处理请求
7、php解释器处理好之后再通过fast-cgi协议将处理结果发给Nginx服务器
8、Nginx将结果返回到客户端

  • cgi:

    • 每次来一个请求,都需要fork一个子进程,请求结束后,再kill掉子进程
  • fast-cgi:

    • fast-cgi,请求结束后,不会kill掉子进程,而是还可以继续处理后续的请求
  • php-fmp:

    • Fast-cgi进程管理器,包含2种进程
    • master进程:主进程,负责监听端口,接收请求
    • worker进程:内部有php解释器,负责执行php代码
  • 更新php.ini后,无法平滑重启,需要更新php-fpm,worker进程才可生效

  • cgi和fast-cgi的区别:

    • cgi:每次新的请求,fork一个子进程,结束后kill掉
      • 每次新fork子进程,都要重新读取php.ini,初始化环境
    • fast-fgi:先启动一部分worker进程,处理请求后不会立即kill,而是可以等待继续处理后续的请求
      • worker进程不会kill掉,就无需重新读取php.ini和初始化环境
      • 当worker进程不够时,可先fork一些worker,如果空闲worker较多时,可kill掉一些节省资源

Nginx与php-fpm通信:Nginx和php-fpm之间,2种通信方式

  • TCP socket:通过 IP:port的方式进行通信

    • 这种方式,可以将nginx和php-fpm分布在不同的服务器上
  • Unix socket:通过 php启动生成的socket文件进行通信

    • 这种通过方式,nginx和php-fpm就只能部署在一台机器上
  • 优缺点:

    • tcp socket:需要重新打包、拆包、计算校验、应答等
      • 缺点:需要有多余的tcp开销
      • 优点:高并发下,保证通信的正确性和完整性
    • unix socket:
      • 优点:效率比tcp高,只是将数据进行进程间的拷贝,减少不必要的tcp开销
      • 缺点:高并发时不稳定,产生大量长时缓存,数据可能出错不返回异常
  • 使用场景:

    • TCP socket
      • 高并发场景,使用 tcp socket,nginx默认使用tcp方式
      • 保证通信完整
    • Unix socket:
      • 减少tcp开销,提高性能
      • 优化:

php-fpm优化:

  • 改为Unix socket通信方式
    • 非高并发请求,注重性能:
  • Unix socket通信方式:
    • 将socket文件放在内存中(/dev/shm目录下)

Nginx优化:

  • 修改nginx的worker数,指定nginx运行时的worker数量
    • 当worker_processes数等于2*CPU核心数时,性能最优
  • 设置nginx中的backlog数
    • listen 80 default backlog=1024;
  • 增加php-fpm的worker数
    • 增加并发能力
    • 一个常驻worker大概耗内存30M,不可以开太大
  • 配置php-fpm关闭执行时间限制
    • 减少由于超时导致的终止
  • 定时重启php-fpm
    • crontab定时重启
  • 配置php-fpm查看返回错误
    • 将运行中的错误输出到日志文件中

标签:socket,fpm,通信协议,worker,nginx,进程,php
From: https://www.cnblogs.com/alisleepy/p/16611351.html

相关文章

  • Linux虚拟机Nginx代理vue前端与SpringBoot后端资源
    1.Nginx安装配置详细参见菜鸟教程:https://www.runoob.com/linux/nginx-install-setup.html2.nginx.conf内容usernginx;worker_processes1;#设置值和CPU核心数......
  • nginx ngx_http_degradation_module 模块
    ngx_http_degradation_module是一个不错的nginx模块,但是官方文档没有写,主要的场景是在低内存的情形下允许Nginx服务器返回444错误或204错误参考使用 http......
  • ⑧.zabbix监控nginx服务
    1.定义监控项已经把监控项做成模板了,可以直接下载http://file.yangyijing.cn/zabbix/nginx/check_ngx.sh2.加载zabbix-agent的配置文件cat/etc/zabbix/zabbix_agentd......
  • Nginx配置示例-高可用集群
    视频教程:https://www.bilibili.com/video/BV1zJ411w7SV?p=14&vd_source=6a2d25a2f3270cb2d485b16863363e87博客借鉴:https://blog.csdn.net/qq_36059561/article/details......
  • nginx原理
    一、master和worker  [root@localhostsbin]#psaux|grepnginxroot      1355 0.0 0.0 20572  652?       Ss  12:22  0:00nginx:......
  • Nginx代理:通过同个域名同个端口分别在PC端和手机端访问不同的适配页面
    一、nginx配置1、传递请求头最终目的是要使用UserAgent头来识别用户的客户端,然后返回不同的内容给不同的UA用户。而CDN(内容分发网络)缓存并不会区分UA(UserAgent),只......
  • 【Nginx】Linux上Nginx安装详细教程(保姆级教程)
    一、准备工作:安装nginx需要一些环境的支持1、安装GCC(必选)yuminstallgcc-c++解释:GCC用来对nginx源码进行编译2、安装PCREpcre-devel(必选)yuminstall-ypcre......
  • nginx配置实例—负载均衡
    一、实现效果浏览器地址栏输入地址http://192.168.17.129/edu/a.html,负载均衡效果,平均8080和8081端口中 二、准备工作(1)准备两台tomcat服务器,一台8080,一台80......
  • 解决用公网无法连接阿里云服务器Nginx
    首先保证nginx安装无误的情况下  ./nginx-t可以通过这个命令来检测 出现这个就说明安装成功了 如果安装过程中出现一些问题 自行百度修改配置文件即可  ......
  • MAC环境nginx搭建静态资源服务器
    MAC环境nginx搭建静态资源服务器安装nginxmac环境nginx比较简单,使用命令安装即可brewinstallnginx查看nginx信息brewinfonginx启动命令:launchctl命令启动注意......