详细Nginx和PHP-FPM的进程间通信使用

news2024/9/23 3:32:46

在这里插入图片描述

工作中考虑到PHP-FPM效率,发现PHP-FPM和NGINX的进程通信不止配置端口这一种方式:bowtie:

Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIX Domain Socket.

其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.

介绍Unix Domain Socket

Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信。socket 原本是为网络通讯设计的,但后来在 socket 的框架上发展出一种 IPC 机制,就是 UNIX domain socket。虽然网络 socket 也可用于同一台主机的进程间通讯(通过 loopback 地址 127.0.0.1),但是 UNIX domain socket 用于 IPC 更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC 机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。

UNIX domain socket 是全双工的,API 接口语义丰富,相比其它 IPC 机制有明显的优越性,目前已成为使用最广泛的 IPC 机制,比如 X Window 服务器和 GUI 程序之间就是通过 UNIX domain socket 通讯的。

Unix domain socket 是 POSIX 标准中的一个组件,所以不要被名字迷惑,linux 系统也是支持它的。

用哪种取决于你的PHP-FPM配置:

方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;

方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;

其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----

创建文件:touch php-fpm.sock
创建套接字文件:nc -Ul php-fpm.sock
r = 4
w = 2
x = 1
生成权限:chmod 660 /tmp/php-fpm.sock

注意: 需要配置权限

nginx.conf

  • user www www
  • worker_processes auto

php-fpm.conf

php-fpm.conf 走 sock形式,需要开启监听

  • listen.owner = www
  • listen.group = www
  • listen.mode = 0660

文件属性

d 开头是: 目录文件。
l 开头是: 符号链接(指向另一个文件,类似于瘟下的快捷方式)。
s 开头是: 套接字文件(sock)。
b 开头是: 块设备文件,二进制文件。
c 开头是: 字符设备文件。
p 开头是: 命名管道文件。

UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使用的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的.这种通信方式是发生在系统内核里而不会在网络里传播.

UNIX Domain Socket和长连接都能避免频繁创建TCP短连接而导致TIME_WAIT连接过多的问题.

对于进程间通讯的两个程序,UNIX Domain Socket的流程不会走到TCP那层,直接以文件形式,以stream socket通讯.

如果是TCP Socket,则需要走到IP层,对于非同一台服务器上,TCP Socket走的就更多了.

UNIX Domain Socket:

Nginx <=> socket <=> PHP-FPM

TCP Socket(本地回环):

Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM

TCP Socket(Nginx和PHP-FPM位于不同服务器):

Nginx <=> socket <=> TCP/IP <=> 物理层 <=> 路由器 <=> 物理层 <=> TCP/IP <=> socket <=> PHP-FPM

像mysql命令行客户端连接mysqld服务也类似有这两种方式:

# 使用Unix Socket连接(默认):
mysql -uroot -p --protocol=socket --socket=/tmp/mysql.sock

# 使用TCP连接:
mysql -uroot -p --protocol=tcp --host=127.0.0.1 --port=3306

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1409476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于YOLOv8的摔倒行为检测系统(Python源码+Pyqt6界面+数据集)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:通过实战基于YOLOv8的摔倒行为检测算法&#xff0c;从数据集制作到模型训练&#xff0c;最后设计成为检测UI界面 人体行为分析AI算法&#xff0c;是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算…

linux基础指令【中篇】

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 补充上篇的细节1.sta…

C#~Winform代码调整快捷键

右移 选中要移动的代码 -> Tab 结果&#xff1a; 左移 选中要移动的代码 -> ShiftTab 结果&#xff1a; 自动调整 选中需要调整的代码 -> CtrlKD 调整后&#xff1a;

论文解读--Wideband 120 GHz to 140 GHz MIMO Radar:System Design and Imaging Results

120~140GHz宽带MIMO雷达&#xff1a;系统设计和成像结果 摘要 本文提出了一种工作频率在120 GHz ~ 140 GHz之间的宽带FMCW MIMO雷达传感器。该传感器基于SiGe技术制造的雷达芯片组&#xff0c;并使用MIMO方法来提高角度分辨率。MIMO操作通过发射机的时域复用实现。该雷达能够通…

[蓝桥杯]真题讲解:冶炼金属(暴力+二分)

蓝桥杯真题视频讲解&#xff1a;冶炼金属&#xff08;暴力做法与二分做法&#xff09; 一、视频讲解二、暴力代码三、正解代码 一、视频讲解 视频讲解 二、暴力代码 //暴力代码 #include<bits/stdc.h> #define endl \n #define deb(x) cout << #x << &qu…

Python 中的多进程(01/2):简介

一、说明 本文简要而简明地介绍了 Python 编程语言中的多处理&#xff08;多进程&#xff09;。解释多处理的基本信息&#xff0c;如什么是多处理&#xff1f;为什么用多处理&#xff1f;在python中怎么办等。 二、什么是多处理&#xff1f; 多处理是指系统同时支持多个处理器的…

【Android】Android中的系统镜像由什么组成?

文章目录 总览Boot Loader 的加锁与解锁Boot 镜像内核RAM diskARM 中的设备树 (Device Tree) /System 和/Data 分区镜像参考 总览 各种Android设备都只能刷专门为相应型号的设备定制的镜像。 厂商会提供一套系统镜像把它作为“出厂默认”的 Android 系统刷在设备上。 一个完…

Obsidian - 使用小记(Typora切换过来)

文章目录 关于 Obsidian打开已有的 文件夹将图片改为 Typora 的保存文件夹 关于 Obsidian 官网 https://obsidian.md/github : https://github.com/obsidianmd 个人版免费 一直习惯用 Typora 编写markdown git 记录笔记&#xff0c;多次被安利 Obsidian 后&#xff0c;今天尝…

OFD格式文件预览解决方案

问题 项目中文件预览统一采用的是pc端转pdf后在移动端上面采用Pdfview这个组件进行查看&#xff0c;现后端暂不支持ofd转pdf采用ofd.umd.js查看ofd文件&#xff0c;用WebView直接访问后端给的预览地址会出现跨域问题。 解决办法 拿到pc端预览的ofd.umd.js文件编写预览ofd文件…

JSON-handle工具安装及使用

目录 介绍下载安装简单操作 介绍 JSON-Handle 是一款非常好用的用于操作json的浏览器插件&#xff0c;对于开发人员和测试人员来说是一款很好用的工具&#xff0c;如果你还没有用过&#xff0c;请赶紧下载安装吧&#xff0c;下面是安装过程和具体使用。 下载安装 点击下载JSON…

IaC基础设施即代码:使用Terraform 连接huaweicloud华为云 并创建后端OBS

目录 一、实验 1.环境 2.huaweicloud华为云创建用户 3.Windows使用Terraform 连接 huaweicloud 4.Windows给Terraform项目添加huaweicloud华为云OBS &#xff08;实现代码与资源分离&#xff09; 二、问题 1. Windows terraform 初始化失败 2.Terraform 初始化后端资源失…

Sulfo Cy2 Biotin,水溶性 Cy2 生物素,能够与各种氨基基团特异性结合

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Sulfo Cyanine2 Biotin&#xff0c;Sulfo Cy2 Biotin&#xff0c;水溶性 Cy2 生物素&#xff0c;Sulfo-Cy2-Biotin&#xff0c;水溶性-Cy2-生物素 一、基本信息 产品简介&#xff1a;Sulfo Cyanine2 Biotin, also k…

el-dialog的close事件会执行两次

如果close事件执行的方法有传参&#xff0c;那么定义一个变量传参&#xff0c;而不是写死 如果写死

66.Spring是如何整合MyBatis将Mapper接口注册为Bean的原理?

原理 首先MyBatis的Mapper接口核心是JDK动态代理 Spring会排除接口&#xff0c;无法注册到IOC容器中 MyBatis 实现了BeanDefinitionRegistryPostProcessor 可以动态注册BeanDefinition 需要自定义扫描器&#xff08;继承Spring内部扫描器ClassPathBeanDefinitionScanner ) 重…

成熟的内外网数据交换方案,如何实现跨网传输?

网络迅速发展&#xff0c;我们可以从网络上查找到各式各样的信息&#xff0c;但是同时网络安全问题也随之严重。近几年&#xff0c;各种有关网络安全的新闻不断被报道&#xff0c;数据泄露给很多企业带来了严重打击&#xff0c;不仅是经济损失&#xff0c;严重者还会对企业的声…

AI嵌入式K210项目(20)-MicroPython介绍

文章目录 前言一、MicroPython是什么&#xff1f;二、官方文档学习实验过程总结 前言 单片机嵌入式编程经历了汇编、 C 语言的发展历程&#xff0c;可以说是一次编程革命&#xff0c;其背后的原因是单片机的速度越来越快&#xff0c;集成度越来越高。而这一趋势并没停止&#…

Linux第35步_在“移植uboot”前安装“libncurses5-dev,bison和flex”工具

在“移植uboot”前&#xff0c;需要在Ubuntu中安装“libncurses5-dev&#xff0c;bison和flex”工具&#xff0c;否则在“编译uboot”时&#xff0c;会报错。 一、了解相关知识 1、libncurses5-dev库是一个在Linux/Unix下广泛应用的图形函数库。 2、bison是用C编写的语法解析…

excel甘特图怎么做?这种方法一目了然

excel甘特图怎么做&#xff1f;在现代项目管理中&#xff0c;甘特图作为一种可视化工具&#xff0c;被广泛应用于规划、执行和监控项目进度。在Excel中创建甘特图是一个强大的工具&#xff0c;可以用来规划和跟踪项目进度。下面就教教你如何使用Excel制作甘特图。 一、了解甘特…

泥土

当我们置身于大自然中&#xff0c;或许很少有人会特别留意到泥土&#xff0c;因为它显得如此平凡而不起眼。然而&#xff0c;泥土却是地球上最基础、最重要的元素之一&#xff0c;是生命的孕育之源。 泥土&#xff0c;那深埋在地底的黑褐色质地&#xff0c;看似普通无比&#…

C++——类型转换与特殊类设计

我们在C语言中经常会使用到强制类型转换&#xff0c;例如指针和整形之间的转换是最为常见的&#xff0c;但是 在C中&#xff0c;C设计师认为这种强制类型转换是不安全的&#xff0c;所以在C标准中加入了四种强制 类型转换风格&#xff0c;这就是我将要介绍的强制类型转换。 在某…