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 스 크 립 트 에 사용 하도록 정의 합 니 다
자세 한 참조: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