【问题标题】:What do you recommend for setting up a shared server with php [closed]您对使用 php 设置共享服务器有什么建议 [关闭]
【发布时间】:2010-09-15 14:47:54
【问题描述】:

从安全/性能的角度来看,您对使用 php 设置共享服务器有什么建议?

  • Apache mod_php(你如何保护它?除了 safe_mode,因为它不会在 PHP6 中)
  • Apache CGI + suexec
  • Lighttpd 并为每个用户生成一个 FastCGI

LE:我对使用已经制作好的控制面板不感兴趣,因为我正在尝试编写自己的控制面板,所以我想知道自己设置它的最佳方法是什么。 我正在考虑使用 Lighttpd 并为每个托管用户生成一个 fastcgi,使 fcgi 进程在他的凭据下运行(在 lighttpd wiki 上有一个教程)。 这会有点安全,但这会影响性能(每个 fcgi 需要大量用户/内存)以至于它不是一个可行的解决方案吗?

【问题讨论】:

    标签: php apache lighttpd shared-hosting


    【解决方案1】:

    就个人而言,虽然 Lighttpd 还可以,但如果您最终使用轻量级 Web 服务器 + FastCGI 解决方案,我会选择 Nginx + FastCGI。我已经运行了基准测试并阅读了所有代码,Nginx 在负载下速度更快/更稳定一个数量级——非常好。

    但是,这不是你问的。从本质上讲,我会说在您列出的三个选项中存在一系列安全/可扩展性与速度权衡,您只需要决定您想要的位置。如果您是共享托管服务提供商,不信任的用户安装了天知道的 PHP 应用程序,您将更倾向于安全性,如果在更受信任的用户之间共享,您可能更倾向于性能。以下是我的想法:

    CGI + suexec:就共享托管环境中的用户/站点数量而言,这是迄今为止最安全、最高效/可扩展的。进程只在请求进来时才被派生,而内存则被使用。当然,CGI 派生使得这对于单个脚本的执行时间来说是最慢的。慢多少?好吧,您必须进行基准测试,但通常如果人们正在运行长时间运行的应用程序(例如,像 WordPress 这样的应用程序,加载其库并在每个请求上初始化需要 0.25-0.5 秒),那么 CGI 生成惩罚开始看起来很漂亮在上下文中可以忽略不计。

    FastCGI: 这里的问题(不管您的网络服务器是 Apache、Lighttpd 还是 Nginx)是弄清楚您让每个用户运行多少个 FCGI 子进程,因为每个进程消耗的内存等于 PHP 解释器的大小(在 Linux 中,当然不是所有的都是连线的,但我离题了)。而且,与 mod_php 不同,这些进程不会在用户之间共享,因此您必须限制每个用户。例如,Dreamhost 为他们的客户将这个上限限制为 3 - 现在,对于一个运行网站的客户每秒获得超过 2-5 次页面浏览量,这实际上非常糟糕,因为这些请求只会堆积起来,网站就会挂起。现在,当我在专用服务器/集群上运行应用程序时,我喜欢带有轻量级网络服务器的 FastCGI,当我可以为应用程序提供数百个 FCGI 子级时(当然,所有这些都具有网络服务器权限,就像 Apache /prefork + mod_php)。但是,我认为共享主机没有意义,您必须为每个用户分配/限制 FCGI 子代。

    Apache + mod_php: 最不安全,因为一切都使用 webserver privs 运行,但是您的实时 PHP 进程池是共享的,因此它在性能方面是最好的。从开发人员的角度来看,我不能容忍 php_safe 模式,从系统管理员的角度来看,这实际上只是一种安全错觉(它可以减轻愚蠢的用户,但不能防止实际攻击)所以我实际上宁愿使用 CGI 如果我的其他选项必须包含 safe_mode。

    Dreamhost 确实是一种混合,默认情况下他们使用 Apache CGI + suexec,但如果他们愿意,允许他们的更多(小)部分老练的用户选择使用 FCGI,但受制于上限和他们自己的监控内存使用情况。与默认为所有人启用 FCGI 相比,这节省了大量内存资源。

    如果您谈论的是标准商业共享主机,另一个问题是,Apache 功能齐全,具有几乎任何东西的模块(包括您可能想要的 mod_security 之类的东西),并且您的用户会喜欢它,因为他们所有的 .htaccess配置会起作用等等——当他们去安装 Drupal 或 WordPress 或其他任何东西时,你会遇到支持头痛(如果我们谈论的是内部用户,那么问题就少得多了)。

    我个人建议保持简单的开始并使用 CGI + suexec 以获得最佳的安全性和可扩展性。如果您的用户想要 FCGI 或 mod_php,并且您有一个很好的渠道可以与他们进行建议/交流,他们会提出要求,但是对于您来说,这两者中的任何一个都是更令人头疼的问题,对他们来说只有边际性能改进,所以我的建议最初是不做任何一个,但如果他们大声疾呼,就会做出回应。

    我很同情想做一些“有趣”的事情,比如 Lighttpd + FCGI 而不是标准的 Apache + CGI + suexec,但我内心深处我真的不推荐。

    如果您运行多台服务器,您最终可能会在一些服务器上放置 CGI,而在其他服务器上为高级用户放置其他东西。并确保 cron grep 所有 www 目录,例如旧版本的 phpBB!

    【讨论】:

      【解决方案2】:

      我推荐Suhosin

      【讨论】:

        【解决方案3】:

        关于 PHP + FastCGI 和安全性,请查看this blog post

        保护共享的挑战 托管服务器是如何保护的 网站免受攻击 外部和内部。 PHP有 内置功能可以提供帮助,但是 最终这是错误的地方 解决问题。

        我已经写过很多 可行的解决方案,但一种选择 我一次又一次地被问到 看看是使用PHP + FastCGI。这 相信使用 FastCGI 会 克服性能问题 Apache 的 suexec 或 mod_suphp,因为 FastCGI 进程在页面之间持续存在 意见。

        但在我们查看性能之前, 第一个问题是:具体怎么做 我们让 PHP 和 FastCGI 运行为 一台 Web 服务器上的不同用户 首先?

        【讨论】:

          【解决方案4】:

          我已经使用InterWorx 大约一年了,印象非常深刻。它维护一个 LAMP 服务器,其中包含 chroot 脚本以确保安全。

          我也使用过Ensim,但没有发现它友好、快速并且没有那么多功能。此外,它的成本要高得多。

          【讨论】:

            猜你喜欢
            • 2023-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多