我最近遇到了一些问题,我的应用程序有时候无法加载视图。我使用Debian服务器和php-fpm和nginx运行(php5.6.8和nginx 1.8.0),两者都是从源代码编译的。另外,我还在运行Lavavel 4.2。
目前为止,我在Chrome和Firefox中都遇到了这个问题(Chrome仅停止加载并显示错误,Firefox不显示错误但显示视图的不完整版本)。
到目前为止,我已经检查了nginx和PHP的权限,它们都是以相同的用户(www-data:www-data)运行的。我的php-fpm套接字配置如下:
请注意,我将用户设置为folderuser,因为站点文件所在的文件夹是由folderuser(folderuser:www-data)拥有的。 此外,laravel文件夹内的权限配置为755(缓存和上传文件夹为775,以便www-data可以写入缓存文件)。
我已禁用任何类型的服务器端php缓存(除了zend opcache)。
我还尝试禁用chrome中的“预取资源以更快地加载页面”功能,但无法解决问题。
作为最后一招,我尝试了这个解决方案:
目前为止,我在Chrome和Firefox中都遇到了这个问题(Chrome仅停止加载并显示错误,Firefox不显示错误但显示视图的不完整版本)。
到目前为止,我已经检查了nginx和PHP的权限,它们都是以相同的用户(www-data:www-data)运行的。我的php-fpm套接字配置如下:
[sitename]
listen = /var/run/php5-fpm/sitename.sock
listen.backlog = -1
listen.owner = www-data
listen.group = www-data
listen.mode=0660
; Unix user/group of processes
user = folderuser
group = www-data
; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
; Pass environment variables
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
请注意,我将用户设置为folderuser,因为站点文件所在的文件夹是由folderuser(folderuser:www-data)拥有的。 此外,laravel文件夹内的权限配置为755(缓存和上传文件夹为775,以便www-data可以写入缓存文件)。
我已禁用任何类型的服务器端php缓存(除了zend opcache)。
我还尝试禁用chrome中的“预取资源以更快地加载页面”功能,但无法解决问题。
作为最后一招,我尝试了这个解决方案:
/*
|--------------------------------------------------------------------------
| Fix for Chrome / PHP 5.4 issue
| http://laravel.io/forum/02-08-2014-another-problem-only-with-chrome
|--------------------------------------------------------------------------
*/
App::after(function($request, $response)
{
$content = $response->getContent();
$contentLength = strlen($content);
$response->header('Content-Length', $contentLength);
});
这个脚本有几个变体,但我发现有一些内容长度不匹配(比net::ERR_INCOMPLETE_CHUNKED_ENCODING
错误更常见)。
综上所述,我已经检查了服务器端的权限和用户/组设置,除zend外,我已经禁用了服务器端缓存,我调整了chrome设置,并尝试了一个适用于laravel的脚本,但都没有解决我遇到的问题。请注意,该问题会在站点上的随机页面和随机间隔时间内发生。
我真的不知道下一步应该怎么做才能解决我的问题,因为以上解决方案是我在互联网上找到的唯一解决方案。
我非常希望得到一些帮助。
编辑:我在另一台具有完全相同配置的服务器上运行了同一应用程序的Beta版本(唯一的区别是硬件,尽管内存更大),那里没有出现这个问题。
此外,我忘记提到该应用程序当前不使用HTTPS运行。然而,Beta版正在使用HTTPS。
编辑:问题存在的服务器有2048 MB RAM,Beta服务器有8192 MB RAM。
编辑:当错误发生时,我使用fiddler检查了响应,它会在某个点上不明原因地截断响应。