在配置和调试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有更多的用途,具体执行的说明可以参考官方网站。