很少有不同的php“包装器”(?)。它们之间有什么区别?试图谷歌一些,但似乎无法找到信息。(mod-php 不能用谷歌搜索)。
为什么我可以选择一个而不是另一个?
最近有人建议我在 PHP 中使用 FastCGI。现在我去了 FastCGI 页面并阅读了它,但我真的不明白它的优点是什么。
我最近一直在研究 Apache 和 Nginx 之间的差异,并且对我应该选择哪个感到困惑。
我做了一些搜索,但两者之间没有明确的比较,我想知道这里是否有人可以就两者之间的差异发表意见。
我目前的知识让我明白 mod_php 比 fastcgi 更快、更安全,但是 Apache 在同时连接和内存消耗方面要差得多。
我的网站使用了大量的长轮询,但有一个非 AJAX 网络基础(即 Apache 的顶部有长轮询)。
我对 Apache 内存问题的原始解决方案是通过 node.js 发送长轮询,然后让 node.js 每 2 秒访问一次 Apache,在这种情况下,Apache 不会有一个开放的连接,而是 node.js 会。我已经意识到这可能还不够好,正在寻找不同的解决方案。我仍然对我最初的想法是否可行很感兴趣。
那么哪个更适合现代网络?Apache 还是 Nginx?
更新:给出的所有建议都是好的和有效的。我已经采用了最初的第二个想法,即使用完整的 Nginx 服务器。我很满意作为专用服务器,我不会受到 fastcgi 的安全问题的困扰,并且由于我的长轮询脚本需要用 PHP 编写,我需要一个可以处理高负载同时连接的服务器,而 Apache 无论如何都无法做到这一点我改变了结构,它仍然会占用大量内存。
我已经标记了 Martin F 的答案,因为他对我的问题给出了如此清晰和完整的答案,我觉得他应该得到这个分数,但是,所有三个答案都很好且有效,并且肯定会考虑为我拥有的另一个网站使用反向代理因为我刚刚发现了 Nginx 可以在代理中做的非常非常酷的事情。
谢谢,
当 apache fork 一个 mod-php 进程时,它会存活多久?该进程是在发送响应后立即死亡,还是会一直保持活动状态直到浏览器收到完整响应?
我想在我的 SL6.4(RHEL 6.4 重建)Web 服务器上划分不同的 PHP 应用程序,以便它们无法访问彼此的数据。SELinux 似乎可以做到这一点,但我不确定细节。我的问题有两个部分:
httpd_unified,并提供独立的httpd_ttrss_*和httpd_opencloud_*环境,平行于套httpd_user_foo和httpd_sys_foo。考虑到我可以使用的应用程序数量,我什至可以在没有新上下文的情况下使用 sys/user 区别。但是我还没有找到很多关于关闭的含义的文档httpd_unified,或者如何设置不同的 HTTP 上下文。特别是对于通过mod_php.我很擅长创建新的 SELinux 策略模块,但需要一些文档来指出我需要什么来使新策略执行以及如何使其与 SELinux 目标策略很好地集成。
如果尝试仅使用 SELinux 进行这种分离是一个失败的原因,并且我需要在不同的上下文中启动单独的 httpds,甚至可能是 LXC 容器,那么这也是一个有用的答案。
我知道有四种不同的 PHP 处理程序(AFAIK)。
我需要知道这些处理程序的优缺点以及每个处理程序适合哪些环境?
例如,如果我正在运行共享托管服务器,上述哪个处理程序适合我?或者,如果我正在管理私人服务器?
使用 php-fpm 在 Apache mod_php 与 nginx 上有很多旧的基准测试
但是,在 2.4 版中,Apache 可以使用 php-fpm。是否有任何合理的基准比较 mod_php 和 php-fpm(均在 Apache 2.4.x 上)?
当 PHP 在 Apache 中执行时,我们的一台旧式服务器没有进一步更新或重新配置,突然停止将主机名解析为 IP。但是,从 CLI 执行时它仍然可以正常工作。
从 RSS 缓存上次修改时间,我推断它在 3 月 28 日左右停止工作。
为了重现这个问题,我创建了一个脚本fsockopen(),上面写着“连接失败(错误号 2)”。我进一步将问题归结为与失败的名称解析有关:
<?php $addr = gethostbyname("twitter.com"); echo "ADDR($addr)"; ?>
Run Code Online (Sandbox Code Playgroud)
当我通过 Apache 运行它时,输出是ADDR(twitter.com),这是错误的。
当我从 CLI 运行它时,输出ADDR(aaa.bbb.ccc.ddd)具有不同的 IP 地址,正如预期的那样。
服务器设置上的任何内容都没有改变。CLI 和 Apache 模块共享相同的php.ini. PHP 是带有 Zend Optimizer v2.5.10 的 v4.4.9 版本。Apache 是 v1.3.31。
我知道这些版本是旧的。但是由于没有任何改变,像“先尝试升级版本”这样的解决方案是行不通的,因为服务器的功能集/版本控制被冻结并且很快就会被替换。我们仍然需要一个解决方案。
如果我运行dig脚本,它可以在两种环境(mod_php 和 CLI)中工作,但这不仅仅是一个丑陋的黑客,因为它会涉及整个脚本库中的许多编辑和测试,这也是不受欢迎的,因为服务器上的 PHP 应用程序是也被冻结,并且只接收安全更新。它将被完全重写(在新服务器上)所取代。
但是由于重写需要一些时间并连续替换遗留应用程序的部分,我们需要修复解析器问题。我已经用谷歌搜索了一下,虽然问题是已知的,但许多人没有找到解决办法。提高内存限制的修复不起作用。重新启动没有用。mod_php 中的解析器确实没有明显原因停止工作。:-(
更新:我同时通过完全停止 apache 来解决它,等待片刻,然后再次启动它。但这并不能解释这种行为的根本原因(因此没有令人满意的解决方案)。所以我把它打开。
mod-php ×8
apache-2.2 ×5
php ×5
fastcgi ×3
php-fpm ×3
suphp ×2
apache-2.4 ×1
benchmark ×1
nginx ×1
performance ×1
php-cgi ×1
php5 ×1
rhel6 ×1
selinux ×1