由于在本地,我只做了 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/