首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您知道哪些Apache/PHP配置以及它们有多好?

您知道哪些Apache/PHP配置以及它们有多好?
EN

Server Fault用户
提问于 2010-04-22 07:21:44
回答 4查看 2.8K关注 0票数 8

我想问您有关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配置,但是配置起来有点困难。但是,也许,我漏掉了什么?

欢迎评论!

EN

回答 4

Server Fault用户

发布于 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,主要是因为它允许非常多功能和稳定的设置。

票数 3
EN

Server Fault用户

发布于 2010-04-22 09:20:51

没有真正回答您的问题,但我不明白FastCGI很难配置。它应该替换的其他方法是不同的(mod_php,mod_python,.)因此,可能需要重写部分代码。这可能是很难的部分,但至少对于配置Apache,我发现这是一件轻而易举的事情。例如,我在python中测试一个WSGI应用程序,我想看看它在WSGI支持的所有协议中是如何执行的。下面是具有所有协议配置的虚拟主机文件(使用mod_fastcgi):

代码语言:javascript
复制
<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,然后如下所示:

代码语言:javascript
复制
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选项指定它,即

代码语言:javascript
复制
FastCgiServer /var/www/test/fcgi.py -idle-timeout 60 -processes 1 -inital-env PHPRC=/blah/
票数 2
EN

Server Fault用户

发布于 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,并找出其中的一些缺点。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/134770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档