通过 Nginx 部署 Laravel 站点 PHP 工匠服务

kyo*_*kyo 5 php nginx laravel laravel-5 laravel-artisan

由于在本地,我只做了php artisan serve并且效果很好。在我的生产虚拟机中,我不确定是否应该执行相同的操作php artisan serve & ,这样我就不必安装Nginx、配置文档根目录等。

这样做有什么缺点吗?

Mjh*_*Mjh 8

nginx

  • 旨在解决c10k问题
  • 即使在巨大的负载下也表现得非常好
  • 是一个反向代理
  • 使用最先进的 http 解析器来检查请求是否有效
  • 使用极其强大但简单的配置语法
  • 附带大量模块来处理 http 流量(auth 模块、mirror 模块)
  • 可以终止 ssl/tls
  • 可以在多个 php 服务端点(或任何其他使用 http 的端点)之间进行负载平衡
  • 可以重新加载以应用新配置,而不会丢失当前连接

php工匠服务

  • 旨在快速摆弄基于 Laravel 的网站
  • 用 php 编写,不是为了解决 c10k 问题而设计的
  • 一旦超出可用内存(默认为 128 mb,很快就会被填满),将会崩溃
  • 不是反向代理
  • 没有使用最先进的 http 解析器
  • 没有经过压力测试
  • 无法像 nginx 那样扩展到其他机器
  • 不终止 SSL。即使这样做,与纯编译的解决方案相比,它也会慢得令人痛苦
  • 不像 php-fpm/nginx 那样基于事件或线程化,因此所有内容都在同一进程中执行。没有反应堆模式可以将负载卸载给工作人员以跨 CPU 核心进行扩展,并防止在一段代码出现问题时导致服务器崩溃。这意味着如果您从 MySQL 加载太多数据,进程就会崩溃,服务器也会崩溃。

对于有经验的人来说,配置 nginx 平均需要大约 30 秒。我是根据经验说的,因为这是我的日常工作。使用像 ansible 这样的自动化工具可以让这变得更加容易,你几乎可以忘记它。

使用旨在调整和快速测试生产中的部分代码的 Web 服务器会带来风险。你的网站会变慢。如果任何脚本小子决定在 foreach 循环中运行curl 请求,您的站点将很容易崩溃。

如果您认为安装和配置 nginx 很麻烦并且想要使用php artisan serve,请确保在监督下运行它(supervisord这是我的常用工具)。如果崩溃了,它会再次启动。

在我看来,运行基于 php 的服务器来为您的应用程序提供服务是毫无价值的。即使您是新手,配置 nginx / php-fpm 所花费的时间也不是很多。

任何事情都有风险和收益,但在这个特殊情况下,收益并不存在,但肯定会出现问题。


长话短说

不要这样做,花几分钟配置 nginx。最好的软件是能够很好地工作到您可以忘记它的软件。nginx 就是其中之一。PHP 在许多领域都表现出色,但内置网络服务器并不是您应该在生产中使用的东西之一。使用经过战场验证的工具。