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;
- }
異步跟同步的區別是:
- 異步會並行的去請求
- 同步等待當前請求結束才會往下執行
下面這個整個時間為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;
- }
可以通過第二個參數傳querystring
: echo_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