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
`