Openresty + lua 프레젠테이션 (후속 게 이 트 웨 이 개발 에 사용 가능)

7234 단어 linux
OpenResty 소개
  • NGINX 와 LuaJIT 기반 웹 플랫폼
  • https://openresty.org/en/

  • OpenResty 가 뭐 예요?
  • OpenResty (ngx openresty 라 고도 함) 는 모든 기능 을 가 진 웹 응용 서버 이다.야후 중국의 한 회사 프로젝트 를 포장 해 2007 년 10 월 부터 시작 했다.
  • 여러 디자인 이 좋 은 Nginx 모듈 을 반죽 하여 OpenResty 는 Nginx 서버 를 강력 한 웹 응용 서버 로 효과적으로 전환 시 켰 다.
  • Nginx 의 이벤트 모델 을 충분히 이용 하여 비 차단 I / O 통신 을 할 수 있다.HTTP 클 라 이언 트 와 의 네트워크 백 엔 드 간 의 네트워크 통신 뿐만 아니 라 차단 되 지 않 습 니 다.

  • 장점.
  • 1. openresty 를 설치 하면 일반적인 LNMP 구조 와 같은 효 과 를 가 질 수 있 습 니 다.(Nginx + Lua + MySQL + Redis + Memcached + ZeroMQ + WebSocket …)
  • 2. 병발 능력 이 뛰 어 나 Nginx 의 이벤트 모델 을 충분히 이용 하여 비 차단 I / O 통신 을 한다. (Lua 버 전의 NodeJs 서버 에 해당)
  • 3. 비 즈 니스 논리 코드 핫 업데이트, 생산 환경 에서 핫 로드 완료 (코드 가 변동 되 었 을 때 최신 Lua 코드, 본 Nodejs 서버 를 자동 으로 불 러 옵 니 다) 하지만 Nginx 자체, reload 를 하지 않 습 니 다)
  • 4. 진정 으로 상류 서비스 에 도달 할 것 을 요청 하기 전에 Lua 는 복잡 한 방문 통제 와 안전 검 사 를 마음대로 할 수 있 습 니 다. (http 에서 유통 을 요청 하 는 각 부분 은 lua 로 nginx 에 개입 할 수 있 고 마음대로 응답 헤드 안의 정 보 를 조작 할 수 있 습 니 다)
  • 결점.
  • 1. 디 버 깅 이 쉽 지 않다
  • 2. 주변 제3자 창고 가 성숙 하지 않 고 성숙 한 웹 프레임 워 크 가 부족 하 다
  • 3. i / o 작업 은 nginx 모델
  • 에 제한 을 받는다.
    루 아 어
  • Lua 는 가 볍 고 작은 스 크 립 트 언어 로 표준 C 언어 로 작성 되 고 소스 코드 로 개방 되 며 응용 프로그램 에 삽입 하여 응용 프로그램 에 유연 한 확장 과 맞 춤 형 기능 을 제공 하기 위 한 디자인 목적
  • 입 니 다.
  • 루 아 는 브라질 리 우 데 자네 이 루 가톨릭 대학 (Pontifical Catholic University of Rio de Janeiro) 의 한 연구 팀 으로 로 베 르 토 Ierusalimschy, Waldemar Celes, Luiz Henrique de Figueiredo 로 구 성 돼 1993 년 개발 됐다.
  • 그 디자인 목적 은 응용 프로그램 에 삽입 하여 응용 프로그램 에 유연 한 확장 과 맞 춤 형 기능 을 제공 하 는 것 이다.

  • Lua 특성
  • 경량급: 표준 C 언어 로 작성 되 고 소스 코드 로 열 립 니 다. 컴 파일 후 100 여 K 만 있 으 면 다른 프로그램 에 쉽게 삽입 할 수 있 습 니 다.
  • 확장 가능: Lua 는 사용 하기 쉬 운 확장 인터페이스 와 메커니즘 을 제공 합 니 다. 숙주 언어 (보통 C 또는 C + +) 에서 이러한 기능 을 제공 합 니 다. Lua 는 원래 내 장 된 기능 처럼 사용 할 수 있 습 니 다.
  • 기본 특성:
  • 자동 메모리 관리;하나의 유 니 버 설 형식의 표 (table) 만 제공 합 니 다. 이 를 통 해 배열, 해시 표, 집합, 대상 을 실현 할 수 있 습 니 다.
  • 언어 내장 모드 가 일치 합 니 다.닫 기 (closure);함수 도 하나의 값 으로 볼 수 있다.다 중 스 레 드 지원 제공;
  • 패 킷 과 table 을 통 해 대상 을 대상 으로 프로 그래 밍 하 는 데 필요 한 관건 적 인 체 제 를 편리 하 게 지원 할 수 있다. 예 를 들 어 데이터 추상, 계승 과 과부하 등 이다.


  • Lua 응용 장면
  • 1. 게임 개발 보조 스 크 립 트 (폭 설 마수, 왕 이 대화 서 유)
  • 2. 독립 응용 스 크 립 트 (Kong)
  • 3. 웹 응용 스 크 립 트 (시 나 닷 컴 바닐라 프레임 워 크http://www.tuicool.com/articles/vM7NNva)
  • 4. MySQL Proxy 와 MySQL WorkBench
  • 와 같은 확장 및 데이터베이스 플러그 인
  • 5. 안전 시스템, 예 를 들 어 침입 검 측 시스템
  • Lua 우세
  • 1. 아주 작은 부피 와 간단 한 문법 은 상대 적 으로 전면적 인 기능 을 제공한다
  • 2. 간결 한 API 실현 과 숙주 언어 가 가장 편리 한 인터페이스
  • 3. 플랫폼 과 관 계 없 이 거의 모든 시스템 에서 운행 할 수 있다
  • Lua 내장 프로 그래 밍 언어
  • lua 는 독립 적 으로 프로 그래 밍 을 할 수 있 지만 이것 은 주요 한 사용 방식 이 아니다.Lua 는 동태 적 이 고 유연 한 문법 이 강력 한 기능 을 제공 하지만 자바, Python 등 처럼 완벽 한 라 이브 러 리 를 가 질 수 없다. 이것 은 결함 이 아니 라 그 포 지 셔 닝 과 관련 이 있다.
  • '끼 워 넣 기', lua 는 하나의 라 이브 러 리 로 서 다른 대형 언어 (숙주 언어 라 고 함) 의 응용 프로그램 에 삽입 되 어 응용 프로그램 에 파라미터 설정 이나 논리 설명 등 기능 을 제공 하여 전례 없 는 유연성 을 가 져 옵 니 다.

  • lua 의 고전 사용 방식
  • lua 는 설정 파일 로 숙주 언어 에 인 자 를 제공 합 니 다
  • 숙주 언어 는 베이스 라 이브 러 리 이 고 lua 는 논리 적 처리
  • 작업 흐름
  • 숙주 어 ⾔ 言 建 ⽴ 立 Lua 해석 기 器 대상.
  • 숙주 어 ⾔ 言 이 실 현 된 Lua 확장, 예 를 들 어 함수 등 을 Lua 해석 기 器 에 등록 하여 스토리 보드 용
  • Lua 원본 프로그램 을 읽 거나 미리 컴 파일 된 Lua 프로그램
  • 행동 으로 읽 고 들 어 가 는 Lua 프로그램
  • Lua 와 숙주 언어의 상호작용 방식
  • 1. 숙주 언어 는 가상 컴퓨터 를 통 해 Lua 스 크 립 트 의 변 수 를 증가, 삭제, 읽 기, 쓰기
  • 2. 숙주 언어 는 가상 컴퓨터 를 통 해 Lua 스 크 립 트 의 함수
  • 를 호출 합 니 다.
  • 3. 숙주 언어 는 새로운 데이터 형식 을 Lua 스 크 립 트 에 사용 하도록 정의 합 니 다
  • 4. Lua 는 숙주 언어 로 작 성 된 함수
  • 를 호출 합 니 다.
    Lua 기본 유형
      
    a=3
    x, y, z = 12, 'Hello', true
        :
    
    -    nil
    
    -   number:123,3.14159,1.6e-9
    
    -  :+ - * / % ^(  ) -( )
    
    -   boolean:true,false
      :or and not
        string:'www.hello.com',"  "
      :..(  ),# (   )
           :
    
    == ~= > < >= <= (~=      )
    

    Lua 의 시계 table
  • Lua 는 table 형식 을 모든 데이터 구조의 기초 로 사용 합 니 다. t = {1234, nil, 'hello', true, {'nested', 1.414}}
  • table 의 본질은 해시 표 이 고 저장 키 - 값 이 맞 는 집합 입 니 다. 키 를 지정 하지 않 으 면 기본 값 은 1 부터 의 정수 입 니 다.명시 적 지정 키 rec = {['name'] = '111', favorite = '222', [10] = true}
  • 인용 표 의 요소:
  • rec.name rec[‘favorite'] rec[10]
  • 활용 표 유형 은 구조 체, 링크, 배열, 대상 등 각종 복잡 한 데이터 구 조 를 구성 할 수 있다.

  • OpenResty 명령 어
    set_by_lua / set_by_lua_file access_by_lua / access_by_lua_file rewrite_by_lua / rewrite_by_lua_file content_by_lua / content_by_lua_file
    

    자세 한 참조:http://www.111cn.net/sys/linux/64574.htm
    set_by_lua
    location = /adder {
        set_by_lua $res "
            local a = tonumber(ngx.arg[1])
            local b = tonumber(ngx.arg[2])
            return a + b"  $arg_a $arg_b;
            
        echo $res;
    }
    

    http://ip:8083/adder?a=100&b=100 set 명령 과 마찬가지 로 Nginx 변 수 를 설정 하고 rewrite 단계 에서 실행 합 니 다. 다만 이 변 수 는 lua 스 크 립 트 에서 계산 하고 되 돌려 줍 니 다.
    access_by_lua
    location /auth{
        root    html;
        index   index.html  index.htm;
        default_type text/html;
        
        access_b_lua '
            if  ngx.var.remote_user == "chenyz" and ngx.var.remote_passwd == "123" then
                return
            end
            ngx.header.www_authenticate = [[Basic realm="Restricted"]]
            ngx.exit(401)
        ';
    }
    

    http://ip:8083/auth access 단계 에서 실행 되 며 접근 제어 에 사 용 됩 니 다.Nginx 원생 allow 와 deny 는 ip 기반 accessby_lua 는 복잡 한 접근 통 제 를 완성 할 수 있 습 니 다. 예 를 들 어 데이터 베 이 스 를 방문 하여 사용자 이름, 비밀번호 검증 등 입 니 다.
    rewrite_by_lua
    location = /rew{
        rewrite_by_lua 'ngx.exec("/go")';
        echo 'this rew';
    }
    
    location /go{
        echo 'this is go';
    }
    

    http://ip:8083/rew url 재 작성, rewrite 단계 에서 실행
    content_by_lua
    location /hello1{
        root    html;
        index   index.html  index.htm;
        default_type    text/html;
        content_by_lua '
            ngx.say("hello world");
        ';
    }
    
    location /hello2{
        root    html;
        index   index.html  index.htm;
        defaul_type text/html;
        content_by_lua_file 'conf/hello.lua';
    }
    

    http://ip:8083/hello1
    content 단계 에서 실행, http 응답 생 성
    memcached 사용 하기
    require('Memcached')
    
    memcache = Memcached.Connect('memcached.product.house.163.com', 11211)
    memcacheobject = memcacge:get('hello')
    
    memcache:set('hello', 'chenyz', 60*60)
    

    lua 스 크 립 트 내부 에 서 는 PHP 처럼 Memcached 에 연결 하여 데 이 터 를 읽 고 쓸 수 있 습 니 다.
    IP 제어
    location /ip_area{
        access_by_lua '
        if ngx/var.remote_addr == "113.108.224.230" then
            return
        end
        ngx.redirect('/post-error')
        ';
    }
    

    방문 IP 가 지정 한 IP 인 것 을 발 견 했 을 때 지정 한 11994 페이지 로 다시 설정 합 니 다.
    관련 자료
  • OpenResty Xmind 뇌도http://naotu.baidu.com/file/e24b5f1e8e5abea8a04312d87b334434? token=3bcfeb5ba50491f7
  • 《 오픈 레 스 티 최고의 실천 》https://www.gitbook.com/book/moonbingbing/openresty-best-practices/ details
  • OpenResty 스 킬 도감https://github.com/TeamStuQ/skill-map/blob/master/data/designbyStuQ/ png-OpenResty-by-StuQ.png

  • 우리 계시 록

    좋은 웹페이지 즐겨찾기