php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式


Posted in PHP onSeptember 28, 2018

先给大家介绍下php 与 nginx 的两种处理方式,具体内容如下所示:

1.IP:Port 监听方式

php-fpm
docker pull PHP:2.4-alpine
nginx.conf
fastcgi_pass 127.0.0.1:9000;

php-fpm 在容器里的 nginx.conf

location /php
    {     
      proxy_set_header Host $host:$server_port;
      proxy_pass http://138.38.38.111:80/;
    }

2.UDS 方式监听

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

3.注意

php-fpm用ip:port方式建立链接,

nginx不要用unix socket方式建立链接,用ip:port方式建立连接就行

下面看下nginx与php-fpm通信的两种方式

在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现。

unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要再nginx配置文件中填写php-fpm的pid文件位置,效率要比tcp socket高。

tcp socket的优点是可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式。

windows系统只能使用tcp socket的通信方式

配置方法

tcp socket

tcp socket通信方式,需要在nginx配置文件中填写php-fpm运行的ip地址和端口号。

location ~ \.php$ {
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
}

unix socket

unix socket通信方式,需要在nginx配置文件中填写php-fpm运行的pid文件地址。

location ~ \.php$ {
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
}

php-fpm的运行端口号和socket文件的地址都是在php-fpm.conf中配置的。 

php-fpm.conf文件在php安装文件的/etc目录下,

比如你的php安装在/opt/php目录,则应该是/opt/php/php-fpm.conf。

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;  'ip.add.re.ss:port'  - to listen on a TCP socket to a specific IPv4 address on
;              a specific port;
;  '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;              a specific port;
;  'port'         - to listen on a TCP socket to all IPv4 addresses on a
;              specific port;
;  '[::]:port'      - to listen on a TCP socket to all addresses
;              (IPv6 and IPv4-mapped) on a specific port;
;  '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock

通过注释可以看到,php-fpm的listen指令可以通过五种方式处理FastCGI请求,分别是:

1. ipv4:端口号 
2. ipv6:端口号 
3. port相当于 0.0.0.0:port,本机所有ipv4对应的端口号 
4. [::]:port,包括ipv4和ipv6 
5. unix socket文件

直接配置使用unix socket文件之后,会遇到access deny的问题,由于socket文件本质上还是一个文件,存在权限控制问题,默认由root用户创建,因此nginx进程无权限访问,应该配置如下命令:

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;         mode is set to 0660
listen.owner = www
listen.group = www 
listen.mode = 0660

可以配置nginx和php-fpm都是用www用户,这样就不会存在权限问题,当然也可以创建不同的用户,然后加入同一个组,便于分配权限。

总结

以上所述是小编给大家介绍的php 与 nginx 的两种处理方式及nginx与php-fpm通信的两种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
php获取目标函数执行时间示例
Mar 04 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
php截取字符串函数分享
Feb 02 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
总结对比php中的多种序列化
Aug 28 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
PHP从尾到头打印链表实例讲解
Sep 27 #PHP
实现php删除链表中重复的结点
Sep 27 #PHP
浅析php如何实现爬取数据原理
Sep 27 #PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 #PHP
php实现有序数组旋转后寻找最小值方法
Sep 27 #PHP
PHP实现SMTP邮件的发送实例
Sep 27 #PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
Sep 26 #PHP
You might like
配置支持SSI
2006/11/25 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
php curl发送请求实例方法
2019/08/01 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
jQuery实现弹幕特效
2019/11/29 jQuery
解决vue项目router切换太慢问题
2020/07/19 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
Python 如何提高元组的可读性
2019/08/26 Python
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
班组长安全生产职责
2013/12/16 职场文书
现场活动策划方案
2014/08/22 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
法定授权委托证明书
2014/09/27 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python