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二三问的更多相关文章

  1. 记录一次自己对nginx+fastcgi(fpm)+mysql压力测试结果

    nginx + fastcgi(fpm) 压力测试: CentOS release 5.9 16核12G内存 静态页面: 并发1000,压测200秒,测试结果: 系统最大负载5.47 成功响应: 25 ...

  2. 深入理解PHP之:Nginx 与 FPM 的工作机制

    网络上有很多关于如何配置 Nginx + FPM 的文章,但它们更多从操作的角度出发,告诉我们怎么做,但却没有告诉我们为什么要这么做,本文从 Nginx 与 FPM 的工作机制出发,探讨配置背后的原理 ...

  3. [Nginx] - PHP+FPM相关的配置

    CodeIgniter的配置: worker_processes ; events { worker_connections ; } http { include mime.types; defaul ...

  4. zabbix自定义key监控nginx和fpm(网站并发数)

    一. nginx编译参数 监控nginx,主要讲解监控并发数 --prefix=/usr/local/nginx --with-http_stub_status_module zabbix编译参数的查 ...

  5. nginx和fpm的进程数配置和502,504错误

    502 和 php-fpm.conf 1.php-cgi进程数不够用.php执行时间长,导致没有空闲进程处理新请求. 2.php-cgi进程死掉.php-fpm超时时间短,当前进程执行超时关闭连接. ...

  6. Nginx PHP fpm forbidden 原因

    可能是标红目录层级不一致 location / { root /var/www/html/public; index index.php; } location ~ \.php$ { root /va ...

  7. 【Nginx】面试官问我Nginx能不能配置WebSocket?我给他现场演示了一番!!

    写在前面 当今互联网领域,不管是APP还是H5,不管是微信端还是小程序,只要是一款像样点的产品,为了增加用户的交互感和用户粘度,多多少少都会涉及到聊天功能.而对于Web端与H5来说,实现聊天最简单的就 ...

  8. Nginx模块fastcgi_cache的几个注意点 转

    Nginx模块fastcgi_cache的几个注意点   去年年底,我对nginx的fastcgi_cache进行摸索使用.在我的测试过程中,发现一些wiki以及网络上没被提到的注意点,这里分享一下. ...

  9. Nginx和php是怎么通信的?

    先来看一下搭建好PHP运行环境的Nginx配置文件. 非常重要的就是 fastcgi_pass 指令了,这个指令用于指定 fpm 进程监听的地址,Nginx 会把所有的 php 请求翻译成 fastc ...

随机推荐

  1. React入门最好的学习实例-TodoList

    前言 React 的核心思想是:封装组件,各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件. 最近前端界闹的沸沸扬扬的技术当属react了,加上项目需要等等原因,自己也决定花些时间来好 ...

  2. npm 入门

    要使用 npm 需要安装 node.js,因为 node.js 中会附带 npm 查看 node 的安装路径 which node 查看 npm 的安装路径 which npm npm 分为两种安装模 ...

  3. iOS 证书Bug The identity used to sign the executable is no longer valid 解决方案

    现象:The identity used to sign the executable is no longer valid Please verify that your device’s cloc ...

  4. iOS之微信支付

    前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要 ...

  5. 开发至今,终于开始测试bug,可以省心点了

    今天遇到一个特别奇葩的问题 IOSSDK9.1 Xcode7.1.1 使用表控制器UITableViewController来刷新表时, 之前对表的frame进行的修改,都会被恢复,沾满整个屏幕. 目 ...

  6. 【转】十个JavaScript中易犯的小错误,你中了几枪?

    目录 常见错误一:对于this关键词的不正确引用 常见错误二:传统编程语言的生命周期误区 常见错误三:内存泄露 常见错误四:比较运算符 常见错误五:低效的DOM操作 常见错误6:在for循环中的不正确 ...

  7. yii2缓存的介绍和使用

    作者:白狼 出处:http://www.manks.top/yii2_cache.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律 ...

  8. Linux系统中 安装Vmware Toolst工具

    前提: 安装虚拟机.可以参考:在Windows上安装虚拟机详细图文教程 安装Linux.可以参考:在VMware Workstation里的Linux操作系统的安装——红旗桌面7.0 本文作者:sou ...

  9. openstack-swift云存储部署(一)

    最近因为工作的需要搭建了一套swift云存储架构 我们先来解读一下里面的技术知识点:swift服务是属于openstack中的一种组件服务,openstack中的组件服务还有keystone.Nova ...

  10. C++STL - 模板的其他特性

    之前已经总结过函数模板和类模板了,对于模板还有一些其他的特性,这篇主要介绍这些特性.主要都是一些特殊情况. 模板的其他特性 1.缺省参数 (1)类模板的模板参数可以带有缺省值,实例化该模板时,如果提供 ...