• 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块,表明本次传输数据结束。

  • 相关阅读:
    java+opencv实现图像灰度化
    java实现高斯平滑
    hdu 3415 单调队列
    POJ 3368 Frequent values 线段树区间合并
    UVA 11795 Mega Man's Mission 状态DP
    UVA 11552 Fewest Flops DP
    UVA 10534 Wavio Sequence DP LIS
    UVA 1424 uvalive 4256 Salesmen 简单DP
    UVA 1099 uvalive 4794 Sharing Chocolate 状态DP
    UVA 1169uvalive 3983 Robotruck 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/6675214.html
Copyright © 2020-2023  润新知