在没有Apache的情况下将php作为服务器运行

Ayo*_*che 3 php apache nginx

当前,我正在使用PHP编程,并且发现只能通过使用PHP CL来加载网页,因此我不明白为什么我们必须安装其他服务器,例如Apache或Nginx。

php.exe服务器

Cub*_*oft 5

我不知道为什么您的问题被否决了。我认为这是一个集中在一个稍微广泛但高度相关的问题上的问题:为什么我们应该非常谨慎地只允许将特定软件放到面向公众的基础架构上?而且,甚至更一般而言,可以将哪种软件放置在面向公众的基础架构上?随之而来的是,好的服务器软件是什么样的?

首先,没有安全软件之类的东西。这意味着您应该始终对任何打开计算机上的单个端口以启用网络连接(双向)的事物持怀疑态度。但是,只有很少一部分软件具有足够的关注度,可以保证一定程度的最低保证,即可能不会出现严重错误。Apache是​​目前最经过考验的服务器,而就现代Web服务器而言,Nginx紧随其后。对于面向公众的系统,内置的PHP HTTP服务器不是一个好的选择,更不用说测试生产软件了,因为它缺乏良好的网络服务器设计质量,并且可能具有未发现的安全漏洞。由于这些原因和其他原因,开发人员会发出警告,禁止使用内置PHP服务器。

不信任不知道自己在做什么的人编写的网络服务器也是一个好主意。我经常看到用Node或Go编写的构思不良的网络服务器,通常是基于WebSocket的解决方案,或者只是用来解决另一软件的问题,即使作者不打算隐式地在基础架构中打开安全漏洞。这样做。仅仅因为某人可以做某事并不意味着他们应该做,并且在编写网络服务器时,他们不应该做。通常,这些服务器被代理在Apache或Nginx的后面,从而可以抵御标准攻击。但是,一旦攻击者越过Apache或Nginx的防御,则必须由软件提供自己的防御,而遗憾的是,这种防御几乎总是十分缺乏。结果是,每当我看到在主机上运行代理服务时,我都会为不可避免的安全灾难做好准备-Ruby,Node和Go开发人员是最大的罪魁祸首。开发人员决定编写网络服务器的那一刻,就是他们可能选择了错误的策略,除非他们有非常具体的理由这样做,并且必须了解并准备防御各种攻击方案。在承担编写可伸缩或其他方式的网络服务器这一极其困难的任务之前,开发人员需要精通各种学科。根据我的经验,很少有开发人员实际上能够执行此任务,而不会在他们自己或用户的基础结构中引入重大的安全漏洞。虽然PHP核心开发人员通常都知道他们在其他地方正在做什么,我个人在其核心网络逻辑中发现了几个严重的错误,这表明它们是该部门共同缺乏的。因此,如果有的话,应该谨慎使用其内置的Web服务器。

除了安全性,Apache和Nginx的设计还比内置PHP服务器更能处理“负载”。“每秒可以处理多少个请求?”问题的答案是什么负载?答案实际上非常复杂。根据代码的复杂性,托管的内容,正在使用的硬件以及任何时间运行的内容,一台主机每秒可以处理20到20,000个请求,并且该数量随时间而变化很大。Apache带有一个称为Apache Bench(ab)的工具,可用于基准测试Web服务器的性能。但是,基准测试应始终以“一粒盐”作为基准,并从“我们可以使该应用程序运行得更快吗?”的角度来看 而不是“我的应用程序比您的应用程序快”。

至于使用PHP开发软件(因为SO是一个编程问题站点),我建议尝试尽可能地镜像您的生产环境。如果Apache将在远程运行,那么在本地运行Apache可以提供对真实事物的最佳模拟,因此在最后一刻不会出现很多意外。在Apache模块下运行的PHP代码的行为可能与在内置PHP服务器下运行的PHP代码的行为大不相同(例如,$ _ SERVER差异)!

如果您像我一样,不喜欢设置Apache和PHP,并且不需要一直运行Apache,那么我会维护一组脚本来设置Apache,PHP和Maria DB的可移植版本(大致等同于MySQL) )(适用于Windows):

https://github.com/cubiclesoft/portable-apache-maria-db-php-for-windows/

如果您的软件应用程序实际上打算使用内置PHP服务器(例如,仅限本地主机的服务器)运行,那么我强烈建议您引入一个缓冲层,例如CubicleSoft WebServer类:

https://github.com/cubiclesoft/ultimate-web-scraper/

通过使用类似这样的PHP userland类,您可以确保内置PHP服务器在仍然是纯PHP解决方案的同时无法提供(即没有额外的依赖关系):如果有的话,缓冲区溢出机会减少了,服务器通过Zend Engine进行解释,从而导致更少的恶意代码执行机会,并且具有比内置服务器更多的功能,包括完全自定义服务器请求/响应周期本身。通过使用类似于Service Manager的工具,PHP本身可以在OS启动期间启动这样的服务器:

https://github.com/cubiclesoft/service-manager/

当然,这一切都意味着用户必须信任您的应用程序代码,该代码打开了在其计算机上运行的端口。例如,如果网站开始通过用户的Web浏览器扫描本地主机端口,该怎么办?而且,如果他们确实找到了运行您的软件的端口,那么该网站可以开始删除文件或运行安装恶意软件的代码吗?这是真正使您绊倒的不寻常的攻击。具有“断开网络电缆/禁用WiFi”策略的“零开放端口”是真正保护设备安全的唯一已知方法。每个开放的端口和已建立的连接都存在风险。

优秀的,具有网络功能的软件将经过严格的测试,并能抵抗各种攻击。编写此类软件是一项责任,需要花费大量时间才能正确,并且通常会显示出是否做错了。PHP的内置服务器比较草率,缺少基本的配置选项。我不建议将其用于任何合理目的。