Nginx 모듈 의 echo

4693 단어
nginx 선택
Nginx 성능 왕:
  • epoll 지원, 대규모 고 병발
  • 리 눅 스 의 sendfile 시스템 호출 을 지원 하여 하 드 디스크 의 데 이 터 를 네트워크 에 효율적으로 전송 할 수 있 습 니 다.

  • Nginx 를 선택 한 이유:
  • 더 빠르다: 어떻게 더 빨리 하 는 지 이해 해 야 한다
  • 높 은 확장 성: 서로 다른 모듈, 대량의 제3자 모듈, 그리고 모듈 간 에 좋 은 격 리 성 을 가진다.
  • 높 은 신뢰성: 핵심 프레임 코드 의 우수한 디자인, 모듈 디자인 의 단순 성에 서 나온다.master - worker 모드 가 안정 적 입 니 다.
  • 저 메모리 소모: 10000 개의 비활성 http keep - alive 연결 에서 2.5MB 메모리 소모 까지!정교 한 데이터 구조 통제, c 언어 에센스 의 표현;
  • 단기 지원 10 만 이상 의 병렬 연결: 상한 선 은 메모리
  • 에 만 달 려 있다.
  • 열 배치, 이렇게 매 끄 러 운 reload
  • 를 본 적 이 없다.
  • BSD 허가 협의의 자유 성
  • echo 모듈 - debug 이기
    배경
    github 오픈 소스, openresty 작성 자https://github.com/openresty/echo-nginx-module
    실례
    위치 테스트:
    location /test {
            echo "test here";
        }
    
    curl "http://testecho.qidian.com/test"
    백 엔 드 요청 시간 계산:
    location /timed_hello {
         #      
         echo_reset_timer;
         echo hello world;
         #   2.5s
         echo_sleep   2.5;
         #       
         echo "'hello world' takes about $echo_timer_elapsed sec.";
         echo_reset_timer;
         echo hiya igor;
         echo_sleep 1;
         echo "'hiya igor' takes about $echo_timer_elapsed sec.";
       }
    
    
    curl "http://testecho.qidian.com/timed_hello"
    요청 에이전트:
    location /echo_proxy {
           #         body
           echo_before_body hello;
           echo_before_body world;
           #   proxy pass   
           proxy_pass $scheme://10.247.165.120:10090/monitor/monitor.html;
           #      client  body
           echo_after_body hiya;
           echo_after_body igor;
       }
    
    
    curl "http://testecho.qidian.com/echo_proxy"
    서브 요청 시작:
    #    1,    epoll   
    location /main1 {
        echo_reset_timer;
        echo "start takes about $echo_timer_elapsed sec.";
    
        # subrequests in parallel,     
        echo_location_async /sub1;
        echo_location_async /sub2;
        #      0s      2s
        echo "took $echo_timer_elapsed sec for total.";
    }
    #    2,         
    location /main2 {
        echo_reset_timer;
        echo "start takes about $echo_timer_elapsed sec.";
    
        #        
        echo_location /sub1;
        echo_location /sub2;
        #      3s     3s
        echo "took $echo_timer_elapsed sec for total.";
    }
    #    1
    location /sub1 {
        echo_sleep 2;
        echo hello;
    }
    #    2
    location /sub2 {
        echo_sleep 1;
        echo world;
    }
    
    curl "http://testecho.qidian.com/main1" curl "http://testecho.qidian.com/main2"
    여러 개의 키 요청 을 동시에 시작 합 니 다:
    location /multi {
        #           
        echo_subrequest_async POST '/tools' -q 'foo=Foo' -b 'hi';
        echo_subrequest_async PUT '/tools' -q 'bar=Bar' -b 'hello';
    }
    location /tools {
        #         nginx     
        echo "querystring: $query_string";
        echo "method: $echo_request_method";
        echo "body: $echo_request_body";
        echo "content length: $http_content_length";
        echo '///';
    }
    
    curl "http://testecho.qidian.com/multi"
    정적 자원 병합:
    #    , combo       
    location /merge {
           default_type 'text/javascript';
           echo_foreach_split '&' $query_string;
               echo "/* JS File $echo_it */";
               echo_location_async $echo_it;
               echo;
           echo_end;
       }
    
    curl "http://testecho.qidian.com/merge?/foo.js&/test.js"
    if: nginx 의 if 문법 지원 이 너무 떨 어 지기 때문에 debug 는 설정 할 때 매우 필요 합 니 다.
      location ^~ /if {
           set $res miss;
           if ($arg_val ~* '^a') {
               set $res hit;
               echo $res;
           }
           echo $res;
       }
    
    curl "http://testecho.qidian.com/if?val=abc" curl "http://testecho.qidian.com/if?val=ddd"
    그 중에서 관련 된 nginx 모듈 의 개발 개념
    subrequest 와 upstream
    upstream: 백 엔 드 서 비 스 를 방문 하 는 능력 을 제공 합 니 다.더욱 기본 적 인 동시에 nginx 우수 디자인 중의 epoll 모델 을 충분히 이용 하여 비동기 와 막힘 이 없 으 며 통신 방식 이 제한 되 지 않 고 통신 프로 토 콜 이 제한 되 지 않 습 니 다.흔히 볼 수 있 는 것 은 udp 와 tcp 입 니 다. 이 동시에 바 이 너 리 의 일부 대학교 포장 협의 에 협조 하면 nginx 와 백 엔 드 서 비 스 를 빈 틈 없 이 연결 할 수 있 습 니 다.
    subrequest: 서브 요청 은 제3자 의 서 비 스 를 대상 으로 합 니 다. 예 를 들 어 귀하 의 사이트 네 비게 이 션 서 비 스 는 제3자 서비스, 예 를 들 어 시 나 닷 컴 날씨의 귀환 결과 에 의존 하면 서브 요청 방식 을 사용 할 수 있 습 니 다.그러나 제3자 의 서비스 협 의 는 http 에 국한 되 고 그 밑바닥 도 upstream 에 의 해 이 루어 진다.하지만 이에 비해 개념 과 출발점 은 다르다.
    epoll
    몇 가지 명사: IO 다 중 재 활용, 고성능 네트워크 모델, 동기 비동기, 차단 비 차단, 협 정 과 병발.추천 글:http://blog.csdn.net/tianmohust/article/details/6677985

    좋은 웹페이지 즐겨찾기