在配置和调试nginx.conf中的location时,有一个非常有用的模块可以安装,
那就是echo-nginx-module,它可以在location中直接使用类似linux shell命令echo一样的指令,帮助验证location配置是否符合预期。我在配置location的过程中,就遇到过奇怪的问题,最后发现因为代码走错了location。

  • 下载nginx源码

    mkdir nginx_1_12_1
    git clone https://github.com/nginx/nginx/tree/branches/stable-1.12
  • 使用默认选项配置,编译,安装nginx

    ./configure
    sudo make
    sudo make install

    一切正常的话,会在/usr/local/nginx目录下安装好nginx.
    使用下面命令启动nginx.

    cd /usr/local/nginx/sbin
    ./nginx

    如果启动正常的话,可以查看到nginx启动了两个进程,master和worker进程。

    root@rex-VirtualBox:/usr/local/nginx/sbin# ps ax|grep "nginx"
    6347 ?        Ss     0:00 nginx: master process ./nginx
    6498 ?        S      0:00 nginx: worker process
    6803 pts/2    S+     0:00 grep --color=auto nginx
    
  • 打开浏览器,输入127.0.0.1,可以看到nginx的欢迎页面。

    这里写图片描述

  • 下载echo-nginx-module模块,这里我把它作为我nginx仓库的一个子模块来管理。

    cd nginx_1_12_1
    git submodule add git@github.com:openresty/echo-nginx-module.git
  • 重新配置nginx,把echo-nginx-module模块编译进nginx可执行文件

    sudo ./configure --add-module=echo-nginx-module
    sudo make
    sudo make install
  • 修改/usr/local/nginx/conf/nginx.conf, 在server块中增加下面语句

        location /hello {                                                                                                           
            echo -n "hello, ";
            echo "world!";
        }
        location /timed_hello {
            echo_reset_timer;
            echo_sleep 1.4;
            echo hello world;
            echo "'hello world' takes about $echo_timer_elapsed sec.";
            echo_reset_timer;
            echo hiya igor;
            echo "'hiya igor' takes about $echo_timer_elapsed sec.";
        }   
    
  • 重新加载nginx的配置运行

    cd /usr/local/nginx/sbin
    nginx -s reload
  • 测试echo-nginx-module

    rex@rex-VirtualBox:~/work/nginx_1_12_1$ curl  http://127.0.0.1/hello
    hello, world!
    rex@rex-VirtualBox:~/work/nginx_1_12_1$ curl  http://127.0.0.1/timed_hello
    hello world
    'hello world' takes about 1.402 sec.
    hiya igor
    'hiya igor' takes about 0.000 sec.

    从这个简单的demo中,就有两个echo-nginx-module的使用场景,

    • 使用echo指令,可以直观地查看到调用不同的URL及对应的location
    • 可以利用echo_reset_timer指令和变量echo_timer_elapsed,方便地进行计时,这样就可以对某些命令对执行时间进行衡量。

    当然,我相信echo-nginx-module有更多的用途,具体执行的说明可以参考官方网站。

Logo

更多推荐