php - 通过 Nginx Vs 部署 Laravel 站点。 PHP artisan 服务

标签 php laravel nginx laravel-5 laravel-artisan

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

这样做有什么缺点吗?

最佳答案

nginx

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

php artisan 服务

  • 旨在快速处理基于 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 的服务器来为您的应用程序提供服务是毫无值(value)的。配置 nginx/php-fpm 所花费的时间并不长,即使您是新手。

一切都伴随着风险和 yield ,但在这种特殊情况下 - yield 不存在,但肯定会出现问题。


TL;DR

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

关于php - 通过 Nginx Vs 部署 Laravel 站点。 PHP artisan 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55523978/

相关文章:

Laravel session 变量一旦重定向到支付网关并返回,就会变为 Null

php - 如何在 Laravel 4 中选择相关模型计数为 0 的模型?

nginx 连接限制

PHP flush() 不适用于 laravel?

php - 如何卸载 php apache 和 mysql 以便我可以使用 MAMP - MAC Lion

php - 数据库记录created_at时间随机变化

javascript - Nginx node.js express 下载大文件停在 1.08GB

nginx - 使用 nginx-Ingress 在 Kubernetes 的集群外暴露一个 TCP 端口

php - 用于存储数据的字符串与整数

php - 如何使用 rmdir 删除 Windows 目录?