导航:首页 > 编程语言 > nginxphp错误日志

nginxphp错误日志

发布时间:2024-12-30 21:49:05

‘壹’ linux php错误日志在哪

由于nginx仅是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息。
nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog
原因:
php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。
解决nginx下php-fpm不记录php错误日志的办法:
1.修改php-fpm.conf中配置 没有则增加
2.修改php.ini中配置,没有则增加
3.重启php-fpm

‘贰’ Nginx和PHP的配置

在现今网络架构中,Nginx与PHP的组合被广泛应用,尤其在web服务器领域。为了使Nginx能够正确调用PHP,我们需要对Nginx配置文件进行调整,尤其是涉及到对php的动态执行。本文将深入探讨如何在Nginx服务器中正确配置PHP调用方法,以及配置背后的原理。


配置文件默认位于 /etc/nginx/nginx.conf,在我的环境中,该文件位置为 /etc/nginx/nginx.conf。使用文本编辑器如vim打开配置文件,进行调整。


配置文件中的关键要点包括:



进行php的fastcgi配置,首先在vim中打开nginx配置文件,定位到server部分进行调整。



完成配置后,重启Nginx服务。通过在Nginx根目录下创建一个php文件(例如:php_info.php),并输入相关代码,访问该文件以验证配置是否成功。


了解了Nginx与php的运行原理后,配置过程变得直观且易于执行。Nginx的worker进程负责管理网络请求,而php作为一个cgi程序,则由名为php-fpm的进程管理器进行管理。fastcgi是一种进程管理器,用于管理cgi进程,如php-fpm,它监听特定端口(默认9000端口),并处理传入的请求。


配置文件中的关键信息包括:



通过此配置,当重启Nginx后,在特定目录下创建php文件并访问时,网页将显示相应内容。


对于需要对外网访问内网设置的情况,需在nginx配置文件中开放相应的端口,确保外网可以访问内网服务器的特定端口。如将外网IP映射至内网服务器的82端口,需在配置文件中进行相应的端口开放操作。


本文旨在提供Nginx配置PHP调用方法及配置原理的详细指南,助力开发者高效实现服务器配置,提升开发效率。对于进一步提升技能、解决进阶问题,可参考整理的高级进阶干货资料。

‘叁’ nginx php-fpm记录php错误日志怎么配置

要想让php-fpm显示错误日志,首先需要配置php-fpm。
在php-fpm的配置文件中(一般位于php安装目录下的etc/php-fpm.conf)配置php错误日志的文件路径。

1
2
3
4
5
6

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; in a local file.
; Note: the default prefix is /home/wangwei/php/var
; Default Value: log/php-fpm.log
;error_log = log/php-fpm.log

如上是我的php-fpm.conf文件中配置错误日志的地方。把error_log = log/php-fpm.log之前的;去掉,然后修改为:

1
2
3
4
5
6

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; in a local file.
; Note: the default prefix is /home/wangwei/php/var
; Default Value: log/php-fpm.log
error_log = /home/work/log/php-fpm.log.wf

修改之后,保存配置,然后重启php-fpm就可以啦。
注意如果用相对路径的话,的路径的前缀是基于php安装目录的var目录的。

‘肆’ Http协议状态码理解(1**~5**)

通俗的来说,nginx作为一个代理服务器,将请求转发到其他服务器或者php-cgi来处理,当nginx收到了无法理解的响应时,就返回502。当nginx超过自己配置的超时时间还没有收到请求时,就返回504错误。

php-fpm没有启动

我们关闭php-fpm。

刷新页面,发现返回502错误:

nginx的error_log:

php-fpm请求超时

我们首先将php-fpm.conf中的 max_terminate_request 改成5s:

在php脚本中添加如下语句:

刷新页面,发现返回502错误:

查看php-fpm的error_log,有如下日志:

查看nginx的error_log,有如下日志:

504即nginx超过了自己设置的超时时间,不等待php-fpm的返回结果,直接给客户端返回504错误。但是此时php-fpm依然还在处理请求(在没有超出自己的超时时间的情况下)。

这里有三个相关的配置:

这里我们将fastcgi_read_timeout设置为1s,后端还是延迟20s,观测效果:

nginx返回504错误。

‘伍’ 真心求助.nginx错误

Nginx服务器错误一般有以下几点原因:

1、请求的header过大。nginx默认的header长度上限是4k,如果超过了这个值,nginx会直接返回400错误.

解决方法:配置nginx.conf相关设置。可以通过以下2个参数来调整header上限:

client_header_buffer_size 16k;large_client_header_buffers 4 16k。

2、上传文件过程中出现错误。这时浏览器显示“413 Request Entity Too Large”。这是因为没有设置client_max_body_size,这个参数默认只是1M,也就是说发布的文章内容大小不能超过1M。

解决方法:增加如下两行到nginx.conf的http{}段, 增大nginx上传文件大小限制:设置允许发布内容为8M:client_max_body_size 8M;client_body_buffer_size 128k。

另外如果运行的是php,那么还要检查php.ini,这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误:post_max_size = 8M;upload_max_filesize = 6M。

修改完配置后,别忘记重新加载。

3、客户端在为等到服务器相应返回前就关闭了客户端描述符。一般出现在客户端设置超时后,服务器主动关闭。

解决方法:根据实际Nginx后端服务器的处理时间修改客户端超时时间。

4、脚本错误(php语法错误、lua语法错误)。

解决方法:查看nginx_err_log php_err_log。

5、访问量过大,系统资源限制,不能打开过多文件。 磁盘空间不足。(access log开启可能导致磁盘满溢,服务器主动关闭)。

解决方法:修改/etc/sysctl.conf文件,并使用下面的命令确认: #sysctl -p。要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。

6、后端服务无法处理,业务中断。

解决方法:从后端日志获取错误原因,解决后端服务器问题。

7、后端服务器在超时时间内,未响应Nginx代理请求。

解决方法:根据后端服务器实际处理情况,调正后端请求超时时间。

8、网站页面缓存过大。

解决方法:配置nginx.conf相关设置:fastcgi_buffers 8 128k;send_timeout 60。

‘陆’ php进程超时接口返回504错误分析

在一次接口测试中,发现返回的http 504 time out 的错误,然后查看了php-fpm的错误日志,发现了如下错误

从表现上看,是php进程超时导致的进程被kill了,那么这个超时时间以及kill的机制是跟哪些参数有关呢,这里系统这里一下。

Nginx服务一般因为php的错误或者超时会有两种错误码502 bad Gateway 或者 504 Gateway Time-out

一种情况是php产生了语法错误,比如循环调用、变量作用域错误、方法不存在等,如果开启错误日志输出的话,这种错误在php-fpm的错误日志中是可以看到调用栈信息的。

另外一种情况可能就是超时引起的php-fpm主动kill的情况,在php.ini和php.fpm中有两个配置项,用来管理php脚本的最大执行时间

当php脚本的执行时间超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。

以顶部的错误为例,当报502错误是,nginx的errorlog中有如下日志,:

所以只需将这两项的值调大一些就可以让PHP脚本不会因为执行时间长而被终止了。request_terminate_timeout可以覆盖max_execution_time,

所以如果不想改全局的php.ini,那只改PHP-FPM的配置就可以了。

此外要注意的是Nginx的upstream模块中的max_fail和fail_timeout两项。这两个配置表示在fail_timeout事件内,如果fail的测试达到max_fail,那么在接下来的fail_timeout时间内,Nginx都会认为上游服务器挂掉了,都会返回502错误。

所以可以将max_fail调大一些,将fail_timeout调小一些。

PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了。这是为什么呢?

因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置

以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:

调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。

而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中吧。

要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的。

参考链接: http://www.cnblogs.com/fei33423/p/8184098.html 感谢分享!

阅读全文

与nginxphp错误日志相关的资料

热点内容
单片机仿真器图片大全 浏览:953
mac压缩pdf大小 浏览:706
苹果新手机激活无法连接服务器地址 浏览:330
dvd遥控编程器 浏览:926
阿里云的云服务器在哪里下载 浏览:442
linuxphpcpu 浏览:532
单片机交通信号灯课程设计 浏览:384
linuxusb识别u盘 浏览:391
找对象app名称是什么 浏览:162
为什么选择童程童美学习编程 浏览:742
db2runstats命令 浏览:849
matlab怎么用遗传算法 浏览:809
程序员喜欢黑色背景 浏览:590
音频信号需要什么样的单片机 浏览:676
剪力墙墙柱箍筋是否需要加密 浏览:165
如何查看服务器上端口是否打开 浏览:298
目前流行编程语言 浏览:458
腾讯云服务器免流吗 浏览:850
c命令行解析 浏览:788
解压转移注意力最好的办法 浏览:916