【问题标题】:Laravel connection reset after any file changes任何文件更改后 Laravel 连接重置
【发布时间】:2016-06-12 22:12:52
【问题描述】:

我在本地环境(windows 10)中安装了 laravel 4.2 进行测试,但在更新任何文件后不断收到连接重置错误。

我的项目将加载并且服务器正确显示我的页面。但是,如果我更新文件(例如索引)然后尝试访问呈现新更新文件的页面,我总是会收到连接重置错误。哪怕是一个句号那么简单的改变。

更有趣的是,当我使用 php artisan 来提供我的文件时,我从来没有遇到过连接重置问题。如果我通过 artisan serve 访问该页面,它可以工作,然后突然 xampp 想要工作,但只有在我之前从 artisan 加载过一次页面之后。

如果我再次对文件进行更改,我必须重复此过程。

本地设置

我的项目使用以下 v-hosts 配置从 xampp (v 3.2.2) 本地托管。主机文件也已正确配置。

<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/myproject/public"
ServerName myproject.local
ServerAlias myproject.local
ErrorLog "logs/myproject.log"
CustomLog "logs/custom.myproject.log" combined
<Directory "C:/xampp/htdocs/myproject/public">
    AllowOverride All
    Require all granted
</Directory>

简而言之:我更改了一个文件,尝试访问该页面时,我在 xampp 上重置了连接。我从 artisan 查看页面,然后在 xampp 上刷新页面,突然它起作用了。

更新

我尝试了 Lucas 建议的 laragon 等替代方法,但同样的错误仍然存​​在。在尝试访问该页面时更新任何文件后,我收到连接重置错误。

我在 laragon 的 apache 日志中找到了更多信息。

[Tue Mar 01 08:52:22.785519 2016] [mpm_winnt:notice] [pid 6748:tid 544] AH00428:父进程:子进程 8276 退出,状态为 3221225725 -- 正在重新启动。
[Tue Mar 01 08:52:22.928687 2016] [ssl:warn] [pid 6748:tid 544] AH01909: www.example.com:8443:0 服务器证书不包含与服务器名称匹配的 ID
[2016 年 3 月 1 日星期二 08:52:22.938712] [mpm_winnt:notice] [pid 6748:tid 544] AH00455: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.16 已配置 -- 恢复正常操作
[2016 年 3 月 1 日星期二 08:52:22.938712] [mpm_winnt:notice] [pid 6748:tid 544] AH00456:Apache Lounge VC11 服务器建成:2015 年 10 月 13 日 10:54:13
[2016 年 3 月 1 日星期二 08:52:22.938712] [core:notice] [pid 6748:tid 544] AH00094:命令行:'C:\\laragon\\bin\\apache\\apache-2.4.17/bin/ httpd -d C:/laragon/bin/apache/apache-2.4.17'
[Tue Mar 01 08:52:22.939695 2016] [mpm_winnt:notice] [pid 6748:tid 544] AH00418: Parent: Created child process 3672
[Tue Mar 01 08:52:23.214917 2016] [ssl:warn] [pid 3672:tid 532] AH01909: www.example.com:8443:0 服务器证书不包含与服务器名称匹配的 ID
[Tue Mar 01 08:52:23.296629 2016] [ssl:warn] [pid 3672:tid 532] AH01909: www.example.com:8443:0 服务器证书不包含与服务器名称匹配的 ID
[2016 年 3 月 1 日星期二 08:52:23.306647] [mpm_winnt:notice] [pid 3672:tid 532] AH00354:子级:启动 64 个工作线程。
[2016 年 3 月 1 日星期二 08:52:24.159843] [mpm_winnt:notice] [pid 6748:tid 544] AH00428:父进程:子进程 3672 以状态 3221225725 退出——正在重新启动。
[Tue Mar 01 08:52:24.305896 2016] [ssl:warn] [pid 6748:tid 544] AH01909: www.example.com:8443:0 服务器证书不包含与服务器名称匹配的 ID
[Tue Mar 01 08:52:24.315916 2016] [mpm_winnt:notice] [pid 6748:tid 544] AH00455: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.16 已配置——恢复正常操作
[2016 年 3 月 1 日星期二 08:52:24.315916] [mpm_winnt:notice] [pid 6748:tid 544] AH00456:Apache Lounge VC11 服务器建成时间:2015 年 10 月 13 日 10:54:13
[2016 年 3 月 1 日星期二 08:52:24.315916] [core:notice] [pid 6748:tid 544] AH00094:命令行:'C:\\laragon\\bin\\apache\\apache-2.4.17/bin/ httpd -d C:/laragon/bin/apache/apache-2.4.17'
[Tue Mar 01 08:52:24.317905 2016] [mpm_winnt:notice] [pid 6748:tid 544] AH00418: Parent: Created child process 3600
[Tue Mar 01 08:52:24.580068 2016] [ssl:warn] [pid 3600:tid 552] AH01909: www.example.com:8443:0 服务器证书不包含与服务器名称匹配的 ID
[Tue Mar 01 08:52:24.666114 2016] [ssl:warn] [pid 3600:tid 552] AH01909: www.example.com:8443:0 服务器证书不包含与服务器名称匹配的 ID
[2016 年 3 月 1 日星期二 08:52:24.675120] [mpm_winnt:notice] [pid 3600:tid 552] AH00354:子级:启动 64 个工作线程。

【问题讨论】:

标签: php windows laravel


【解决方案1】:

这个问题最终通过 Apache 的配置更改得到解决。

将以下内容添加到 httpd.conf 文件中:

<IfModule mpm_winnt_module>
   ThreadStackSize 8888888
</IfModule>

然后重新启动。

问题在于默认情况下,Windows 的堆栈大小比 Linux/Unix 系统小。我花了一段时间才弄清楚这一点。 Apache 默默地崩溃了,我的日志中没有任何错误,因此很难追踪。

我正在处理的项目有大量的正则表达式调用,显然这是导致 Windows 上 apache 出现此问题的已知触发器。如果您查看 apache 文档,我们可以将 ThreadStackSize 更新为更接近 Unix/Linux 系统 8MB 的值。

http://httpd.apache.org/docs/2.2/mod/mpm_common.html#ThreadStackSize

我希望这可以帮助任何其他在运行 apache 作为本地服务器的 Windows 系统上进行开发的人。一段时间以来,这是一个令人头疼的问题。

【讨论】:

  • 我在windows上开发的时候从来没有遇到过这个问题,但是如果将来发生的话,很高兴知道如何解决。
  • @Lucas 是的,这是我第一次遇到这个问题。事实上,最终解决这个问题花了大约 2 个月的时间。
  • @Olixr 我已经被这个问题困扰了好几个星期了。我在 Laravel 5.5、PHP 7.3 和 Apache 2.4.x 上,但我仍然无法通过它。请看这个问题:stackoverflow.com/questions/54130437/…
【解决方案2】:

php artisan serve 使用 PHP 构建在服务器上 (php -S localhost:80 -t public) 来托管应用程序。

也许问题可能出在您的 apache 配置上,所以试试这个:

# define DOCROOT variable
define DOCROOT "C:/xampp/htdocs"

<Directory "${DOCROOT}">
    AllowOverride All
    Require all granted
</Directory>

<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/myproject/public/"
    ServerName myproject.dev
</VirtualHost>

如果问题仍然存在,请尝试使用Laragon 并始终以管理员身份打开它。

【讨论】:

  • 感谢您的回复,我已尝试更新 apache 配置,但无济于事。我在另一台计算机上有完全相同的设置,无法重现此问题。我也完全删除了 xampp 并重新安装,但问题仍然存在。内置的 php 服务器运行不佳(有很多资产问题)。我目前正在尝试下载 laragon 并查看我们从该路线中得到什么。任何其他选项表示赞赏。
  • 如果你喜欢 Laragon,请告诉我。
  • Laragon 看起来不错且易于使用,但同样的错误仍然存​​在(连接重置)。我已经用更多信息更新了我的问题。
  • 这帮助我发现问题肯定出在我的本地 Windows Apache 配置上。 Laravel 应用在 PHP 内置服务器上运行良好。
【解决方案3】:

打开 php 错误日志可能会帮助您找到真正的问题。我的代码中有错误(直接在函数上使用 isset())

【讨论】:

    猜你喜欢
    • 2020-10-03
    • 1970-01-01
    • 2018-07-27
    • 2014-12-26
    • 2019-01-12
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多