Nginx + Lua + Redis 설정

16016 단어 nginx
Nginx 에서 이러한 기능 을 가 진 퍼 가기 모듈 을 개발 하고 자 합 니 다. 외부 퍼 가기 정책 제어 서버 는 지정 한 URL 을 데이터베이스 에 보 냅 니 다. Nginx 는 데이터베이스 에 있 는 URL 목록 을 읽 고 목록 에서 지정 한 이 URL 을 특정 캐 시 프 록 시 서버 에 전송 합 니 다. 다른 비 데이터베이스 URL 목록 에 있 는 URL 은 Nginx 를 통 해 출구 게 이 트 웨 이 로 직접 전송 하 십시오.실제 이상 의 기능 은 많은 사이트 들 이 Nginx 를 부하 균형 을 이 룰 때 이 루어 지 는 7 층 퍼 가기 기능 입 니 다. 다른 것 은 외부 퍼 가기 전략 제어 서버 를 추가 하여 실시 간 URL 목록 을 Nginx 에 보 내 고 싶 습 니 다. 그러면 이런 URL 정보 가 빅 데이터 처리 결과 에 따라 통 계 된 최고 핫 이 슈 방문 URL 이 라면Nginx 에서 콘 텐 츠 열 에 기반 한 7 층 리 트 윗 을 실현 할 수 있 습 니 다.
이상 은 후속 적 으로 완성 해 야 할 목표 입 니 다. 인터넷 자 료 를 보 았 습 니 다. 현재 이 분야 의 유사 모듈 이 있 습 니 다. 바로 Nginx + HttpLua Module + Redis 의 실현 방식 입 니 다. Nginx 는 서버 라 고 할 필요 가 없습니다. HttpLua Module 은 타 오 바 오의 엔지니어 청 무 (왕 효 철) 와 춘 래 (장 이춘) 가 개발 한 nginx 제3자 모듈 입 니 다. lua 언어 를 nginx 설정 에 삽입 할 수 있 습 니 다.그래서 lua 를 사용 하면 nginx 의 능력 을 크게 향상 시 켰 다.Redis 는 ANSI C 언어 를 사용 하여 네트워크 를 작성 하고 지원 하 며 메모리 기반 으로 지속 가능 한 로그 형, Key - Value 데이터 베 이 스 를 제공 하 며 다양한 언어 를 제공 하 는 API 입 니 다. 쉽게 말 하면 메모리 데이터 베이스 로 효율 이 높 습 니 다.이 세 모듈 을 조합 하 는 기본 절 차 는 url 이 nginx 서버 를 요청 한 다음 에 lua 가 redis 를 조회 하고 데 이 터 를 되 돌려 주 는 방식 으로 높 은 병행 을 유지 합 니 다.쓸데없는 말 은 그만 하고 배치 방식 을 중간 에 여러 구 덩이 를 만 났 지만 다행히 모두 성공 적 으로 해결 되 었 다.
방식 1:
OpenResty 를 직접 설치 하고 OpenResty 는 Nginx 로 각종 모듈 을 포장 했다. Lua 등 을 포함한다.구체 적 으로 공식 홈 페이지 를 볼 수 있다.
홈 페이지: http://openresty.org/
하지만 저 는 이런 바 보 를 선택 하지 않 았 습 니 다. 어려움 없 이 어려움 을 만들어 도 올 라 가 야 합 니 다. 다음은 Nginx + Lua + Redis 절 차 를 수 동 으로 설정 하 는 것 입 니 다.
방식 2:
1. Nginx 원본 다운로드
   http://nginx.org/en/download.html
다운로드 와 압축 해 제 는 모두 디 렉 터 리 / home / zjf / 에서 진행 되 었 습 니 다.
  cd /home/zjf
  tar -zxvf nginx-1.6.2 
압축 해제 후 다음 디 렉 터 리 가 나타 납 니 다.
  /home/zjf/nginx-1.6.2
Nginx 를 컴 파일 하지 않 고 필요 한 모듈 을 다운로드 합 니 다.
2. HttpLuaModule 모듈 설정
  2.1   다운로드 및 컴 파일 설치 LuaJIT 2.0
             HttpLuaModule 모듈 은 LuaJIT 2.0 (LuaJIT - 2.1 추천) 또는 Lua 5.1 (Lua 5.2 지원 하지 않 음) 이 필요 합 니 다.
      다운로드 링크: http://luajit.org/download.html
      파일 다운로드: LuaJIT - 2.0.3. tar. gz
압축 풀기: / home / zjf / luajit - 2.0.3 /
컴 파일 및 설치: cd / home / zjf / luajit - 2.0.3 /
            make 
            sudo make install
     2.2    다운로드 ngxdevel_kit
다운로드 링크: https://github.com/simpl/ngx_devel_kit/tags
파일 다운로드: ngxdevel_kit-0.2.19.tar.gz
압축 풀기: / home / zjf / ngxdevel_kit-0.2.19
  2.3    다운로드 ngxlua
           다운로드 링크: https://github.com/openresty/lua-nginx-module/tags
파일 다운로드: lua-nginx-module-0.9.13rc1.tar.gz
압축 풀기: / home / zjf / lu - nginx - module - 0.9.13rc 1
      2.4    위의 모듈 을 Nginx 와 함께 컴 파일 합 니 다.
처음 컴 파일 할 때 error 가 나 타 났 습 니 다:
      error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory  
        http://blog.csdn.net/vboy1010/article/details/7868645 의 해결 방법 을 참 고 했 습 니 다. 저 는 컴 파일 하기 전에 환경 변 수 를 가 져 오 는 방법 을 사 용 했 습 니 다.
            export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH 
컴 파일 할 때 옵션 을 추가 하거나 --with - ld - opt = "- wl, - rpath, $LUAJIT LIB" 는 다음 과 같 습 니 다.
 # tell nginx's build system where to find LuaJIT 2.0:

    export LUAJIT_LIB=/usr/local/include/luajit-2.0/

    export LUAJIT_INC=/usr/local/lib/


#configure Nginx .
/configure --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" --prefix=/usr/local/nginx/ --add-module=/home/zjf/ngx_devel_kit-0.2.19/ --add-module=/home/zjf/lua-nginx-module-0.9.13rc1/ make -j2 make install

   2.5  테스트 Nginx + HttpLuaModule 모듈
위의 절 차 를 거 쳐 Nginx 의 HttpLuaModule 모듈 이 설정 되 었 습 니 다. 브 라 우 저 에 localhost 주 소 를 입력 하면 Nginx 서버 의 환영 인터페이스 가 나타 나 고 Nginx 가 정상적으로 작 동 하지 않 으 면 설 치 된 다른 서버 가 포트 를 차지 하 는 지 고려 합 니 다.
/ usr / local / nginx / conf / nginx. conf 파일 을 편집 하면 server {...} 에 다음 과 같은 기본 설정 이 있 습 니 다. 이것 은 웹 페이지 를 환영 하 는 url 설정 입 니 다.
        location / {

               root   html;

               index  index.html index.htm;

          }

             우 리 는 다음 설정 을 추가 합 니 다:
     location /lua {  

              default_type 'text/plain';  

              content_by_lua 'ngx.say("hello, lua")';  

      }  

그리고 localhose / lua 를 방문 하여 문자 hello, lua 를 되 돌려 줍 니 다. Lua 모듈 설정 이 성공 적 이 었 음 을 증명 합 니 다. Nginx 는 Lua 를 사용 하여 문자열 hello, lua 를 성공 적 으로 출력 했 습 니 다.
3. Redis 데이터베이스 설치
redis 설 치 는 간단 합 니 다. 다운로드 - 압축 풀기 - 설치 하면 됩 니 다. 다운로드 주소.  http://www.redis.io/download
     tar -zxvf redis-2.8.6.tar.gz
     cd /home/zjf/redis-2.8.6
     make 
              sudo make install
4. lua - resty - redis - master 설치
lua - resty - redis - masters 는 Lua 입 니 다. client driver for the ngx_lua based on the cosocket API, 즉 Nginx 가 Lua 를 통 해 Redis 데이터 베 이 스 를 조작 하 는 구동 모듈 입 니 다.
다운로드 주소: https://github.com/openresty/lua-resty-redis
압축 해제 후 디 렉 터 리: / home / zjf / lu - resty - redis - master
nginx. conf 파일 설정
http {...} 세그먼트 에 다음 경 로 를 추가 하여 nginx 가 방금 압축 해제 디 렉 터 리 에 따라 redis. lua 모듈 드라이버 파일 을 찾 을 수 있 도록 합 니 다. 디 렉 터 리 에 따라 상황 에 따라 수정 할 수 있 습 니 다. redis. lua 만 찾 으 면 됩 니 다.
 lua_package_path "/home/zjf/lua-resty-redis-master/lib/resty/redis.lua;;";

그리고 새 location 을 추가 하여 / test URL 로 이 모듈 이 설정 되 었 는 지 확인 합 니 다.
    location /test {

        default_type 'text/plain';

            content_by_lua '

                local redis = require "resty.redis"

                local red = redis:new()



                red:set_timeout(1000) -- 1 sec



                -- or connect to a unix domain socket file listened

                -- by a redis server:

                --     local ok, err = red:connect("unix:/path/to/redis.sock")



                local ok, err = red:connect("127.0.0.1", 6379)

                if not ok then

                    ngx.say("failed to connect: ", err)

                    return

                end



                ok, err = red:set("dog", "an animal")

                if not ok then

                    ngx.say("failed to set dog: ", err)

                    return

                end



                ngx.say("set result: ", ok)



                local res, err = red:get("dog")

                if not res then

                    ngx.say("failed to get dog: ", err)

                    return

                end



                if res == ngx.null then

                    ngx.say("dog not found.")

                    return

                end



                ngx.say("dog: ", res)



                red:init_pipeline()

                red:set("cat", "Marry")

                red:set("horse", "Bob")

                red:get("cat")

                red:get("horse")

                local results, err = red:commit_pipeline()

                if not results then

                    ngx.say("failed to commit the pipelined requests: ", err)

                    return

                end



                for i, res in ipairs(results) do

                    if type(res) == "table" then

                        if not res[1] then

                            ngx.say("failed to run command ", i, ": ", res[2])

                        else

                            -- process the table value

                        end

                    else

                        -- process the scalar value

                    end

                end



                -- put it into the connection pool of size 100,

                -- with 10 seconds max idle time

                local ok, err = red:set_keepalive(10000, 100)

                if not ok then

                    ngx.say("failed to set keepalive: ", err)

                    return

                end



                -- or just close the connection right away:

                -- local ok, err = red:close()

                -- if not ok then

                --     ngx.say("failed to close: ", err)

                --     return

                -- end

            ';

        }

localhost / test 에 접근 하면 설정 이 성공 하면 표 시 됩 니 다.
set result: OK

dog: an animal

Redis 데이터베이스 서 비 스 를 시작 해 야 합 니 다. 그렇지 않 으 면 failed to connect 가 표 시 됩 니 다: connection refused
5. 위의 절 차 를 거 쳐 Nginx + Lua + Redis 의 모든 설정 이 완료 되 었 고 Nginx 가 Url 에 따라 Redis 를 조회 하여 해당 내용 을 되 돌려 주 는 기능 을 실현 하여 해당 하 는 2 차 개발 이 가능 합 니 다.
       

좋은 웹페이지 즐겨찾기