你建议如何设置一个带有PHP的共享服务器?

8
您从安全/性能角度推荐什么来设置具有PHP的共享服务器?
- Apache mod_php(如何保护它?除了在PHP6中不会有safe_mode之外) - Apache CGI + suexec - Lighttpd并为每个用户生成FastCGI
LE:我不想使用已经制作好的控制面板,因为我正在尝试编写自己的控制面板,所以我想知道设置这个的最佳方法是什么。 我考虑使用Lighttpd,并为每个托管用户生成一个fastcgi,使fcgi进程在其凭据下运行(lighttpd wiki上有教程)。 这将是相对安全的,但这是否会影响性能(需要为每个fcgi提供大量用户/内存)以至于这不是可行的解决方案?
4个回答

11

个人而言,虽然Lighttpd不错,但如果你选择一个轻量级的web服务器+FastCGI解决方案,我会选择Nginx + FastCGI。我已经运行了基准测试并阅读了所有代码,Nginx在负载下的速度/稳定性比Lighttpd快上一个数量级--非常不错。

但这不是你所问的。基本上,我认为你列出的三个选项中有一个安全性/可伸缩性与速度权衡的光谱,你只需要决定自己想要在哪里。如果你是一个共享主机提供商,有不受信任的用户安装各种PHP应用程序,你会更倾向于安全性;如果这是共享给更受信任的用户使用,你可能会更倾向于性能。以下是我的想法:

CGI + suexec:这是迄今为止最安全、在共享主机环境中对于用户/站点数量最有效/可伸缩的方法。进程仅在请求到来时生成和使用内存。当然,CGI生成使得每个脚本的执行时间变慢。有多慢?好吧,你得进行基准测试,但通常情况下,如果人们运行长时间运行的应用程序(例如需要0.25-0.5秒才能加载其库并在每个请求上初始化的WordPress),那么CGI生成惩罚在这种情况下看起来相当可忽略。

FastCGI: 这里的问题(无论您使用的是Apache、Lighttpd还是Nginx)是确定每个用户可以运行多少FCGI子进程,因为每个进程占用的内存大小等于PHP解释器的大小(在Linux中,其中并非全部都被固定,但我偏离了重点)。而且,与mod_php不同,这些进程不会在用户之间共享,因此必须对每个用户进行限制。例如,Dreamhost为其客户设定了3个上限-现在,对于一个网站每秒获得超过2-5个页面浏览量的客户来说,这实际上是相当糟糕的,因为这些请求只会堆积起来,导致网站挂起。现在,当我在运行应用程序时,我喜欢在专用服务器/集群上使用轻量级web服务器和FastCGI,因为我可以给应用程序提供数百个FCGI子进程(所有这些子进程都具有web服务器特权,当然,就像Apache/prefork + mod_php一样)。但是,在需要为每个用户分配/限制FCGI子进程的共享托管环境中,我认为这并不明智。

Apache + mod_php: 它最不安全,因为所有东西都以web服务器特权运行,但您的PHP进程池是共享的,因此它在性能方面效果最佳。从开发者的角度来看,我无法容忍php_safe模式,而从系统管理员的角度来看,它实际上只是安全的幻象(它可以防止愚蠢的用户,但不能保护免受实际攻击),因此如果我的其他选择必须包括safe_mode,我实际上更希望使用CGI。

Dreamhost采用了一种混合型方法,他们默认使用Apache CGI + suexec,但让他们中小部分更为复杂的用户可以选择使用FCGI(限制并监控其内存使用情况)。这与默认为所有人启用FCGI相比,可以节省大量的内存资源。

如果你在谈论标准商业共享主机,则另一个问题是,Apache是功能齐全的,具有几乎任何模块(包括您可能需要的mod_security等内容),而且用户会喜欢它,因为所有他们的.htaccess配置将起作用等。如果使用其他东西进行安装Drupal或WordPress等操作时,您将遇到支持方面的麻烦(如果我们谈论内部用户,则这不是很大的问题)。
个人建议开始时保持简单,使用CGI + suexec以获得最佳安全性和可扩展性。如果用户想要FCGI或mod_php,并且您与他们保持着良好的沟通,他们会提出要求,但是对于您来说,两者都会带来更大的麻烦,而对于他们来说,仅有微小的性能改进,因此我的建议是最初不要使用它们,但如果用户要求,要及时响应。
我理解您想做一些“有趣”的事情,例如使用Lighttpd + FCGI而不是标准的Apache + CGI + suexec,但实际上我不能推荐它。
如果您运行多个服务器,则可以在某些服务器上放置CGI,而在其他服务器上为高级用户提供其他选择。一定要让cron检查所有www目录中的旧版本phpBB之类的东西!

2

1

关于PHP + FastCGI和安全性的问题,请查看这篇博客文章

保护共享托管服务器的挑战在于如何从内外两方面保护网站免受攻击。PHP具有内置功能来提供帮助,但最终解决问题的地方并不正确。

我已经写过一些可行的解决方案,但被反复要求研究的一个选项是使用PHP + FastCGI。人们认为使用FastCGI将克服Apache的suexec或mod_suphp的性能问题,因为FastCGI进程在页面视图之间持续存在。

但在我们考虑性能之前,首先要问的问题是:我们如何在同一台Web服务器上以不同的用户身份运行PHP和FastCGI?


0

我已经使用InterWorx约一年了,印象非常深刻。它可以维护一个带有chroot脚本安全性的LAMP服务器。

我也用过Ensim,但是发现它不够友好、快速,而且功能不如前者多。此外,它的价格也更贵。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接