共计 2774 个字符,预计需要花费 7 分钟才能阅读完成。
Nginx-echo 可以在 Nginx 中用来输出一些信息,是在测试排错过程中一个比较好的工具。它也可以做到把来自不同链接地址的信息进行一个汇总输出。总之能用起来可以给开发人员带来挺大帮助的。下面看看我们如何去安装使用它。
1. 下载 Nginx-echo
cd /usr/local/nginx-1.12.2/
wget https://github.com/openresty/echo-nginx-module/archive/v0.60.tar.gz
2. 解压下载来的文件
tar zxvf v0.60.tar.gz
3. 查看一下之前安装的模块
/usr/local/nginx/sbin/nginx -V
4. 进入以前下载过来的 Nginx 安装包目录下配置
cd /usr/local/nginx-1.12.2/
./configure –add-module=/usr/local/nginx-1.12.2/echo-nginx-module-0.61 –add-module=/usr/local/nginx-1.12.2/ngx_image_thumb-master
5. 编译安装,如果是升级可以使用 make upgrade
make && make install
6. 使用 echo,以下内容为官方的案例,加了一些自己的理解
# 简单输出,看别人日志地址是 /hello,我这里测试后不知道为什么一直访问不到,所以加上 /
location /hello/ {
echo “hello, world!”;
}
#$echo_timer_elapsed 计时,通过 echo_reset_timer 执行后开始计算
location /timed_hello/ {
echo_reset_timer;
echo hello world;
echo “‘hello world’ takes about $echo_timer_elapsed sec.”;
echo hiya igor;
echo “‘hiya igor’ takes about $echo_timer_elapsed sec.”;
}
#echo_sleep 可以等待 2.5s 后再输出
location /echo_with_sleep/ {
echo hello;
echo_flush; # ensure the client can see previous output immediately
echo_sleep 2.5; # in sec
echo world;
}
# 在 proxy_pass 这个地址获得的源代码前后加上指定的内容
location /echo/ {
echo_before_body hello;
echo_before_body world;
proxy_pass $scheme://127.0.0.1:$server_port$request_uri/more;
echo_after_body hiya;
echo_after_body igor;
}
#echo_location_async 可以异步去访问其他地址,不影响当前函数执行,$echo_timer_elapsed 最后输出的值为 0
location /main/ {
echo_reset_timer;
# subrequests in parallel
echo_location_async /sub1/;
echo_location_async /sub2/;
echo “took $echo_timer_elapsed sec for total.”;
}
location /sub1/ {
echo_sleep 2;
echo hello;
}
location /sub2/ {
echo_sleep 1;
echo world;
}
# 同步执行
location /main/ {
echo_reset_timer;
# subrequests in series (chained by CPS)
echo_location /sub1/;
echo_location /sub2/;
echo “took $echo_timer_elapsed sec for total.”;
}
location /sub1/ {
echo_sleep 2;
echo hello;
}
location /sub2/ {
echo_sleep 1;
echo world;
}
#echo_duplicate 3 “–” 意思是重复 3 次输出 ”–“
location /dup/ {
echo_duplicate 3 “–“;
echo_duplicate 1 ” END “;
echo_duplicate 3 “–“;
echo;
}
# 输出客户端请求的信息
location /echoback/ {
echo_duplicate 1 $echo_client_request_headers;
echo “\r”;
echo_read_request_body;
echo_request_body;
}
# 输出 querystring、method、body、content 等信息
location /multi {
echo_subrequest_async POST ‘/sub’ -q ‘foo=Foo’ -b ‘hi’;
echo_subrequest_async PUT ‘/sub’ -q ‘bar=Bar’ -b ‘hello’;
}
location /sub {
echo “querystring: $query_string”;
echo “method: $echo_request_method”;
echo “body: $echo_request_body”;
echo “content length: $http_content_length”;
echo ‘///’;
}
# 可以将多个 JS 合并到一个 URL 地址输出
# GET /merge?/foo.js&/bar/blah.js&/yui/baz.js will merge the .js resources together
location /merge {
default_type ‘text/javascript’;
echo_foreach_split ‘&’ $query_string;
echo “/* JS File $echo_it */”;
echo_location_async $echo_it;
echo;
echo_end;
}
# 如果地址为 /if/?val=abcd,则输出 hit
# 参数名为 val,参数值以 a 开头
location /if/ {
set $res miss;
if ($arg_val ~* ‘^a’) {
set $res hit;
echo $res;
}
echo $res;
}