PHP返回内容过长时被nginx截断的解决办法

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

背景

周日把博客的版本升级到最新,顺便又从新部署了nginx和PHP的环境。使用了PHP7。从新部署环境后发现原先发布博客文章时,编辑框不能正常显示。如图:

no_editor

分析

查看了html源代码,发现html源代码被截断了。因此,导致网页内容显示不全。
之后的整个分析过程绕了一大圈,即是tcpdump,又是用tcpflow进行网络包分析。最后,还是从nginx的错误日志中发现了端倪。
在nginx的错误日志中发现如下信息:


2016/03/29 06:08:10 [crit] 7042#0: *3 open() "/var/lib/nginx/tmp/fastcgi/4/00/0000000004" failed (13: Permission denied) while reading upstream, client: 117.72.224.240, server: www.bo56.com, request: "GET /wp-admin/post-new.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9010", host: "www.bo56.com", referrer: "http://www.bo56.com/wp-admin/edit.php"
AI 代码解读

错误日志显示, Permission denied,说明没权限。把这个目录设置为 775 权限问题解决。网页也就正常显示了。
如果PHP返回的内容过大,nginx会把一部分内容先存到文本文件中,等全部内容都接收完毕后,再一并发送到客户端。

在使用tcpdump抓包分析的时候,发现nginx进程主动向PHP进程发送了reset标识,终止通信。可能,nginx发现权限有问题,就关闭了连接。只是猜测,没有验证。图如下:

tcpdump_reset2

使用tcpdump抓包教程

经验教训

这次算是一次比较失败的问题排查。本来可以几分钟解决的事情,却花费了很长的时间。
切记,遇到问题,不要盲目的不断尝试。首先,要看日志查找线索。利用掌握的知识合理的推理分析。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
440
分享
相关文章
今日小结通过aliyun的本地容器镜像部署我的nginx和php环境
简介: 本教程介绍如何基于 Dragonwell 的 Ubuntu 镜像创建一个运行 Nginx 的 Docker 容器。首先从阿里云容器镜像服务拉取基础镜像,然后编写 Dockerfile 确保 Nginx 作为主进程运行,并暴露 80 端口。最后,在包含 Dockerfile 的目录下构建自定义镜像并启动容器,确保 Nginx 在前台运行,避免容器启动后立即退出。通过 `docker build` 和 `docker run` 命令完成整个流程。
94 24
今日小结通过aliyun的本地容器镜像部署我的nginx和php环境
当你的nginx服务器和php服务器不在一起的时候,这个nginx 的root目录问题
两个服务器的网站代码目录需要对齐,docker容器里面也是一样
【YashanDB 知识库】php 查询超过 256 长度字符串,数据被截断的问题
php 查询超过 256 字节数据,显示被截断:yashandb 的 odbc 驱动接口 SQLGetData 现在只支持单次查询,不支持多次取数据的操作。 isql 显示不出来,isql 工具最大只查询 300 长度的数据,超过了该长度未正常显示。
Tengine、Nginx安装PHP命令教程
要在阿里云Linux上安装PHP,请先更新YUM源并启用PHP 8.0仓库,然后安装PHP及相关扩展。通过`php -v`命令验证安装成功后,需修改Nginx配置文件以支持PHP,并重启服务。最后,创建`phpinfo.php`文件测试安装是否成功。对于CentOS系统,还需安装EPEL源和Remi仓库,其余步骤类似。完成上述操作后,可通过浏览器访问`http://IP地址/phpinfo.php`测试安装结果。
|
4月前
|
宝塔PHP8.1安装fileinfo拓展失败解决办法
在宝塔面板安装PHP8.1后,fileinfo扩展安装失败,手动尝试也报错。通过分析错误信息,在Makefile中修改CFLAGS添加`-std=c99`,并执行`make clean`清除缓存后,重新编译安装成功。最后在php.ini中启用fileinfo扩展并重启PHP服务。注意需调整CFLAGS为`-std=c99 -g`,去掉`-O2`。
344 0
Linux搭建tengine2.0<Nginx>+php7环境
本文介绍了在Linux系统上搭建Tengine 2.0(一个Nginx的增强版本)和PHP 7环境的详细步骤,包括创建安装目录、下载源码包及依赖库、编译安装Nginx、配置Nginx、安装PHP及其依赖、设置PHP-FPM、配置环境变量、安装Git和Composer,以及服务管理和日志查看等。
127 0
如何在Ubuntu 14.04上使用Nginx和Php-fpm安全地托管多个网站
如何在Ubuntu 14.04上使用Nginx和Php-fpm安全地托管多个网站
55 0
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
153 1
php如何实现检测nginx配置的正确性
请确保在执行此操作时,PHP有足够的权限来执行Nginx命令和访问Nginx配置文件。另外,将上述代码嵌入到您的应用程序中时,要注意安全性,以防止潜在的命令注入攻击。
149 3
linux 查看nginx状态和php-fpm状态 nginx-status和php-status
linux 查看nginx状态和php-fpm状态 nginx-status和php-status
107 0

热门文章

最新文章