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 相关文章推荐
利用 window_onload 实现select默认选择
Oct 09 PHP
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
php实现ip白名单黑名单功能
Mar 12 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
php+html5基于websocket实现聊天室的方法
Jul 17 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
php微信开发之谷歌测距
Jun 14 PHP
php压缩文件夹最新版
Jul 18 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
消息持续发送的完整例子
2006/10/09 PHP
php 文件状态缓存带来的问题
2008/12/14 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
jQuery 名称冲突的解决方法
2011/04/08 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
node.js中的console用法总结
2014/12/15 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
2018/11/06 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
Python实现密码薄文件读写操作
2019/12/16 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
小车司机岗位职责
2013/11/25 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
初中生物教学反思
2014/01/10 职场文书
副总经理任命书
2014/06/05 职场文书
法制演讲稿
2014/09/10 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
西安兵马俑导游词
2015/02/02 职场文书
建立共青团委员会的请示
2019/04/02 职场文书