从安全/性能的角度来看,您建议使用php设置共享服务器是什么?
答案 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)