前言

Nginx是一个优秀的服务器框架,但是有时候在我们进行配置的时候,写了很多的规则,这时候我们也不清楚这些规则写对了没有,Nginx按照怎样的流程进行执行的,这时候我们就需要对Nginx进行调试和输出,来看Nginx是否按照预期的流程进行执行。

Nginx-debug

Nginx自带了debug模式,不过需要在安装配置的时候加上

--with-debug

好多用户可能初次安装nginx的时候,没有加--with-debug参数,这时候,很多用户就会顾虑:如果我重新./configure编译,那我之前安装的nginx的配置文件等等是不是就没了。答案是:不会的,nginx只会进行增量编译。

./configure --prefix=/usr/local/nginx --with-debug

然后在你的配置里这样写:

server{   
    server_name http://example.com;   
    error_log /path/to/errorlog/error.log debug;
    error_log /path/to/errorlog/error.log debug_http;
}

总得来说,nginx记录日志信息分两个级别,第一个级别的取值为如下之一:

  • stderr
  • emerg
  • alert
  • crit
  • error
  • warn
  • notice
  • info
  • debug

这些值是互斥的,也就是说只能取其中之一。
如果我们指定第一个级别为debug,那么nginx还允许我们指定第二级别:

  • debug_core
  • debug_alloc
  • debug_mutex
  • debug_event
  • debug_http
  • debug_mail
  • debug_mysql

第二级别的指定是多选的,因此可以有多条关于第二级别的配置项目:

error_log  logs/error.log debug_http;
error_log  logs/error.log debug_core;

注意:在且仅在第一个级别为”debug”时才可以有第二级别的配置,其它第一级别情况下指定第二级别将无法启动nginx

echo-nginx-module

  • 模块简介

echo模块式国人编写的nginx的第三方模块,下载官方nginx后需要再下载echo模块,并且配合nginx编译安装,安装此模块后可以在nginx的url访问中可以通过echo命令输出字符到用户的浏览器中,可用于检测nginx的可访问性,检测nginx的配置的正确性(这是当前我需要用的nginx的主要功能),可用于打印你希望了解的http代理相关http参数,总之在调试配置nginx环节,echo命令非常有用。

  • 安装方法

先去下载Nginx和echo-nginx-module的源码包,然后进行解压,编译。
下载地址分别为

http://nginx.org/download/
https://github.com/openresty/echo-nginx-module/tags
配置的时候使用`add-module`指向`echo-nginx-module`的解压路径目录即可。
./configure --prefix=/usr/local/nginx --add-module=/usr/local/echo-nginx-module
make && make install
  • 使用方法

location / {
    echo "hello world!"
}

注意点:

1. echo命令只能放在url请求中,如果放在url请求外,会报错
2. 一次url请求,echo 只能打印一行
3. 如果echo后边有配置`return `或者配置 `proxy_pass`或者`rewrite`,则echo的输出会
   被覆盖,即浏览器无法看到echo的内容
4. echo的内容不是写在nginx的配置文件中,而是输出到浏览器中,所以echo的打印字符的查看
   请在浏览器中查看,或者使用curl查看

更多资料请参考 https://github.com/openresty/echo-nginx-module