看到很多的资料写nginx+php都要用到php-fpm,请问nginx不能直接和php-cgi通信吗?如何配置呢?

时间:2022-06-01 20:02:00
我使用rpm方式安装了php5.3.2,安装后就已经有php和php-cgi,为什么配置nginx还要使用php-fpm等第三方包呢?不使用能否让nginx支持php?
不配置php-fpm,也不配置spawn-fcgi,能让nginx支持php吗,要怎样设置?

还有就是php-cgi支持在命令行执行的时候后会报错:

# php-cgi -b 127.0.0.1:9000
I/O warning : failed to load external entity "/etc/php-fpm.conf"

但在网上搜索很多资料都是说可以直接在命令行使用这条语句。

23 个解决方案

#1


php-fpm 是一个集成了 php-cgi的功能包, 其实装这个就相当于你装了php-cgi

装了php-fpm并配置就可以运行php


你平时用的apache也要php-cgi, 不过都是集成在模块中

#2


你的是什么系统 。 RedHat?


http://blog.s135.com/nginx_php_v6/

#3


我的意思是:php 5.3.2 rpm安装好后,就已经有一个php-cgi了,但这个php-cgi不能进行deamo运行
# php-cgi -b 127.0.0.1:9000
I/O warning : failed to load external entity "/etc/php-fpm.conf"
那么这个php包中的php-cgi程序有何作用?

另外通过查看资料,安装nginx的php支持,都需要另外安装php-fpm
安装了php-fpm后,php-cgi这个程序便能够进行deamo运行了,那么它与原来的php-cgi有什么区别?不是同一个程序吗?

我在rhel5.5+php5.3.2环境配置。

#4


补充一个新问题,我将网站根目录指定为“root /var/www/html;”,然后这样设置“fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;”,但浏览页面时提示“No input file specified.”。

#5


nginx本身不支持php

#6


我的意思是:php 5.3.2 rpm安装好后,就已经有一个php-cgi了,但这个php-cgi不能进行deamo运行
# php-cgi -b 127.0.0.1:9000
I/O warning : failed to load external entity "/etc/php-fpm.conf"
那么这个php包中的php-cgi程序有何作用?

另外通过查看资料,安装nginx的php支持,都需要另外安装php-fpm
安装了php-fpm后,php-cgi这个程序便能够进行deamo运行了,那么它与原来的php-cgi有什么区别?不是同一个程序吗?

我在rhel5.5+php5.3.2环境配置。

补充一个新问题,我将网站根目录指定为“root /var/www/html;”,然后这样设置“fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;”,但浏览页面时提示“No input file specified.”。

#7


init.d/php-cgi这个文件要改改  具体网上找找


先试试html文件。 在试试php  

nginx 这样就可以跑php:
location ~ \.php
        {
                root /var/www/html;
                fastcgi_index index.php;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
                include fastcgi_params;
        }


#8


php-cgi 是运行php,

php-fpm是守护php-cgi进程


nginx配置目录运行php
        location  ~ \.php$
        {
                root /var/www/html;
                fastcgi_index index.php;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

#9


配置弄好了,我意思是,nginx与php-cgi通信有3种方式吧?

1、nginx通过php-fpm与php-cgi联系;
2、nginx通过spawn-fcgi与php-cgi联系;
3、直接与php-cgi联系;(当然这个方法我还不理解,甚至不确定有没有这个实现)

他们之间有什么区别?

#10


引用 8 楼 ihefe 的回复:
php-cgi 是运行php,

php-fpm是守护php-cgi进程


nginx配置目录运行php
        location  ~ \.php$
        {
                root /var/www/html;
                fastcgi_index index.php;
                fastc……


看到很多的资料写nginx+php都要用到php-fpm,请问nginx不能直接和php-cgi通信吗?如何配置呢?

php-fpm,pawn-fcgi 都是守护php-cgi 进程管理器.

直接与php-cgi联系;这样当你杀死这个进程 php就不能运行 

#11


引用 10 楼 ihefe 的回复:
php-fpm,pawn-fcgi 都是守护php-cgi 进程管理器.

直接与php-cgi联系;这样当你杀死这个进程 php就不能运行


那就是说确实有直接通信这一方式?怎样配置呢?

另外这采用守护php-cgi进程管理器的方式,不是一样存在杀死守护进程管理器,php就不能运行的问题吗?

这三种方式,那种性能最好 ,那种可靠性最高?

#12


php-fpm没用过 ,我用spawn-fcgi 。

守护也就是当你杀死php-cgi这进程。spawn-fcgi管理器会平滑从新生成新的进程(实验过)

性能方面 , 很多人用php-fpm ,我图方便就用了spawn-fcgi.

直接使用php-cgi,问题挺多。比如进程无辜消失等。

#13


引用 12 楼 ihefe 的回复:
php-fpm没用过 ,我用spawn-fcgi 。

守护也就是当你杀死php-cgi这进程。spawn-fcgi管理器会平滑从新生成新的进程(实验过)

性能方面 , 很多人用php-fpm ,我图方便就用了spawn-fcgi.

直接使用php-cgi,问题挺多。比如进程无辜消失等。



安装了php-fpm和未安装任何php-cgi进程管理器进行对比,结果都是,只要我kill掉php-cgi进程,php页面便不能再打开。实在没体会到“守护也就是当你杀死php-cgi这进程。spawn-fcgi管理器会平滑从新生成新的进程”这样的情况发生。也就实在没理解为何有必要使用“php-cgi进程管理器(比如:php-fpm或spawn-fcgi)”,盼望有高人在这一点理解上予以指点。

#14


补充一下,我使用环境是rhel5+php5.3.2+nginx0.8.52,首先是安装网上大堆的资料说要安装php-fpm,所以我安装好php和nginx后,又安装了php-fpm。都是rpm方式安装的。然后配置好后,启动nginx和php-cgi,然后php页面可以跑起来了。接下来,我开始尝试不要php-fpm的方式,所以我删除了php-fpm包,这个时候发现执行不了php-cgi命令,提示php-fpm.conf文件错误。查看指明的位置中确是没有文件,所以我直接提取php-fpm包中的php-fpm.conf文件进行相应的配置,这时能执行php-cgi命令了。再次访问页面也没问题。

但是整个过程中,不论是否安装了php-fpm,只要kill掉php-cgi,php页面便不能够访问。我实在体会不到各位一直在说的“php-cgi进程管理器”安装与不安装的区别。

且测试过程也证明了,php5.3.2环境,所用的那个php-fpm包无任何作用。我不安装它只需要安装配置要求在目录下建立好php-fpm,就能确保php-cgi的运行,而缺少php-fpm.conf,便不能运行php-cgi。

#15


没有想到一个安装环境都这么复杂。哎!受教了。

#16


要开启至少2个以上的php-cgi进程 , php-fpm才有守护效果,有时间多试试

#17


比如你生成 10 个进程会多出1个进程共11个,进程号最靠前的应该就是主进程,也就是守护进程 。

#18


引用 17 楼 ihefe 的回复:
比如你生成 10 个进程会多出1个进程共11个,进程号最靠前的应该就是主进程,也就是守护进程 。



作用就在于:设定的10个进程如果有进程意外挂了,会导致性能下降,但守护进程会自动启动新的进程?

#19


看到很多的资料写nginx+php都要用到php-fpm,请问nginx不能直接和php-cgi通信吗?如何配置呢?

#20


还是没测试出来效果--当进程挂掉是守护进程自动启动进程。。。

#21


PHP5.3.3已经集成php-fpm了,不再是第三方的包了。php-fpm提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。你最好用编译式安装PHP,z在./configure的时候带--enable-fpm参数即可开启php-fpm。

#22


引用 21 楼 microwindlab 的回复:
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。php-fpm提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。你最好用编译式安装PHP,z在./configure的时候带--enable-fpm参数即可开启php-fpm。



意思是说rpm方式安装的php5.3.2所包括的php-cgi文件其实就是php-fpm要求的文件?所以,只需要配置好php-fpm.conf文件就能体会到守护进程带来的好处了?

但我就是没办法测试:kill掉php-cgi的情况下,守护进程自动启动php-cgi!!!

#23


引用 22 楼 seai 的回复:
引用 21 楼 microwindlab 的回复:

PHP5.3.3已经集成php-fpm了,不再是第三方的包了。php-fpm提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。你最好用编译式安装PHP,z在./configure的时候带--enable-fpm参数即可开启php-fpm。


……



终于确定了原因,kill了主进程,即管理进程。。。。。。

#1


php-fpm 是一个集成了 php-cgi的功能包, 其实装这个就相当于你装了php-cgi

装了php-fpm并配置就可以运行php


你平时用的apache也要php-cgi, 不过都是集成在模块中

#2


你的是什么系统 。 RedHat?


http://blog.s135.com/nginx_php_v6/

#3


我的意思是:php 5.3.2 rpm安装好后,就已经有一个php-cgi了,但这个php-cgi不能进行deamo运行
# php-cgi -b 127.0.0.1:9000
I/O warning : failed to load external entity "/etc/php-fpm.conf"
那么这个php包中的php-cgi程序有何作用?

另外通过查看资料,安装nginx的php支持,都需要另外安装php-fpm
安装了php-fpm后,php-cgi这个程序便能够进行deamo运行了,那么它与原来的php-cgi有什么区别?不是同一个程序吗?

我在rhel5.5+php5.3.2环境配置。

#4


补充一个新问题,我将网站根目录指定为“root /var/www/html;”,然后这样设置“fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;”,但浏览页面时提示“No input file specified.”。

#5


nginx本身不支持php

#6


我的意思是:php 5.3.2 rpm安装好后,就已经有一个php-cgi了,但这个php-cgi不能进行deamo运行
# php-cgi -b 127.0.0.1:9000
I/O warning : failed to load external entity "/etc/php-fpm.conf"
那么这个php包中的php-cgi程序有何作用?

另外通过查看资料,安装nginx的php支持,都需要另外安装php-fpm
安装了php-fpm后,php-cgi这个程序便能够进行deamo运行了,那么它与原来的php-cgi有什么区别?不是同一个程序吗?

我在rhel5.5+php5.3.2环境配置。

补充一个新问题,我将网站根目录指定为“root /var/www/html;”,然后这样设置“fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;”,但浏览页面时提示“No input file specified.”。

#7


init.d/php-cgi这个文件要改改  具体网上找找


先试试html文件。 在试试php  

nginx 这样就可以跑php:
location ~ \.php
        {
                root /var/www/html;
                fastcgi_index index.php;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
                include fastcgi_params;
        }


#8


php-cgi 是运行php,

php-fpm是守护php-cgi进程


nginx配置目录运行php
        location  ~ \.php$
        {
                root /var/www/html;
                fastcgi_index index.php;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

#9


配置弄好了,我意思是,nginx与php-cgi通信有3种方式吧?

1、nginx通过php-fpm与php-cgi联系;
2、nginx通过spawn-fcgi与php-cgi联系;
3、直接与php-cgi联系;(当然这个方法我还不理解,甚至不确定有没有这个实现)

他们之间有什么区别?

#10


引用 8 楼 ihefe 的回复:
php-cgi 是运行php,

php-fpm是守护php-cgi进程


nginx配置目录运行php
        location  ~ \.php$
        {
                root /var/www/html;
                fastcgi_index index.php;
                fastc……


看到很多的资料写nginx+php都要用到php-fpm,请问nginx不能直接和php-cgi通信吗?如何配置呢?

php-fpm,pawn-fcgi 都是守护php-cgi 进程管理器.

直接与php-cgi联系;这样当你杀死这个进程 php就不能运行 

#11


引用 10 楼 ihefe 的回复:
php-fpm,pawn-fcgi 都是守护php-cgi 进程管理器.

直接与php-cgi联系;这样当你杀死这个进程 php就不能运行


那就是说确实有直接通信这一方式?怎样配置呢?

另外这采用守护php-cgi进程管理器的方式,不是一样存在杀死守护进程管理器,php就不能运行的问题吗?

这三种方式,那种性能最好 ,那种可靠性最高?

#12


php-fpm没用过 ,我用spawn-fcgi 。

守护也就是当你杀死php-cgi这进程。spawn-fcgi管理器会平滑从新生成新的进程(实验过)

性能方面 , 很多人用php-fpm ,我图方便就用了spawn-fcgi.

直接使用php-cgi,问题挺多。比如进程无辜消失等。

#13


引用 12 楼 ihefe 的回复:
php-fpm没用过 ,我用spawn-fcgi 。

守护也就是当你杀死php-cgi这进程。spawn-fcgi管理器会平滑从新生成新的进程(实验过)

性能方面 , 很多人用php-fpm ,我图方便就用了spawn-fcgi.

直接使用php-cgi,问题挺多。比如进程无辜消失等。



安装了php-fpm和未安装任何php-cgi进程管理器进行对比,结果都是,只要我kill掉php-cgi进程,php页面便不能再打开。实在没体会到“守护也就是当你杀死php-cgi这进程。spawn-fcgi管理器会平滑从新生成新的进程”这样的情况发生。也就实在没理解为何有必要使用“php-cgi进程管理器(比如:php-fpm或spawn-fcgi)”,盼望有高人在这一点理解上予以指点。

#14


补充一下,我使用环境是rhel5+php5.3.2+nginx0.8.52,首先是安装网上大堆的资料说要安装php-fpm,所以我安装好php和nginx后,又安装了php-fpm。都是rpm方式安装的。然后配置好后,启动nginx和php-cgi,然后php页面可以跑起来了。接下来,我开始尝试不要php-fpm的方式,所以我删除了php-fpm包,这个时候发现执行不了php-cgi命令,提示php-fpm.conf文件错误。查看指明的位置中确是没有文件,所以我直接提取php-fpm包中的php-fpm.conf文件进行相应的配置,这时能执行php-cgi命令了。再次访问页面也没问题。

但是整个过程中,不论是否安装了php-fpm,只要kill掉php-cgi,php页面便不能够访问。我实在体会不到各位一直在说的“php-cgi进程管理器”安装与不安装的区别。

且测试过程也证明了,php5.3.2环境,所用的那个php-fpm包无任何作用。我不安装它只需要安装配置要求在目录下建立好php-fpm,就能确保php-cgi的运行,而缺少php-fpm.conf,便不能运行php-cgi。

#15


没有想到一个安装环境都这么复杂。哎!受教了。

#16


要开启至少2个以上的php-cgi进程 , php-fpm才有守护效果,有时间多试试

#17


比如你生成 10 个进程会多出1个进程共11个,进程号最靠前的应该就是主进程,也就是守护进程 。

#18


引用 17 楼 ihefe 的回复:
比如你生成 10 个进程会多出1个进程共11个,进程号最靠前的应该就是主进程,也就是守护进程 。



作用就在于:设定的10个进程如果有进程意外挂了,会导致性能下降,但守护进程会自动启动新的进程?

#19


看到很多的资料写nginx+php都要用到php-fpm,请问nginx不能直接和php-cgi通信吗?如何配置呢?

#20


还是没测试出来效果--当进程挂掉是守护进程自动启动进程。。。

#21


PHP5.3.3已经集成php-fpm了,不再是第三方的包了。php-fpm提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。你最好用编译式安装PHP,z在./configure的时候带--enable-fpm参数即可开启php-fpm。

#22


引用 21 楼 microwindlab 的回复:
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。php-fpm提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。你最好用编译式安装PHP,z在./configure的时候带--enable-fpm参数即可开启php-fpm。



意思是说rpm方式安装的php5.3.2所包括的php-cgi文件其实就是php-fpm要求的文件?所以,只需要配置好php-fpm.conf文件就能体会到守护进程带来的好处了?

但我就是没办法测试:kill掉php-cgi的情况下,守护进程自动启动php-cgi!!!

#23


引用 22 楼 seai 的回复:
引用 21 楼 microwindlab 的回复:

PHP5.3.3已经集成php-fpm了,不再是第三方的包了。php-fpm提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。你最好用编译式安装PHP,z在./configure的时候带--enable-fpm参数即可开启php-fpm。


……



终于确定了原因,kill了主进程,即管理进程。。。。。。