【问题标题】:Laravel intermittent Bad Gateway 502 error and pages losing css stylingLaravel 间歇性 Bad Gateway 502 错误和页面丢失 css 样式
【发布时间】:2018-02-20 05:17:48
【问题描述】:

尝试加载某些页面时,我收到 Bad Gateway Ngnix 502 错误,但是在页面刷新时它将解决页面加载问题。不确定这是否相关,但是一个页面需要大量的 mssql 查询,页面将加载结果,但不会继续加载与页面关联的 CSS。

master.blade.php 文件包含引导 css 和主题样式,extension.blade.php 将扩展 master(与我的项目中的多个其他页面一样)但是它包含一个 DB 查询,当 dd() 然而成功返回无法加载css。其他页面有时会出现此问题,并且多次刷新将更正页面加载。

希望有人可以帮助我的情况。听起来像配置问题?只是不确定..

更新

所有页面首先遇到错误网关 502,然后刷新 CSS 丢失(主要是引导程序)。 Bad Gateway 将在与 DB 查询无关的静态页面上刷新 2 或 3 次浏览器后出现。

我的设置:

  • Mac OS X Sierra 10.12.6
  • PHP 7.1
  • Nginx 和 Laravel 5.6

www.conf 设置:

  • pm = 动态
  • pm.max_children = 10
  • pm.start_servers = 10
  • pm.min_spare_servers = 10
  • pm.max_spare_servers = 10

~/.valet/Nginx/Sites.dev-env(我的代客泊车的项目目录)有以下几行(我自己添加来尝试解决这个问题):

`fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/Users/myusername/.valet/valet.sock;
fastcgi_index 
/Users/myusername/.composer/vendor/laravel/valet/server.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME 
/Users/myusername/.composer/vendor/laravel/valet/server.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;`

php-fpm.conf 设置:

  • 默认为include=/usr/local/etc/php/7.1/php-fpm.d/*.conf

Laravel Storage 有一个 777 权限集(只是为了确定它是否是文件权限问题,这将恢复为 755 fyi)

现在解决这个问题的关键是提供以下内容的错误日志:

php错误日志:

`[22-Feb-2018 10:29:06 Australia/Sydney] PHP Fatal error:  Uncaught 
PDOException: SQLSTATE[25000]: [FreeTDS][SQL Server]The ROLLBACK 
TRANSACTION request has no corresp$
Stack trace:
0 {main}
  thrown in [no active file] on line 0`

但是,我唯一与此相关的 SQL 是一个选择查询,但我不认为这是错误网关的主要原因。

~/.valet/log/nginx-error.log:

`2018/02/22 10:24:23 [error] 62179#0: *9 upstream prematurely closed 
connection while reading response header from upstream, client: 
127.0.0.1, server: sites.dev-env`

我认为这是主要问题。它发生在 Bad Gateway 错误的每一个点,我一直试图弄清楚它到底意味着什么。这个日志文件有很多这些错误,显然我试图弄清楚是什么。正在进行。

我临时解决问题的方法是代客重启。重新启动 nginx 或 php 并不能解决问题,因此,将其隔离为代客。

【问题讨论】:

  • 你在 ngnix 日志中看到什么了吗?
  • 在 ngnix 日志中找不到任何内容。
  • 您检查过删除查询是否有效?
  • 刚刚查看页面的源代码时也发现,打开css显示很好,jquery脚本产生了一个坏的网关,然后重新打开它就可以了。这是非常间歇性的,毕竟与查询数据库无关。
  • 发现唯一的错误是在 php 日志中:[20-Feb-2018 16:31:53 Australia/Sydney] PHP 致命错误:无法重新声明 valet_default_site_path()(之前在 /Users/myusername 中声明/.composer/vendor/laravel/valet/server.php:43) 在 /Users/myusername/.composer/vendor/laravel/valet/server.php 第 43 行

标签: css laravel laravel-5 bad-gateway


【解决方案1】:

我只知道页面可能无法在第一时间加载,但在另一个位置加载的原因。关于Redirect::back()->withInput(Input::all());

在第一次加载时可能会有一些输入,在刷新时 - 不会留下任何输入。

【讨论】:

  • 不,这是不正确的。从静态到数据库驱动的查询页面的每个页面上都会发生此错误。这并不孤立于特定页面和根本没有输入的页面。
  • 好吧,无论如何这与会话有关,我相信很可能是登录引擎。你能 Log::debug(... 当出现问题和问题消失时包含会话的内容,看看有什么不同?
  • 谢谢Yevgeniy,因为这有帮助。我安装了 Spatie 用户权限包,现在刚刚添加 barryvdh/laravel-debugbar 以查看路由、查询和会话。看起来 Spatie 的用户权限正在进行 3 次查询以收集用户、角色和权限,而应将查询合并为一个,但我没有找到除此之外的任何内容。你对 Laravel 中的调试会话有什么建议吗?
【解决方案2】:

只是在这里发表评论,因为我遇到了另一种可能导致这种情况的情况。请注意,如果没有引用者标头信息,Yevgeniy 的答案在导致 502 时也是正确的。

在负载下,我能够确定该数据库受到一些性能不佳的查询的特别严重的打击。这些查询似乎使我们的数据库保持正常运行,并且这样做会导致 Web 服务器每分钟上下几次。似乎 PHP-FPM 一直在打开/关闭数据库连接 - 可能是由于负载导致打开的连接停止。

无论如何 - 作为对此的一般回答,数据库问题可能会导致您的 Web 层锁定并返回 502 错误。在这种情况下,Laravel 不会为您提供有用的信息,但如果您开始收到此类间歇性错误,您可能需要检查您的数据库。

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 2019-12-15
    • 2017-07-24
    • 2013-10-30
    • 1970-01-01
    • 2019-08-07
    • 2018-04-23
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多