nginx 에서 perl 모듈 사용

5857 단어 nginxperl
만약 에 대부분의 내용 이 정태 적 인 사이트 라면 극소수 만 동태 적 으로 표시 해 야 한다. 공교롭게도 perl 지식 을 조금 더 알 게 된다 면 nginx + perl 의 결합 은 문 제 를 잘 해결 할 수 있 을 것 이다.nginx 가 perl 스 크 립 트 를 지원 하려 면 nginx 를 컴 파일 할 때 다음 과 같은 인자 가 필요 합 니 다.
 ./configure --with-http_perl_module

make 에서 다음 과 같은 오류 가 발생 하면: Can 't locate ExtUtils / Embed. pm in @ INC(@INC contains: /usr/lib/perl5/5.10.0/i386-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/local/lib/perl5/site_perl/5.10.0/i386-linux-thread-multi /usr/local/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/vendor_perl /usr/local/lib/perl5/site_perl .)
당신 의 기계 에 perl - devel perl - ExtUtils - Embed 를 설치 해 야 할 수도 있 습 니 다. centos 시스템 에 대해 서 는 직접 yum 을 사용 하여 해결 해 야 합 니 다. 예 를 들 어:
 yum -y install perl-devel perl-ExtUtils-Embed

특히 주의해 야 할 것 은 blocking 의 IO 나 네트워크 요청 (예 를 들 어 DNS 조회) 이 있어 서 는 안 된다 는 것 입 니 다. 그러면 nginx 의 성능 에 심각 한 영향 을 줄 수 있 습 니 다. 꼭 필요 하 다 면 참고 하 시기 바 랍 니 다.http://zzzcpan.github.com/nginx-perl/증강 판 의 제3자 perl 모듈
nginx 에서 perl 을 사용 하 는 방법 은 두 가지 가 있 습 니 다. 하 나 는 설정 파일 에 직접 쓰 는 것 이 고 다른 하 나 는 perl 스 크 립 트 를 외부 파일 에 쓰 는 것 입 니 다.   Nginx 프로필 은 Perl 을 직접 조작 합 니 다. perl 과 perl set 는 첫 번 째 방법 입 니 다. 쓸 하위 함 수 를 Nginx 파일 에 직접 씁 니 다. 문법 은:   perl  Nginx 의 localion 에 서 는 외부 파일 로 파일 을 표시 하지 않 으 려 면 사용 할 수 있 습 니 다.
perl '
        sub {
            $r = shift;
            #         
            return 404; # HTTP     
        }   
';

perl set 은 Nginx 의 변 수 를 설정 합 니 다.
perl_set $value '      # value   nginx          perl       
    sub {
        my $r = shift;
        return "xxx";#          $value  
         }   
';

다음은 두 번 째 용법 을 소개 한다.
nginx 의 루트 디 렉 터 리 가 / usr / local / nginx 라 고 가정 하면 perl 스 크 립 트 에 저 장 된 디 렉 터 리 는 nginx 의 루트 디 렉 터 리 에 있 는 perl / lib 에서 스 크 립 트 이름 은 test. pm 이 고 nginx 설정 은:
#  http   
	perl_modules  perl/lib;
	perl_require  test.pm;
	
#  server   	
	location /user/ {
		perl pkg_name::process;
	}

위 설정 은 모든 것 을http://servername/user/다음 요청 은 test. pm 스 크 립 트 에서 정의 하 는 process 방법 으로 처리 합 니 다.
test. pm 스 크 립 트 의 내용 은 다음 과 같 습 니 다.
package pkg_name;

use Time::Local;
use nginx;

sub process {
    my $r = shift;
	
    $r->send_http_header('text/html; charset=utf-8');
    my @arr = split('/', $r->uri);
    my $username = @arr[2];
   
    if (!$username || ($username eq "")) {
		$username = "Anonymous";
    }
    
    $r->print('Hello, You name is : ' . $username . ''); 
	$r->rflush();
	return;
}

1;
__END__

방문 하 다http://servername/user/kuerant당신 은 홈 페이지 에서 볼 수 있 을 것 입 니 다.
Hello, You name is : kuerant

실전: 우 리 는 이 걸 로 내 사 이 트 를 걸 러 내 고 15 초 과정 치 를 설정 합 니 다. 만약 에 열 린 t 뒤에 추 가 된 시간 이 15 초 를 넘 으 면 403 래 deny 입 니 다. 그렇지 않 으 면 정상적으로 웹 페이지 를 엽 니 다.
http://localhost/?t=1306138966

다음은 nginx 의 메 인 설정 입 니 다. 프로그램 자체 가 필요 합 니 다.
perl_set $time_check '
     sub {
         my $r = shift;
         my $args = $r->args;
         if ($args =~ /t=(\d+)/){
             my $time = $1;
             if ( abs( $time - time() ) < 15 ){
                 return 0;
             }
         }
         return 1;
     }
 ';
 keepalive_timeout  65;
 server {
     listen       8080;
     server_name  _;
     root   /usr/local/nginx/html;
     if ($time_check = 1){
         return 403;
     }
     location / {
         # perl  hello::handler;
     }

 
또한: use nginx 를 사용 할 때 다음 과 같은 대상 이 호출 될 수 있 습 니 다. 위의 shift 한 대상 이 $r 에 있 는 것 을 볼 수 있 고 $r 로 그 대상 을 호출 할 수 있 습 니 다.
$r->args –       .
$r->discard_request_body –        Nginx    request   body    .
$r->filename –             
$r->has_request_body(handler) –         ,  0;          ,    handler             1;         ,nginx          .   :handler          。  :
package hello;

use nginx;

sub handler {
    my $r = shift;

    if ($r->request_method ne "POST") {
        return DECLINED;
    }

    if ($r->has_request_body(\&post)) {
        return OK;
    }

    return HTTP_BAD_REQUEST;
}

sub post {
    my $r = shift;

    $r->send_http_header;

    $r->print("request_body: \"", $r->request_body, "\"<br/>");
    $r->print("request_body_file: \"", $r->request_body_file, "\"<br/>
");     return OK; } 1; __END__ $r->allow_ranges - enables the use of byte ranges when sending responses. $r->discard_request_body - instructs nginx to discard the request body. $r->header_in(header) –  $r->header_only –  $r->header_out(header, value) –  $r->internal_redirect(uri) –  URI, perl .  header_out(Location…. $r->print(args, …) –  $r->request_body –   (body  ,  nginx   client_body_buffer_size. ) $r->request_body_file —  body  , $r->request_method —   HTTP method. $r->remote_addr –   IP  . $r->rflush –  $r->sendfile(file [, displacement [, length ] ) –  , , perl . $r->send_http_header(type) –   http  $r->sleep(milliseconds, handler) –  , nginx , ,nginx , reference, $r->variable(). $r->status(code) –   http  $r->unescape(text) –   http   %XX $r->uri –   URL. $r->variable(name[, value]) – 

더 자세 한 내용 참고http://nginx.org/en/docs/http/ngx_http_perl_module.html
전 재 를 환영 합 니 다. 전 재 는 문장의 출처 를 밝 혀 주 십시오. 감사합니다!

좋은 웹페이지 즐겨찾기