通过 Nginx 部署 Laravel 站点 Vs. PHP Artisan 发球

Deploying Laravel site via Nginx Vs. PHP Artisan Serve

从本地开始,我只做了 php artisan serve 并且效果很好。 在我的生产 VM 中,我不确定我是否应该做同样的事情 php artisan serve & 这样我就不用安装Nginx、配置文档根目录等等。

这样做有什么缺点吗?

nginx

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

php artisan 服务

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

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

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

如果您认为安装和配置 nginx 很麻烦并且您想使用 php artisan serve,请确保您 运行 它受到监督(supervisord 是我的首选工具)。如果它崩溃了,它会重新启动。

在我看来,运行 一台 php-based 服务器来为您的应用提供服务毫无价值。配置 nginx 所花费的时间/php-fpm 并不多,即使您是新手也是如此。

凡事都有风险和收益,但在这种特殊情况下 - 收益不存在,但肯定会出现问题。


TL;DR

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

php artisan serve 永远不应在生产环境中使用,因为它使用的是 PHP7 内置服务器功能,该功能 仅用于开发目的.

看到这个page

因此,请避免在生产中使用。相反,使用 Apache 或 Nginx,这两者都是不错的选择,具体取决于您的需要。 Nginx 通常可能更快(并非总是如此)。