nginx echo 输出 检查配置正确性

原文地址:http://www.360doc.com/content/13/0322/11/4672379_273186975.shtml


1.nginx 的echo模块的介绍

     echo模块式国人编写的nginx的第三方模块,下载官方nginx后需要再下载echo模块,并且配合nginx编译安装,安装此模块后可以在nginx的url访问中可以通过echo命令输出字符到用户的浏览器中,可用于检测nginx的可访问性,检测nginx的配置的正确性(这是当前我需要用的nginx的主要功能),可用于打印你希望了解的http代理相关http参数,总之在调试配置nginx环节,echo命令非常有用。
详情见:http://www.oschina.net/question/12_45735

2.nginx的echo安装
     安装第三方模块的时候不能使用rpm以及yum方式安装nginx,如果以前用以上方式安装过nginx的话,请先卸载掉。
     2.1 我们下载nginx的源码包(http://nginx.org/download/nginx-1.2.7.tar.gz)以及echo模块的源码包(https://github.com/agentzh/echo-nginx-module/tags)选择最新版本
   2.2 分别加压nginx源码包以及echo模块源码包,例如此处我解压的路径为:nginx的路径:/opt/nginx-source ;echo模块的路径:/opt/nginx-echo-source
   2.3 命令cd进入nginx源码路径,此处:cd /opt/nginx-source ;
    2.4 配置nginx编译文件,执行编译配置命令:./configure --prefix=/opt/nginx --add-module=/opt/nginx-echo-source
配置时屏幕会输出日志,检查配置过程中是否有error,如果有请自行修复,一般是缺少类库,缺少啥类库,就下载安装什么类库
   2.5 编译nginx,在nginx源码目录中执行命令: make
   2.6 编译安装nginx,在nginx 源码目录中执行命令:make install
 
3.nginx的echo使用测试
    配置nginx的配置文件
 server {
        listen       8083;
        server_name  _;
        access_log      /var/log/nginx/cn-camm.server.access.log main;

        set $tag "0";

                if ( $host !~ ^appbuilder.vicp.cc$ ){
                         set $tag "$tag,1";
                }

                 if ( $host !~ ^localhost$ ){
                        set $tag "$tag,2";
                }
        if ( $tag ~ ^0,1,2$ ){
                        return 403;
                }


        location / {




                echo "can act?";
                if ($host != '192.168.1.250' ) {
                        echo "not equal 250";
                #       return 403;
                }

                 echo "asdfasdf";

#               proxy_pass      http://cncamm;
#                proxy_set_header Host $host:8083;
        }

   }


配置时注意
1.echo命令只能放在url请求中,如果放在url请求外,会报错 如果报[emerg]: "echo" directive is not allowed here in  ,请检查echo放置的位置
2.一次url请求,echo 只能打印一行,如果有逻辑判断,且判断成功,则echo会执行判断成功里边的echo,否则执行最后一句echo(此处不一定正确,在测试中发现是此现象)
3.如果echo后边有配置return 或者配置 proxy_pass,则echo的输出会被覆盖,即浏览器无法看到echo的内容

4.echo的内容不是写在nginx的配置文件中,而是输出到浏览器中,所以echo的打印字符的查看请在浏览器中查看


我自己试的时候,最后有一句 content_by_lua "ngx.exit(200)", 在这之前的 echo 语句一直不执行,后来我在echo外面加了一个 if 语句,就能执行了,把 content_by_lua "ngx.exit(200)" 语句删掉后,echo 也能正确执行。


来源:http://blog.csdn.net/tripple_x/article/details/46333251

展开阅读全文

没有更多推荐了,返回首页