nginx、php-fpm二三问
php-cgi为什么没了? php-fpm子进程是干啥的?
php-cgi是原来php自带的fastcgi进程管理器,有一些缺点,比如不能平滑重启,进程管理差。
php-fpm可以看做升级版的php-fpm.
php-fpm子进程就是工作进程,负责接收和处理请求, 和nginx类似。
fastcgi_pass 127.0.0.1:9000是干啥的 这种方式是http协议还是fastcgi协议?
是php-fpm的监听地址,可以是本机,也可以是其他机器.比如192.168.0.21:9000,php-fpm.conf中也需要为php-fpm进程池配置相同参数.
fastcgi协议。
这种通过tcp方式发送数据。
如果nginx和php部署在同台机器,也可用socket形式进行进程间通讯.
nginx如果和php socket通讯,是不是也要占用端口?
是,也是通过tcp协议,目标地址和端口已知,nginx作为客户端.php-fpm接受请求时需分配端口.如果部署在同台机器,可通过socket文件进行进程间通讯。极大提高性能。
fastcgi_pass和proxy_pass区别
fastcgi_pass是把进程按照fastcgi要求的格式发送到php-fpm监听的地址。
proxy_pass只是把请求转发到其他web服务器.
fastcgi_pass和proxy_pass都可以交给upstream 模块处理。
php-fpm master进程并不接收和分发请求,而是worker进程直接accpet请求后poll处理.
我看一篇文章这么说,那几百个worker进程,怎么知道谁去处理当前这个请求呢,这个逻辑谁做的 ?
抢占式的吗 ?还是master来做空闲子进程的判断,指定某个进程处理?
抢占式,自己抢自己的。公园里喂鱼是的。
php-fpm和mod apache比较?php-fpm优势,为什么选择php-fpm
性能表现差距不大。
内存小的时候,php-fpm更快,php-fpm使用更少的内存,apache对php模块管理较差。
以CGI方式运行时,web server将用户请求以消息的方式转交给PHP独立进程,PHP与web服务之间无从属关系.
纯粹调用--返回结果的形式通讯.而模块方式,则是将PHP做为web-server的子进程控制,两者之间有从属关系.最明显的例子就是在CGI模式下,如果修改了PHP.INI的配置文件,不用重启web服务便可生效,而模块模式下则需要重启web服务.
php-fpm可独立部署,当然解耦的同时也会带来tcp网络通讯的开销.
php为什么需要nginx,自己接受请求处理不就行了吗?
php当然可以自己接受请求处理,比如用socket可以自己实现一个web服务器,并且本身php5.4也内置一个web服务器。
使用nginx,个人理解,首先是一个解耦的操作,web服务器代码和业务代码解耦。并且nginx使用epoll,能快速处理请求。
其次,安全考虑,nginx能过滤很多非法请求,php本身是一门语言,请求处理并不强大,当然go语言等这方面做的不错。
--enable-force-cgi-redirect 选项作用?
一般安装php用 --enable-force-cgi-redirect 选项,PHP 在此模式下只会解析已经通过了 web 服务器的重定向规则的 URL。
若使用 CGI VERSION 模式来执行 PHP ,打开本选项会增加安全性。此编译选项可以防止任何人通过如 http://my.host/cgi-bin/php/secretdir/script.php 这样的 URL 直接调用 PHP。PHP 在此模式下只会解析已经通过了 web 服务器的重定向规则的 URL。
个人理解这种适合单一入口的程序。都进入index.php统一处理。如果程序非单一入口,则不可以启用该选项。
cgi和http的区别?
CGI脚本简单地讲是个运行在Web服务器上的程序, 有浏览器的输入触发. 这个脚本通常象服务器和系统中其他程序如数据库的桥梁。
CGI脚本是用下列两种方法使用的: 作为一个表单的ACTION 或 作为一个页中的直接link。现在cgi大部分用来处理表单。
为了能编写和运行CGI脚本, 你需要一个Web服务器.
即使你有一个Web服务器, 这个服务器必须特别地为运行CGI脚本配置一下. 那意味着你所有的脚本必须放置在一个叫做cgi-bin的目录下.
cgi比较古老,新的动态网页解析语言有php等。
http是一种协议,浏览器发送的也是http接口,个人理解浏览器发送过去的数据经过nginx,nginx处理成符合fastcgi协议标准,传递到php-fpm,经php解释器处理后,一部分是填充一些超全局变量,一部分解析为满足http协议的具体数据(比如form表单数据),然后进行处理。
总之关系不大,一个是处理动态网页程序,一个是一种程序间通讯协议。
http和rpc的区别?为什么要使用rpc框架(hessian等)?
http是一种应用层协议,php使用时,需要自己拼装http协议的头部和内容,如果需要响应头,curl设置
curl_setopt($curl, CURLOPT_HEADER, true); 自己解析。
RPC是一个软件结构概念,是构建分布式应用的理论基础.也可以基于http实现,或者基于socket等其他方式实现,个人理解,他的好处就是客户端调用像本地调用一样,方便,简洁,当系统之间交互很多,优点就体现出来了.
如果rpc基于tcp实现,传输中更是少了http头部传输,理论上一个请求能更快的完成。
http长连接和短连接的区别?
HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。
Keep-Alive: timeout=20,表示这个TCP通道可以保持20秒。另外还可能有max=XXX,表示这个长连接最多接收XXX次请求就断开。
用长连接之后,客户端、服务端怎么知道本次传输结束呢?两部分:1是判断传输数据是否达到了Content-Length指示的大小;2动态生成的文件没有Content-Length,它是分块传输(chunked),这时候就要根据chunked编码来判断,chunked编码的数据在最后有一个空chunked块,表明本次传输数据结束。
nginx、php-fpm二三问的更多相关文章
- 记录一次自己对nginx+fastcgi(fpm)+mysql压力测试结果
nginx + fastcgi(fpm) 压力测试: CentOS release 5.9 16核12G内存 静态页面: 并发1000,压测200秒,测试结果: 系统最大负载5.47 成功响应: 25 ...
- 深入理解PHP之:Nginx 与 FPM 的工作机制
网络上有很多关于如何配置 Nginx + FPM 的文章,但它们更多从操作的角度出发,告诉我们怎么做,但却没有告诉我们为什么要这么做,本文从 Nginx 与 FPM 的工作机制出发,探讨配置背后的原理 ...
- [Nginx] - PHP+FPM相关的配置
CodeIgniter的配置: worker_processes ; events { worker_connections ; } http { include mime.types; defaul ...
- zabbix自定义key监控nginx和fpm(网站并发数)
一. nginx编译参数 监控nginx,主要讲解监控并发数 --prefix=/usr/local/nginx --with-http_stub_status_module zabbix编译参数的查 ...
- nginx和fpm的进程数配置和502,504错误
502 和 php-fpm.conf 1.php-cgi进程数不够用.php执行时间长,导致没有空闲进程处理新请求. 2.php-cgi进程死掉.php-fpm超时时间短,当前进程执行超时关闭连接. ...
- Nginx PHP fpm forbidden 原因
可能是标红目录层级不一致 location / { root /var/www/html/public; index index.php; } location ~ \.php$ { root /va ...
- 【Nginx】面试官问我Nginx能不能配置WebSocket?我给他现场演示了一番!!
写在前面 当今互联网领域,不管是APP还是H5,不管是微信端还是小程序,只要是一款像样点的产品,为了增加用户的交互感和用户粘度,多多少少都会涉及到聊天功能.而对于Web端与H5来说,实现聊天最简单的就 ...
- Nginx模块fastcgi_cache的几个注意点 转
Nginx模块fastcgi_cache的几个注意点 去年年底,我对nginx的fastcgi_cache进行摸索使用.在我的测试过程中,发现一些wiki以及网络上没被提到的注意点,这里分享一下. ...
- Nginx和php是怎么通信的?
先来看一下搭建好PHP运行环境的Nginx配置文件. 非常重要的就是 fastcgi_pass 指令了,这个指令用于指定 fpm 进程监听的地址,Nginx 会把所有的 php 请求翻译成 fastc ...
随机推荐
- 在sharepoint2013中如使用PowerView
在sharepoint2013中如使用PowerView 安装前提 Sql sqlserver 2012 sp1 Sharepoint2013 Sql server 2012 sp1 PowerPiv ...
- SharePoint 2013 配置Excel Services
前言:本文主要介绍如何启用SharePoint 2013版本Excel Services服务,并配置Excel Web Access部件,使Excel文档可以显示在Web页面中. 简单说一下流程,Sh ...
- LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案
方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor= worker.tomcat.cachesize= worker.tomca ...
- C#结合Jquery LigerUI Tree插件构造树
Jquery LigerUI Tree是Jquery LigerUI()的插件之一,使用它可以快速的构建树形菜单.呵呵 废话不说了,直入正题,下面介绍C#结合ligerui 构造树形菜单的两种方法 1 ...
- SSRS 2008 ReportServerTempDB增长异常分析
这两天收到一SQL 2008 R2数据库服务器的磁盘空间告警,在检查过程中发现ReportServerTempDB已经暴增到60多GB,其中数据文件接近60G,日志文件9G大小左右.如下截图所示 我们 ...
- SQL Server修改数据库对象所有者(Owner)浅析
在SQL Server数据库中如何修改数据库对象(表.视图.存储过程..)的所有者(Owner)呢?一般我们可以使用系统提供的系统存储过程sp_changeobjectowner来修改. 我们先看看s ...
- Tomcat:利用Apache配置反向代理、负载均衡
本篇主要介绍apache配置反向代理,介绍了两种情况:第一种是,只使用apache配置反向代理:第二种是,apache与应用服务器(tomcat)结合,配置反向代理,同时了配置了负载均衡. 准备工作 ...
- 关于一个sql的优化分析
应用这边新上线了一个查询,正在跑,让我看下状态以及分析下能不能再快点. 如下sql: SELECT x.order_no , order_date+7/24 AS order_date, addres ...
- PHP的错误机制总结
PHP的错误机制也是非常复杂的,做了几年php,也没有仔细总结过,现在就补上这一课. 特别说明:文章的PHP版本使用5.5.32 PHP的错误级别 首先需要了解php有哪些错误.截至到php5.5,一 ...
- MongoDB学习笔记~官方驱动的原生Curd操作
回到目录 MongoDB的官方C#驱动,让我们使用起来也很方便,但对于Linq开发人员来说,可能有些不了解,所以,我还是将官方驱动进行了二次封装,而对于一个比较个性化的mongo操作,使用我封装的也很 ...