您建议使用php设置共享服务器

时间:2008-10-06 20:18:49

标签: php apache lighttpd shared-hosting

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

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

4 个答案:

答案 0 :(得分:11)

就个人而言,虽然Lighttpd没问题,但如果您最终使用轻量级网络服务器+ 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子项时(当然,所有这些都是带有webserver权限的,例如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 dirs用于像旧版本的phpBB!

答案 1 :(得分:2)

我建议Suhosin

答案 2 :(得分:1)

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

  

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

     

我已经写了很多关于   有效的解决方案,但有一个选择   我一次又一次地被问到了   看看是使用PHP + FastCGI。该   相信使用FastCGI会   克服了性能问题   Apache的suexec或mod_suphp,因为   FastCGI进程在页面之间保持不变   视图。

     

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

答案 3 :(得分:0)

我已经使用InterWorx大约一年了,并且给我留下了非常深刻的印象。它维护一个LAMP服务器,为了安全起见,使用chroots脚本。

我还使用了Ensim,但没有发现它友好,快速且没有那么多功能。此外,它还要花费更多。