我想问您有关PHP/Apache配置方法的问题,您知道它们的优缺点。我会自己开始:
-作为Apache模块的PHP
优点:速度快,因为你不需要每次都启动exe,特别是在mpm-工人模式下。您也可以在这种模式下使用各种PHP加速器,如APC或eAccelerator。
缺点:如果您在mpm模式下运行apache,您可能会面临稳定性问题,因为任何php脚本中的每一个故障都会导致apache进程的整个线程池不稳定。同样,在这种模式下,所有脚本都代表apache用户执行。这对保安不利。mpm-worker配置需要以线程安全模式编译的PHP .至少CentOS和RedHat默认存储库没有线程安全的OSes版本,因此在这些OSes上,您至少需要自己编译(有一种方法可以在Apache上激活worker mpm )。使用线程安全的PHP二进制文件被认为是实验性的和不稳定的.此外,许多PHP扩展不支持线程安全模式,也没有在线程安全模式下进行良好测试.
PHP作为CGI?
这似乎是最慢的默认配置,似乎是一个“骗局”本身;)
-通过mod_suphp
优点: suphp允许您代表脚本文件所有者执行php。这样,您就可以在同一台机器上安全地分离不同的站点。此外,suphp允许每个虚拟主机使用不同的php.ini文件。
缺点: CGI模式下的PHP意味着更低的性能。在这种模式下,您不能使用像APC这样的php加速器,因为每次生成新进程来处理脚本,就会使以前进程的缓存毫无用处。顺便问一下,你知道如何在这个配置中应用一些加速器吗?我听说了一些关于为php字节码缓存使用shm的消息。此外,您也不能在这种模式下通过.htaccess文件配置PHP。您需要为此安装PECL扫描器,如果您需要通过.htaccess (php_value / php_flag指令)设置不同的脚本选项。
这个配置看起来与suphp一样,但我听说,它更慢,更不安全。几乎同样的利与弊都适用。
-- FastCGI
优点: FastCGI标准允许单个php进程在php进程终止之前处理多个脚本。这样您就可以获得性能,因为不需要为每个脚本创建新的php进程。您还可以在此配置中使用PHP加速器(有关注释,请参阅cons部分)。此外,FCGI几乎和suphp一样,也允许代表某些用户执行php进程。国防部_fcgid似乎对apache具有最完整的fcgi支持和灵活性。
缺点:在快速can模式下使用php加速器将导致较高的内存消耗,因为每个PHP进程都将有自己的字节码缓存(除非有一些加速器可以将共享内存用于字节码缓存。是这样吗?)FastCGI的配置也有点复杂。您需要创建各种配置文件并进行一些配置修改。
看起来,difficult是最稳定、安全、快速和灵活的PHP配置,但是配置起来有点困难。但是,也许,我漏掉了什么?
欢迎评论!
发布于 2010-07-22 15:49:52
通过FastCGI运行PHP肯定会给您最大的灵活性。您不仅可以安全地使用mpm工人Apache,还可以完全使用另一个you服务器(例如nginx)。
但是即使在使用Apache时,"PHP“目前也不是一种选择,而是至少两种: mod_fastcgi,mod_fcgid。在此基础上,您可以使用动态、静态或外部FastCGI进程;可以使用suexec,也可以不使用suexec。还有PHP的内部FastCGI过程管理器,它现在被PHP5.3中非常好的undefined所取代。所有这些选择都有不同的利弊,可能导致不同的问题。
如果有选择的话,我现在会选择PHP的mod_fastcgi,主要是因为它允许非常多功能和稳定的设置。
发布于 2010-04-22 09:20:51
没有真正回答您的问题,但我不明白FastCGI很难配置。它应该替换的其他方法是不同的(mod_php,mod_python,.)因此,可能需要重写部分代码。这可能是很难的部分,但至少对于配置Apache,我发现这是一件轻而易举的事情。例如,我在python中测试一个WSGI应用程序,我想看看它在WSGI支持的所有协议中是如何执行的。下面是具有所有协议配置的虚拟主机文件(使用mod_fastcgi):
<VirtualHost *:8888>
DocumentRoot "/home/test/"
#FastCGIExternalServer /home/test/wsgi -host 127.0.0.1:3333
#SCGIMount / 127.0.0.1:3333
FastCgiServer /home/test/wsgi/fcgi.py -idle-timeout 60 -processes 1
<Directory "/home/test/wsgi/">
Options +ExecCGI +FollowSymLinks
AddHandler fastcgi-script .py
#AddHandler wsgi-script .py
#AddHandler cgi-script .py
</Directory>
</VirtualHost>这在我看来并不复杂。当然,FastCGI支持许多选项,而且可以调整到死,但这是另一回事。
要以不同的用户身份运行,请使用suexec和FastCGIWrapper,然后如下所示:
FastCGIWrapper On
<VirtualHost *:8888>
SuexecUserGroup test test
DocumentRoot "/home/test/"
FastCgiServer /var/www/test/fcgi.py -idle-timeout 60 -processes 1
<Directory "/var/www/test/">
Options +ExecCGI +FollowSymLinks
AddHandler fastcgi-script .py
</Directory>
</VirtualHost>并查看此链接以获得自定义php.ini,但是您应该能够使用-initial-env选项指定它,即
FastCgiServer /var/www/test/fcgi.py -idle-timeout 60 -processes 1 -inital-env PHPRC=/blah/发布于 2010-04-22 07:35:30
一个很好的候选人是:Apache 2 ITK MPM
apache2-mpm-itk (简称mpm-itk )是一个用于Apache web服务器的MPM (多处理模块)。mpm-itk允许您在单独的uid和gid下运行每个vhost --简而言之,一个vhost的脚本和配置文件不再需要所有其他vhost的可读性。
为我们的一个客户工作非常好,与数百名VirtualHosts和相当多的访客。
通过将PHP作为一个模块运行,您可以得到所有的Pros,并找出其中的一些缺点。
https://serverfault.com/questions/134770
复制相似问题