>  기사  >  백엔드 개발  >  nginx 튜토리얼

nginx 튜토리얼

WBOY
WBOY원래의
2016-08-08 09:23:271193검색

Nginx와 Lua

불구름 사신의 명언: 세상에 무술에서 깨지지 않는 것은 없고 오직 속도뿐이다! Nginx의 특기는 속도이고, Lua의 특기는 속도입니다. 이 둘의 조합은 의심할 여지 없이 속도 면에서 유전적 이점을 가지고 있습니다.

OpenResty는 Nginx와 Lua를 결합한 최초의 제품으로 Nginx에 Lua를 내장하는 ngx_lua 모듈이 있으며 Tengine에는 ngx_lua 모듈도 포함되어 있습니다. 둘 사이의 차이점은 다음과 같습니다. OpenResty는 Nginx 번들이고 Tengine은 Nginx의 포크입니다. OpenResty와 Tengine은 모두 중국인이 만든 프로젝트라는 점을 언급할 가치가 있습니다. 전자는 주로 Chun Ge와 Xiaozhe가 개발하고 후자는 주로 Taobao가 관리합니다.

OpenResty와 Tengine의 장점과 단점은 각자 판단하시기 바랍니다. 다음 정보를 참고하세요.

  • ngx_openresty: Lua로 접착된 Nginx 생태계
  • Taobao Nginx 애플리케이션, 사용자 정의 및 개발 실습

Tech-Club에서 Chun Ge의 "Lua로 접착된 Nginx 생태 환경"에 관한 기사를 읽어 보는 것이 좋습니다. 음성녹음에 정보가 있어요!

설치

에는 최신 버전의 Nginx, LuaJIT, ngx_devel_kit, ngx_lua 및 기타 설치 파일이 필요합니다.

Lua나 LuaJIT 설치도 가능하지만 효율성을 고려하여 LuaJIT 설치를 권장합니다.

shell> wget http://luajit.org/download/LuaJIT-.tar.gz shell> tar zxvf LuaJIT-.tar.gz shell> cd LuaJIT- shell> make shell> make install

기본 경로에 설치되기 때문에 LuaJIT에 해당하는 lib와 include는 모두 /usr/local 디렉터리에 있습니다.

shell> export LUAJIT_LIB=/usr/local/lib shell> export LUAJIT_INC=/usr/local/include/luajit-

이제 Nginx를 컴파일할 수 있습니다.

shell> wget http://nginx.org/download/nginx-.tar.gz shell> tar zxvf nginx-.tar.gz shell> cd nginx- shell> ./configure --add-module=/path/to/ngx_lua \ --add-module=/path/to/ngx_devel_kit shell> make shell> make install

Nginx를 시작하고 운이 좋지 않은지 확인하면 다음 오류가 발생할 수 있습니다.

공유 객체 파일을 열 수 없습니다: 해당 파일이나 디렉터리가 없습니다

이상한 상황인가요? ldd 명령을 사용하여 다음을 확인할 수 있습니다.

shell> ldd /path/to/nginx libluajit-.so => not found

이러한 문제는 일반적으로 ldconfig 명령을 사용하여 해결할 수 있습니다.

shell> echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf shell> ldconfig

Nginx를 다시 시작해 보면 문제가 없을 것입니다.

애플리케이션

먼저 간단한 프로그램으로 준비를 해보겠습니다. Nginx 구성 파일 nginx.conf에 다음 코드를 추가하고 Nginx를 다시 시작한 다음 탐색하면 작동하는 것을 확인할 수 있습니다.

location /lua { set $test "hello, world."; content_by_lua ' ngx.header.content_type = "text/plain"; ngx.say(ngx.var.test); '; }

ngx_lua를 자세히 배우기 전에 Chun 형제가 작성한 Nginx 튜토리얼을 주의 깊게 읽어 보시기 바랍니다.

여기서 핵심 사항에 대해 이야기하겠습니다. Nginx 구성 파일에 사용되는 언어는 본질적으로 "절차적"이 아닌 "선언적"입니다. Nginx가 요청을 처리할 때 명령어의 실행은 명령어가 정의된 물리적 순서에 따라 결정되는 것이 아니라 명령어가 속한 단계에 따라 결정됩니다. Nginx에서 일반적으로 사용되는 단계는 재작성 단계, 액세스 단계, 콘텐츠 단계입니다. , 등. . 데모 코드의 set 명령어는 rewrite 단계에 속하고, content_by_lua 명령어는 content 단계에 속합니다. 두 명령어의 순서를 바꾸어 보면 프로그램이 여전히 정상적으로 실행되는 것을 볼 수 있습니다.

Redis를 사용하여 좀 더 실용적인 예제를 작성해 보겠습니다.

먼저 다음 내용으로 Redis 구성 파일 config.json을 생성해야 합니다.

{ "host": "", "port": "" }

그런 다음 구성 파일을 구문 분석하는 init.lua 스크립트를 생성합니다. 루아 CJSON 모듈:

local cjson = require "cjson"; local config = ngx.shared.config; local file = io.open("config.json", "r"); local content = cjson.decode(file:read("*all")); file:close(); for name, value in pairs(content) do config:set(name, value); end

설명: 코드에서 공유 메모리를 사용하므로 모든 요청에 ​​대해 구성 파일을 구문 분석할 필요가 없습니다.

다음으로 Resty를 사용하여 콘텐츠를 렌더링하는 스크립트 content.lua를 만듭니다. Redis 모듈:

ngx.header.content_type = "text/plain"; local redis = require "resty.redis"; local config = ngx.shared.config; local instance = redis:new(); local host = config:get("host"); local port = config:get("port"); local ok, err = instance:connect(host, port); if not ok then ngx.log(ngx.ERR, err); ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE); end instance:set("name", "laowang"); local name = instance:get("name") instance:close(); ngx.say("name: ", name);

참고: Resty Redis 모듈을 공급업체 디렉터리에 넣고 나중에 Nginx에서 설정하는 것이 좋습니다.

마지막으로 Nginx 구성 파일에서 이를 설정해야 합니다.

lua_shared_dict config 1m; lua_package_path "/path/to/vendor/?.lua;;"; init_by_lua_file /path/to/init.lua; server { lua_code_cache off; location /lua { content_by_lua_file /path/to/content.lua; } ... }

참고: 디버깅을 용이하게 하기 위해 프로덕션 환경인 경우 lua_code_cache를 꺼야 합니다. 켜져 있습니다.

또한 CJSON 설치 시 Makefile의 헤더 파일 경로에 주의해야 합니다. 기본값은

PREFIX = /usr/local LUA_INCLUDE_DIR = $(PREFIX)/include

LuaJIT를 설치하는 경우입니다. 헤더 파일을 해당 디렉토리에 복사하는 것이 가장 좋습니다.

cp /usr/local/include/luajit-/* /usr/local/include/

최근에 참여한 프로젝트에서는 웹 폴링을 위한 일부 인터페이스를 제공하는데, 모두 Nginx+Lua로 구현되었습니다. 서버는 매일 수십억 건의 요청을 제공할 수 있으며 이는 매우 강력합니다.

마지막으로 패배자의 말을 인용하여 결론을 내리겠습니다. Lua는 미혼 남성 프로그래머가 가장 좋아하는 프로그램입니다.

이 항목은 기술 카테고리의 Lao Wang에 의해 게시되었으며 Lua 및 Nginx 태그가 지정되었습니다. 즐겨찾기에 영구링크를 추가하세요.

"NGINX 및 LUA"에 대한 댓글이 29개 있습니다.


이상으로 다양한 측면을 포함한 nginx 튜토리얼을 소개하였습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.