nginx与php(fastcgi)

    xiaoxiao2021-03-26  24

    fastcgi是与语言无关的,可伸缩架构的cgi开放扩展,主要是将cgi解释器保持在内存中从而获取较好的性能

    cgi的反复加载是cgi功能低的主要原因,若cgi解释器保持在内存中并接受fastcgi进程管理调度器,则可以

    保持良好的性能,伸缩性,fail-over性能等

    fastcgi的工作原理:

    1)fastcgi程序自身初始化,并启动多个cgi解释器进程(多个php-cgi进程)等待webserver的连接,这里以

    php-fpm进程管理器来启动多个php-cgi fastcgi进程,启动php-cgi fastcgi进程时,可以配置以tcp和

    unix套接字两种方式启动

    2)请求到达web服务器(nginx)时,web server将请求采用tcp或者unix套接字的方式转发到fastcgi主进程,

    fastcgi主进程选择并连接到一个cgi解释器(主进程),web server将cgi环境变量和标准输入发送到fastcgi

    的子进程php-cgi

    3)fastcgi子进程完成处理后将标准输出和错误信息从同一连接返回到web server,当fastcgi子进程关闭连

    接时,请求就处理完成,fastcgi子进程继续等待并处理来自fastcgi进程管理器的下一个连接,而在普通的cgi

    模式里,php-cgi到这里就退出了

    所以,普通的cgi都是每次请求要重新解析一次php.ini 重新载入全部扩展 重新初始化全部数据结构,效率会很低

    使用fastcgi只需要在进程启动时,加载一次,还有一个额外的好处,持续的数据库连接可以工作

    fastcgi的优点:

    1)php脚本运行更快,php解释器被载入内存而无需每次从存储器加载

    2)需要使用的系统资源更少,因为不需要反复加载cgi

    3)无需改动现有代码,运行在apache+php上的程序无需更改就可以使用php的fastcgi

    在不停止nginx服务的情况下平滑变更nginx配置

    1)修改nginx的配置后使用 /usr/local/etc/nginx/nginx.conf -t来测试配置文件是不是有语法错误

    2)使用 ps -ef|grep "nginx: master process" | grep -v "grep" | awk -F ' ' {print $2}

      来得到nginx的主进程号

    kill -hup nginx主进程号 平滑重启nginx

    3)或者直接使用 kill -HUP `cat /usr/local/var/run/nginx.pid`

      更近一步,不太清楚pid文件在哪儿时,可以使用 kill -HUP `locate nginx.pid | xargs cat`

    编写每天定时切割nginx日志的脚本在之前的文章有写过,就不再重复,给出链接^^

    http://blog.csdn.net/njys1/article/details/54883993

    

    `

    转载请注明原文地址: https://ju.6miu.com/read-663159.html

    最新回复(0)