처음 OpenResty : 핫로드

lua_code_cache off로 핫로드



OpenResty에서 lua 코드가 포함된 파일을 변경한 경우 nginx -p $(pwd) -s reload를 실행하여 nginx를 다시 시작해야 했습니다.

개발 단계에서 캐주얼하게 사용하는 경우 매번 다시 시작하는 것은 번거롭고 파일을 변경 한 후 서버를 다시 시작하지 않고 응용 프로그램의 코드를 반영하는 것이 바람직합니다. 이러한 기능을 "핫 로드"등이라고합니다.

OpenResty의 Lua로 작성된 앱이 포함된 모듈은 일단 로드되면 캐시되고 재사용됩니다. 반대로 lua_code_cache off를 location 지시문에 지정하면 캐시가 무효화되고 요청 당 Lua 모듈이로드됩니다. 이렇게하면 파일 변경 후 요청에 즉시 반영되는 것과 동일한 효과가 있습니다. 가자.

현재 구성 및 기본 시간 동작



OpenResty 설치에 대한 자세한 내용은 처음 OpenResty : Hello World 등을 참조하십시오.

이번에도 Windows PC의 VirtualBox 게스트에 CentOS 7이 NAT NIC로 설치되어 있다고 가정합니다.
  • 포트 구성



  • 용도
    호스트 IP
    호스트 포트
    게스트 IP
    게스트 포트


    ssh
    0.0.0.0
    20022
    10.0.2.15
    22

    HTTP
    0.0.0.0
    20080
    10.0.2.15
    80

    DEV
    0.0.0.0
    28080
    10.0.2.15
    8080


  • 디렉토리 구성
  • ../restyroot
    ├── conf
    ├── logs
    └── lua
    
  • conf/nginx.conf
  • worker_processes 1;
    error_log logs/error.log;
    events {
            worker_connections 1024;
    }
    http {
            server {
                    listen 8080;
                    location / {
                            default_type text/html;
                            content_by_lua_file ./lua/hotload.lua;
                    }
            }
    }
    
  • lua/hotload.lua
  • ngx.say("<p><span style="color:red">RELOADED?</span></p>");
    
    nginx -p $(pwd) -c conf/nginx.conf 에서 nginx를 시작하고 호스트 Windows의 브라우저에서 localhost:28080로 액세스하려고합니다.



    빨간색 문자로 표시되었습니다. 그런 다음 lua/hotload.lua 안의 색상을 blue로 변경합니다.
    $ sed -i -e "s/red/blue/g" lua/hotload.lua
    

    이대로 다시 브라우저에서 액세스해 보면. . .



    F5나 Shift+F5로 캐시 클리어의 Reload를 해도, 물론 적문자로부터 변경되지 않습니다!

    lua_code_cache off로 설정



    location 지시문을 다음으로 변경합니다.
                    location / {
                            default_type text/html;
                            lua_code_cache off;   <===== 追加
                            content_by_lua_file ./lua/hotload.lua;
                    }
    

    nginx 를 reload 하면 아래와 같이 alert 가 나오지만 문제없이 재기동되고 있습니다.
    $ nginx -p $(pwd) -s reload
    nginx: [alert] lua_code_cache is off; this will hurt performance in /home/restymgr/restyroot/conf/nginx.conf:11
    

    설명한 대로 요청마다 파일을 읽으려고 하므로 성능이 크게 저하됩니다. 그 경고입니다.

    우선, localhost:28080 에 액세스 해 봅시다. reload 하고 있으므로 설정에 관계없이 파랑 문자로 표시되고 있다고 생각합니다.



    그런 다음 lua/hotload.lua의 color 설정을 green으로 변경하고,
    $ sed -i -e "s/blue/green/g" lua/hotload.lua
    

    브라우저로 접속하면



    녹색 문자로 바뀌었습니다!

    요약



    퍼포먼스는 해치게 됩니다만, 번잡한 nginx 재기동 없이 스크립트 파일의 변경이 즉반영되는 형태가 됩니다.

    프로덕션 환경에서는 사용할 수 없지만 OpenResty에서도 자주 코드를 변경하는 개발 단계에서는 필수 매개 변수로 간주됩니다.

    이 설정으로 여러분의 OpenResty에서의 웹 어플리케이션 개발이 쾌적해지면 다행입니다.

    좋은 웹페이지 즐겨찾기