nginx echo 高級語法 echo_location【轉】

nginx echo模塊是在nginx程序上擴展了echo輸出字符的功能, 對於調試很方便, 項目地址: https://github.com/openresty/echo-nginx-module

安裝

目前支持nginx-1.11.2, 高版本可能安裝失敗, 我裝1.11.13失敗了, 更多支持nginx的版本見: https://github.com/openresty/echo-nginx-module#compatibility

去 release 下載最新的安裝包, 並解壓.

在配置nginx時用: ./configure --add-module=/你的解壓路徑, 並編譯安裝, 如果是重新編譯安裝可參考: 重新編譯安裝方法

使用

只是研究了一些常用的

echo - 輸出字符

  • 語法: echo [options] <string>...
  • 默認值: no
  • # 簡單的hello, world!
  • server {
  • location = /api/hello {
  • echo "hello, world!";
  • }
  • }

默認echo會自動換行, 不需要換行可以: echo -n xxx;;

echo_before_body, echo_after_body - 頁面前、後插入內容

  • 語法: echo_before_body [options] [argument]...
  • 默認值: no
  • server {
  • # 簡單的輸出
  • location = /api/hello {
  • echo_before_body echo_before_body;
  • echo "hello, world!";
  • echo_after_body echo_after_body;
  • }
  • # 常見於代理頁面前、後插內容
  • location = /api/proxy_before_after {
  • echo_before_body echo_before_body;
  • echo_before_body echo_before_body;
  • proxy_pass http://127.0.0.1;
  • echo_after_body echo_after_body;
  • echo_after_body echo_after_body;
  • }
  • }

echo_sleep - 請求等待

  • 語法: echo_sleep <seconds>
  • 默認值: no
  • server {
  • # 簡單的輸出
  • location = /api/sleep {
  • echo 1;
  • # 等待1秒
  • echo_sleep 1;
  • echo 2;
  • }
  • }

echo_location_async, echo_location - 請求指定路徑

  • 語法: echo_location_async <location> [<url_args>]
  • 默認值: no
  • location /main {
  • # 異步調用/sub
  • echo_location_async /sub;
  • echo world;
  • }
  • location /main2 {
  • # 同步調用/sub
  • echo_location_async /sub;
  • echo world;
  • }
  • location /sub {
  • echo hello;
  • }

異步跟同步的區別是:

  1. 異步會並行的去請求
  2. 同步等待當前請求結束纔會往下執行

下面這個整個時間爲2s, 因爲新路徑最大是2s:

  • location /main {
  • echo_location_async /sub1;
  • echo_location_async /sub2;
  • echo "took $echo_timer_elapsed sec for total.";
  • }
  • location /sub1 {
  • echo_sleep 2;
  • }
  • location /sub2 {
  • echo_sleep 1;
  • }

下面這個整個時間爲3s, 因爲需要等待/sub1完成才進入/sub2:

  • location /main {
  • echo_location /sub1;
  • echo_location /sub2;
  • echo "took $echo_timer_elapsed sec for total.";
  • }
  • location /sub1 {
  • echo_sleep 2;
  • }
  • location /sub2 {
  • echo_sleep 1;
  • }

可以通過第二個參數傳querystringecho_location_async /sub 'foo=Foo&bar=Bar';

echo_foreach_split - 分隔循環

  • 語法: echo_foreach_split <delimiter> <string>
  • location /split {
  • echo_foreach_split ',' $arg_list;
  • echo "item: $echo_it";
  • echo_end;
  • }

上面配置當訪問: /split?list=cat,dog,mouse 時會輸出:

  • item: cat
  • item: dog
  • item: mouse

$arg_list是對應$args.list

那麼配置全echo_location_async可以做成nginx-combo服務了, 如:

  • location = /api/combo {
  • echo_foreach_split ',' $query_string;
  • echo "/* combo: $echo_it */";
  • echo_location_async $echo_it;
  • echo;
  • echo_end;
  • }

訪問: /api/combo?/a.js,/b.js, 需要注意的是文件的路徑必須以/開始, 因爲匹配的location

"真的nginx-combo"服務請看: nginx-http-concat


其他變量請去官網查看~

link

本文鏈接:https://xuexb.com/post/nginx-echo-module.html

 

完全引用自

學習使用nginx echo模塊==》https://xuexb.com/post/nginx-echo-module.html?utm_source=tuicool&utm_medium=referral

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章