我的应用程序(有时)没有加载视图时遇到了一些问题。我正在使用 php-fpm 和 nginx(php5.6.8 和 nginx 1.8.0)运行 Debian 服务器,两者都是从源代码编译的。最重要的是,我正在运行 Lavavel 4.2。
到目前为止,我在 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
请注意,我将用户设置为文件夹用户,因为站点文件所在的文件夹归文件夹用户所有(文件夹用户: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 的脚本,没有一个解决了我遇到的问题。请注意,该问题在网站上的随机页面上以随机间隔发生。
我真的不知道解决我的问题的下一步是什么,因为上面的解决方案是我在互联网上找到的唯一解决方案。
我真的很感激一些帮助。
编辑:我有一个相同应用程序的测试版在另一台具有完全相同配置的服务器上运行(唯一的区别在于硬件,但更多的内存),问题不存在。
另外,我忘了提到该应用程序不使用 HTTPS 运行(当前)。然而,测试版使用 HTTPS 运行。
编辑存在问题的服务器有 2048 MB RAM,测试版服务器有 8192 MB RAM。
编辑当错误发生时,我用提琴手检查了响应,它只是在某个时候无缘无故地切断了响应。