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中配置 没有则增加
error_log = log/error_log
2.修改php.ini中配置,没有则增加
error_log = "/usr/local/lnmp/php/var/log/error_log"
error_reporting=E_ALL&~E_NOTICE
3.重启php-fpm,
当PHP执行错误时就能看到错误日志在"/usr/local/lnmp/php/var/log/error_log"中了
请注意:
1. php-fpm.conf 中的php_admin_value[error_log] 参数 会覆盖php.ini中的 error_log 参数
所以确保你在phpinfo()中看到的最终error_log文件具有可写权限并且没有设置php_admin_value[error_log] 参数,否则错误日志会输出到php-fpm的错误日志里。
2.找不到php.ini位置,使用php的phpinfo()结果查看
3.如何修改PHP错误日志不输出到页面或屏幕上
修改php.ini
log_errors = on //记录错误信息(保存到日志文件中)
error_reporting = E_ALL //捕获所有错误信息
error_log = //设置日志文件名
ini_set("error_reporting",E_ALL); //这个值好像是个PHP的常量
ini_set("error_log","<日志文件名>")
ini_set("log_errors",1);
在PHP 5.3.8及之前的版本中,通过FastCGI运行的PHP,在用户访问时出现错误,会首先写入到PHP的errorlog中
如果PHP的errorlog无法写入,则会将错误内容返回给FastCGI接口,然后nginx在收到FastCGI的错误返回后记录到了nginx的errorlog中
在PHP 5.3.9及之后的版本中,出现错误后PHP只尝试写入PHP的errorlog中,如果失败则不会再返回到FastCGI了,错误日志会输出到php-fpm的错误日志里。
所以如果想把php错误日志输出到nginx错误日志,需要使用php5.3.8之前的版本,并且配置文件中php的error_log对于php worker进程不可写。
本节内容:
nginx下部署python
首先,确定python的头文件(/usr/include/python2.5)
不存在的话,请安装:
下面介绍详细的配置步骤。
1,nginx安装
$ make && make install
2,mod_wsgi安装
$ sudo python setup.py --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf --sbin-path=/usr/local/nginx/sbin
修改nginx.conf文件
#user nobody;
worker_processes 4;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
use epoll; #linux2.6+
worker_connections 2048;
}
env HOME;
env PYTHONPATH=/data/应用目录;
env PYTHON_EGG_CACHE=/tmp;
http {
include conf/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip off;
wsgi_python_optimize 2;
wsgi_python_executable /usr/bin/python;
#wsgi_python_home /usr;
#wsgi_enable_subinterpreters on;
server {
listen 80;
server_name localhost;
include conf/wsgi_vars;
#wsgi_middleware wsgiref.validate validator;
#wsgi_middleware paste.lint;
location / {
root /data/boss_admin/;
}
location /do {
#client_body_buffer_size 50;
wsgi_pass /data/应用目录/nginx.py;
wsgi_pass_authorization off;
wsgi_script_reloading on;
wsgi_use_main_interpreter on;
}
}
}
本节内容:
nginx常用参数、nginx信号控制。
1,nginx程序的运行参数
Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。
Nginx 的参数包括:
-t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否有语法错误。
-v:显示 nginx 版本号。
-V:显示 nginx 的版本号以及编译环境信息以及编译时的参数。
例如,要测试某个配置文件是否书写正确,命令:
2,通过信号对 Nginx 进行控制
Nginx 支持下表中的信号:
TERM, INT 快速关闭程序,中止当前正在处理的请求
QUIT 处理完当前请求后,关闭程序
HUP 重新加载配置,并开启新的工作进程,关闭就的进程,此操作不会中断请求
USR1 重新打开日志文件,用于切换日志,例如每天生成一个新的日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
有两种方式来通过这些信号去控制 Nginx:
方式1,通过 logs 目录下的 nginx.pid 查看当前运行的 Nginx 的进程 ID,通过 kill – XXX <pid> 来控制 Nginx,其中 XXX 就是上表中列出的信号名。
方式2,针对系统中的Nginx进程,可以通过 killall 命令来完成,例如,运行 killall – s HUP nginx 来让 Nginx 重新加载配置。