没有 Laravel 日志或 Apache 日志的新 Laravel 8 安装 500 服务器错误
Posted
技术标签:
【中文标题】没有 Laravel 日志或 Apache 日志的新 Laravel 8 安装 500 服务器错误【英文标题】:New Laravel 8 Install 500 server error with no Laravel logs or Apache logs 【发布时间】:2021-03-30 19:39:16 【问题描述】:这几天我一直在拔头发。
我有一个 Laravel 网络应用程序,我正在尝试将它部署到我的网络服务器。几周前我开始制作该应用程序,并开始使用最新稳定版本的全新 Laravel 安装。
当我第一次尝试通过 composer 安装 Laravel 时,它告诉我我的 php 版本已经过时了。我需要 7.3 或更高版本并安装了 7.2。我继续关注this guide on installing php 7.4.
起初,我在 Apache 中收到一个默认的 503 服务不可用错误,我可以将其归结为另一个域虚拟主机上的 ProxyPass 错误。当我检查它们时,它显示在 Apache 错误日志中。
目前,我只是简单地禁用了该网站,因为它已经有一段时间没有使用了。
这样做后,我现在会得到一个与 Laravel 默认错误代码屏幕匹配的样式“500 | 服务器错误”屏幕。但是,当我去检查它时,storage/logs/laravel.log
没有新的错误。如果我尝试以php artisan migrate
身份运行工匠命令,则日志确实将这些错误的输出正确地写入文件。所以根本不能写日志不是权限错误。
就目前而言,我已经在我的网络服务器上安装了以下内容。
Laravel 8.12 PHP 7.4.13 (cli) Apache 2.4.29到目前为止,我已经尝试过...
.env
文件已成功创建并具有正确的权限。 (确实如此)
调试已启用(已启用)
正如我在此服务器上安装的其他 Laravel 所做的那样 I made sure the file permissions are correctly set.(它们是)
我检查了我的虚拟主机文件(附在下面),它是我的其他 Laravel 站点虚拟主机之一的副本,相关信息已更改。我在此服务器上托管的其他 Laravel 站点(其他 2 个项目)运行正常。
我确保所有php modules required by Laravel are installed 都是最新的。 (据我所知)
在config/app.php
中手动将调试设置为true
并使用php artisan config:cache
重新加载配置缓存
域虚拟主机文件:
<VirtualHost *:80>
ServerAdmin myemail@gmail.com
ServerName workworkwork.fitness
ServerAlias workworkwork.fitness
DocumentRoot /var/www/html/workout/public
<Directory /var/www/html/workout/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog $APACHE_LOG_DIR/error.log
CustomLog $APACHE_LOG_DIR/access.log combined
RewriteEngine on
RewriteCond %SERVER_NAME =workworkwork.fitness
RewriteRule ^ https://%SERVER_NAME%REQUEST_URI [END,NE,R=permanent]
</VirtualHost>
如果有人对如何调试此错误有任何想法,我们将不胜感激。与部署站点或设置新域一样,我之前遇到过问题,但通常 Stack Overflow 或其他站点都可以轻松地通过 Google 解决。但是,我还没有在这个网站上找到适合我的。如果没有 Apache 或 Laravel 错误报告,甚至很难知道从哪里开始。
【问题讨论】:
一般来说,对于任何 500 错误,都必须有一个日志条目。尝试清除storage/logs/laravel.log
并刷新页面,然后检查日志文件中是否有任何条目。还要检查日志文件夹中是否有任何其他日志文件可能是日期明智的。如果您删除最后三行虚拟主机配置,即允许标准 laravel 应用程序附带的 .htaccess
文件处理漂亮的 url 内容,错误是否仍然存在?
@Donkarnash 这是删除重写条件的一个好点,我不太习惯编写虚拟主机,所以不可否认,这是从大量阅读中拼凑而成的。删除它们不会改变行为。仍然是 500 错误。我清除了日志文件。没有什么新鲜事要报告。如果我通过我知道会出错的终端输入一个工匠命令,那些仍然会写入文件。所以我无法弄清楚这些丢失在哪里。
通过在./public/index.php
文件的开头设置phpinfo();exit;
来确认虚拟主机被正确指向并且运行良好。这也会告诉你 Apache 的 PHP 是否使用 PHP 7.4
php artisan config:cache
?
临时定义一个新的 '/' 路由在其他两个项目之一中成功运行在同一服务器上作为闭包和 return phpinfo()
来自闭包。然后访问'/'路由,看看为apache配置了哪个php版本。
【参考方案1】:
此问题已在不久前解决,我不记得确切的步骤(抱歉,我没有记得更早更新此问题),但我确实有一些事情供将来可能偶然发现此问题的人检查。
如果遇到类似问题,我学到的知识可能会对其他人有所帮助。
最重要的说明:如果您的服务器上运行有 Certbot 或 Let's Encrypt。检查他们的错误日志。它有自己的日志,可以深入了解如何处理请求。通常它们位于/var/log/letsencrypt/
。我应该在我最初的帖子中提到这一点。一旦我执行了以下一些其他步骤以消除可能的问题,我更新了我的证书,并将它们从 HTTP 重定向到 HTTPS,这解决了问题。我相信这与一个域中的RewriteRule ^
配置错误有关。该域还启用了ProxyPass
。我认为在那个错字之间,然后是 CerBot 自动生成的证书。某处发生了故障。一旦确定、纠正并重新颁发证书,问题就解决了。
Apache 按字母顺序处理虚拟主机。就我而言,遇到问题的域按字母顺序排列是最低的。就我的日志而言,我注意到试图到达此域的流量正在通过另一个路由。这使我开始研究该域的虚拟主机及其配置方式。也请注意,这并没有被指示为错误,它的行为就好像它应该基于某些虚拟主机配置来执行此操作。并非所有错误基本上都是错误。这让 Apache 认为它工作正常,但 Laravel 将应用程序状态错误显示为 500。
禁用所有未使用或立即需要的虚拟主机。就我而言,我有一些旧的虚拟主机仍在运行,用于测试域、废弃的辅助项目等。消除过程效果很好。慢慢地取出可能导致问题的东西,直到它起作用,然后你就会更好地了解是什么阻碍了它。自然地,您会希望将其中的许多内容重新上线,否则并不总是可以选择将内容离线。许多人的最后手段,但仍然帮助了我。
【讨论】:
以上是关于没有 Laravel 日志或 Apache 日志的新 Laravel 8 安装 500 服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 使用 root:root 代替 webapp:webapp 创建的日志文件