Nginx入门(二)Nginx echo 模块的使用

Nginx入门(二)Nginx echo 模块的使用

原本是想在第二篇文章就介绍nginx配置反向代理服务器。但是发现了echo模块这样的神器,对于之后学习nginx配置代理服务器会有很大帮助,所以先学习一下echo模块。
echo 模块是在nginx程序上扩展了echo输出字符的功能, 对于调试很方便, 可以说是学习nginx的必备神器。项目地址:https://github.com/openresty/echo-nginx-module

安装

本人在安装 echo 模块的时候也是遇到各种坑。如果你的电脑不是Mac, 可以参考Nginx动态模块安装 结合echo 模块 安装指南
如果你用的是mac。那么就用brew吧,一条命令安装。可以用一下命令。

brew install nginx-full --with-echo-module

具体可以参考这个链接(ttps://github.com/Homebrew/homebrew-nginx)
如果你之前安装过Nginx,用brew安装可能会遇到冲突,可以用下面命令解决冲突。

brew unlink nginx

使用

大家可以通过下面的链接下载该配置文件。后面echo模块的测试用例根据该文件来讲解。如果你是mac电脑,并且按照之前步骤安装好nginx,那么把下载下来的配置文件放在/usr/local/etc/nginx/servers目录下面。在本地电脑配置host

127.0.0.1 testecho.baidu.com

日志

先说一下怎么看nginx 日志。电脑安装nginx后并没创建nginx日志目录文件。需要根据你的配置文件,手动创建。 我在/usr/local/etc/nginx/目录下创建日志目录logs/nginx,所有访问testecho.qidian.com的访问日志和错误日志都会自动打印到该目录下。

下面简单介绍一下几个常用的命令

echo - 输出字符

  • 语法: echo [options] <string>...
输出全局变量$remote_addr
 location /test {
     echo $remote_addr;
     echo $args;
 }

curl testecho.baidu.com:8081/test?123
输出结果为

127.0.0.1
123

这样可以方便查看第一篇文章中介绍的全局变量的值,是不是很方便?

echo_before_body, echo_after_body - 页面前、后插入内容

  • 语法: echo_before_body [options] [argument]...
# 反向代理添加前置、后置内容
location = /api/proxy_before_after {
    echo_before_body hello before;
    proxy_pass http://127.0.0.1:8081/test;
    echo_after_body world after;
}

curl testecho.baidu.com:8081/api/proxy_before_after?123
输出结果为:

hello before
127.0.0.1
123
world after

echo_sleep - 请求等待

  • 语法: echo_sleep <seconds>
    该方法可以使得请求等待指定秒数。该方法不会阻塞整个nginx进程。
    curl testecho.baidu.com:8081/api/sleep
    输出结果为
 1
 2

echo_location_async, echo_location - 请求指定路径

  • 语法: echo_location_async <location> [<url_args>]

异步跟同步的区别是:

  1. 异步会并行的去请求
  2. 同步等待当前请求结束才会往下执行

下面这个整个时间为2s, 因为所有路径中最大耗时是2s:

location /main1 {
     echo_reset_timer;
     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;
 }

curl testecho.baidu.com:8081/main1 输出结果为

hello
world
took 0.000 sec for total.

之所以输出0s因为main1不会去等待两个子请求sub1和sub2。所以非常快就结束了。
如果将上面main1中的echo_location_async 改成echo_location。
curl testecho.baidu.com:8081/main2 输出结果为

hello
world
took 3.002 sec for total.

可以通过第二个参数传参数给子请求 querystring: echo_location_async /sub 'foo=Foo&bar=Bar';

echo_foreach_split - 分隔循环

  • 语法: echo_foreach_split <delimiter> <string>
    该方法可以将请求中参数根据分隔符分离出来。
   location /loop {
     echo_foreach_split ',' $arg_list;
       echo "item: $echo_it";
     echo_end;
   }

curl testecho.baidu.com:8081/loop?list=cat,dog,mouse 输出结果为

item: cat
item: dog
item: mouse

if语句的调试

通过arg_val可以获取到请求参数,方便调试if 语句

   location ^~ /if {
       set $res miss;
       if ($arg_val ~* '^a') {
           set $res hit;
           echo $res;
       }
       echo $res;
   }

访问 curl testecho.baidu.com:8081/if?val=abc
输出

hit

访问 curl testecho.baidu.com:8081/if?val=bcd

miss

感谢阅读,下一章会介绍nginx配置反向代理服务器🙂
面试资料推荐

https://zfau4tzxp5.feishu.cn/docx/ByM0dxtWoo87QtxnWtTcG0kCnpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 80,858评论 21 356
  • 前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)...
    GarfieldEr007阅读 5,280评论 4 22
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,605评论 24 1,002
  • 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单...
    rosekissyou阅读 10,168评论 5 124