njs 0.7.7의 중요한 개선 사항은 NGINX 구성을 더욱 모듈화하고, 체계화하고, 재사용 가능하게 만드는 데 도움이 됩니다.
- 이제 전역적으로 선언하는 대신 적용되는 컨텍스트에서 njs 코드를 선언하여 사용자 지정 코드를 사용 지점에 더 가깝게 가져올 수 있습니다.
- njs 코드 자체의 후크를 사용하면 실행 컨텍스트에 따라 동작을 수정할 수 있습니다 .
- 새로운 fs.FileHandle객체는 파일 작업의 효율성을 더 높여줍니다 .
njs에 대해 자세히 알아보고 샘플 코드가 제공되는 사용 사례 목록을 검토하려면 블로그의 NGINX JavaScript 모듈을 사용하여 각 요청에 JavaScript의 강력함과 편의성 활용을 읽어보세요.
njs 0.7.7의 모든 새로운 기능과 버그 수정의 전체 목록을 보려면 변경 사항 문서를 참조하세요.
로컬 컨텍스트에서 JavaScript 코드 및 변수 선언
이전 njs 버전에서는 JavaScript 코드를 가져와서 관련 변수를 최상위 수준 또는 컨텍스트에서 js_import, js_path, js_set, 지시문과 함께 선언해야 합니다 . 이는 메인 파일 맨 위에 전역 변수를 선언하는 것과 같습니다. 하지만 JavaScript 함수와 변수를 실제로 호출하는 지시문은 자식 컨텍스트에 나타납니다. 예를 들어, 지시문은 HTTP 블록 에 있고 지시문은 Stream 블록에 있습니다. 이렇게 하면 두 가지 문제가 발생합니다.js_varhttpstreamjs_contentlocation{}js_accessserver{}
- 구성 내용을 읽는 사람에게는 http및 stream컨텍스트 내의 선언은 사실상 노이즈일 뿐입니다. 연관된 코드와 변수가 실제로 사용되는 위치를 나타내는 표시가 없기 때문입니다.
- 자식 컨텍스트에서 코드와 변수가 어디에서 가져와서 선언되었는지 명확하지 않습니다. 주요 구성 파일( nginx.conf ) 에만 http{}and 블록을 포함하고 /etc/nginx/conf.d 및 /etc/nginx/stream.d 디렉터리 에서 더 작은 함수별 구성 파일을 읽는 지시문을 사용하는 것이 좋지만 NGINX 구성은 유연합니다 . 여러 파일에 and 블록을 포함할 수 있습니다. 이는 여러 사람이 NGINX 구성에서 작업하고 항상 확립된 규칙을 따르지 않는 환경에서 특히 문제가 될 수 있습니다.stream{}includehttp{}stream{}
njs 0.7.7 이상에서는 코드를 가져오고 변수가 사용되는 컨텍스트에서 변수를 선언할 수 있습니다.
특정 사용 사례에 대한 모든 njs 구성을 하나의 파일에 저장하면 코드가 더 모듈화되고 이식성이 좋아집니다.
예를 들어, 이전 njs 버전에서 새 스크립트를 추가할 때는 nginx.conf ( js_import및 필요할 경우 js_path, js_set, 를 추가 js_var)와 JavaScript 함수가 호출되는 파일(여기서는 jscode_local.conf )을 모두 변경해야 했습니다.
| http { |
| # util.mjs is not actually invoked in this file |
| js_import util from util.mjs; |
|
|
| # This reads in jscode_local.conf, where 'util' is actually invoked |
| include /etc/nginx/conf.d/*.conf; |
| } |
view rawnginx.conf hosted with ❤ by GitHub
| server { |
| listen 4001; |
| |
| location /foo { |
| # Where is 'util' defined? It's not obvious in this context |
| js_content util.handler; |
| } |
| } |
view rawjscode_local.conf hosted with ❤ by GitHub
njs 0.7.7 이상에서는 util 함수와 관련된 모든 구성이 jscode_integrated.conf라는 하나의 파일에 들어 있습니다 .
| server { |
| listen 4001; |
| |
| js_import util from util.mjs; |
|
|
| location /foo { |
| js_content util.handler; |
| } |
| } |
view rawjscode_integrated.conf hosted with ❤ by GitHub
실행 컨텍스트에 따라 동작 수정
njs 0.7.7의 여러 가지 새로운 기능을 사용하면 JavaScript 코드가 실행되는 컨텍스트(처리 단계)에 따라 해당 코드의 동작을 수정할 수 있습니다.
HTTP r.internal속성
HTTP 속성은 내부 요청(지시문 을 포함하는 블록 r.internal에서 처리 )에 대해 "true"로 설정된 부울 플래그입니다. 스크립트가 내부 및 비내부 컨텍스트에서 모두 호출할 수 있는 일반 이벤트 핸들러를 사용할 때 플래그를 사용하여 논리를 포크할 수 있습니다.location{}internalr.internal
다음은 내부 요청으로 분류됩니다.
- error_page, index, random_index, 및 try_files지시문 에 의해 리디렉션된 요청
- X-Accel-Redirect업스트림 서버에서 응답 헤더 로 리디렉션된 요청
- auth_request및 지시문, ngx_http_addition_modulemirror 모듈 의 지시문 또는 SSI(Server Side Include) 명령( ngx_http_ssi_module 모듈 에서 지원 ) 에 의해 호출되는 하위 요청include virtual
- rewrite지시 에 의해 변경된 요청
개선된 s.send()스트림 방식
이전 njs 버전에서 Stream s.send()메서드는 컨텍스트에 따라 달라집니다. 데이터를 보내는 방향은 메서드가 호출되는 콜백의 위치(업스트림 또는 다운스트림)에 따라 결정되기 때문입니다. 동기 콜백의 경우 잘 작동하지만( s.send()원래 동기 콜백을 위해 설계됨) .과 같은 비동기 함수에서는 실패합니다 ngx.fetch().
njs 0.7.7 이상에서는 방향이 별도의 내부 플래그에 저장되어 s.send()사용할 수 있습니다.
새로운 fs.FileHandle()객체를 사용한 보다 효율적인 파일 작업
파일 시스템 모듈( )은 파일에 대한 작업을 구현합니다. 모듈 의 fs새 객체 는 숫자 파일 설명자에 대한 객체 래퍼입니다. 객체의 인스턴스는 메서드에 의해 생성됩니다 .FileHandlefsFileHandlefs.promises.open()
이 FileHandle객체를 사용하여 파일 설명자를 가져올 수 있으며, 이는 다음과 같은 용도로 사용할 수 있습니다.
- 파일에서 read()및와 같은 기능을 수행합니다.write()
- 전체 파일을 읽지 않고도 파일을 열고 지정된 위치에서 읽기 및 쓰기를 수행합니다.
다음 속성이 FileHandle구현되었습니다(각 속성에 대한 필수 인수와 선택 인수에 대한 자세한 내용은 설명서를 참조하세요 ):
- filehandle.fd
- filehandle.read()
- filehandle.stat()
- filehandle.write()
- filehandle.write()
- filehandle.close()
다음 메서드는 다음을 지원하도록 업데이트되었습니다 FileHandle(각 메서드의 인수에 대한 정보는 링크된 문서를 참조하세요).
- fs.openSync()
- fs.promises.open()
- fs.fstatSync()
- fs.readSync()
- fs.writeSync()(완충기)
- fs.writeSync()(끈)
njs를 사용하여 구성을 향상시키세요
njs 0.7.7을 통해 팀이 njs 코드를 작업하고 공유하기가 더 쉬워졌습니다. njs 지시문에 대한 확장된 컨텍스트를 통해 사용자 지정 JavaScript 코드로 NGINX 구성을 더욱 간단하게 개선할 수 있습니다. API 게이트웨이, 역방향 프록시 또는 웹 서버로의 첫 번째 이동을 할 수 있으며, 이는 단순히 또 다른 미들웨어 또는 에지 구성 요소 이상입니다. 스택에 다른 구성 요소를 추가하지 않고도 JavaScript, TypeScript 또는 타사 노드 모듈을 통해 애플리케이션의 일부로 만들 수 있습니다 . 필요한 것은 NGINX뿐입니다!
위 내용과 같이 NGINX Plus 를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
전문가에게 상담받기
njs 0.7.7의 중요한 개선 사항은 NGINX 구성을 더욱 모듈화하고, 체계화하고, 재사용 가능하게 만드는 데 도움이 됩니다.
njs에 대해 자세히 알아보고 샘플 코드가 제공되는 사용 사례 목록을 검토하려면 블로그의 NGINX JavaScript 모듈을 사용하여 각 요청에 JavaScript의 강력함과 편의성 활용을 읽어보세요.
njs 0.7.7의 모든 새로운 기능과 버그 수정의 전체 목록을 보려면 변경 사항 문서를 참조하세요.
로컬 컨텍스트에서 JavaScript 코드 및 변수 선언
이전 njs 버전에서는 JavaScript 코드를 가져와서 관련 변수를 최상위 수준 또는 컨텍스트에서 js_import, js_path, js_set, 지시문과 함께 선언해야 합니다 . 이는 메인 파일 맨 위에 전역 변수를 선언하는 것과 같습니다. 하지만 JavaScript 함수와 변수를 실제로 호출하는 지시문은 자식 컨텍스트에 나타납니다. 예를 들어, 지시문은 HTTP 블록 에 있고 지시문은 Stream 블록에 있습니다. 이렇게 하면 두 가지 문제가 발생합니다.js_varhttpstreamjs_contentlocation{}js_accessserver{}
njs 0.7.7 이상에서는 코드를 가져오고 변수가 사용되는 컨텍스트에서 변수를 선언할 수 있습니다.
HTTP –
이러한 지시어는 컨텍스트뿐만 아니라 컨텍스트에서도 나타날 server수 location있습니다 http.
이러한 지시어는 if 컨텍스트뿐만 아니라 location컨텍스트 에도 나타날 수 있습니다 limit_except.
스트림server - 이러한 지시어는 컨텍스트뿐만 아니라 컨텍스트 에도 나타날 수 있습니다 stream.
특정 사용 사례에 대한 모든 njs 구성을 하나의 파일에 저장하면 코드가 더 모듈화되고 이식성이 좋아집니다.
예를 들어, 이전 njs 버전에서 새 스크립트를 추가할 때는 nginx.conf ( js_import및 필요할 경우 js_path, js_set, 를 추가 js_var)와 JavaScript 함수가 호출되는 파일(여기서는 jscode_local.conf )을 모두 변경해야 했습니다.
njs 0.7.7 이상에서는 util 함수와 관련된 모든 구성이 jscode_integrated.conf라는 하나의 파일에 들어 있습니다 .
실행 컨텍스트에 따라 동작 수정
njs 0.7.7의 여러 가지 새로운 기능을 사용하면 JavaScript 코드가 실행되는 컨텍스트(처리 단계)에 따라 해당 코드의 동작을 수정할 수 있습니다.
HTTP r.internal속성
HTTP 속성은 내부 요청(지시문 을 포함하는 블록 r.internal에서 처리 )에 대해 "true"로 설정된 부울 플래그입니다. 스크립트가 내부 및 비내부 컨텍스트에서 모두 호출할 수 있는 일반 이벤트 핸들러를 사용할 때 플래그를 사용하여 논리를 포크할 수 있습니다.location{}internalr.internal
다음은 내부 요청으로 분류됩니다.
개선된 s.send()스트림 방식
이전 njs 버전에서 Stream s.send()메서드는 컨텍스트에 따라 달라집니다. 데이터를 보내는 방향은 메서드가 호출되는 콜백의 위치(업스트림 또는 다운스트림)에 따라 결정되기 때문입니다. 동기 콜백의 경우 잘 작동하지만( s.send()원래 동기 콜백을 위해 설계됨) .과 같은 비동기 함수에서는 실패합니다 ngx.fetch().
njs 0.7.7 이상에서는 방향이 별도의 내부 플래그에 저장되어 s.send()사용할 수 있습니다.
새로운 fs.FileHandle()객체를 사용한 보다 효율적인 파일 작업
파일 시스템 모듈( )은 파일에 대한 작업을 구현합니다. 모듈 의 fs새 객체 는 숫자 파일 설명자에 대한 객체 래퍼입니다. 객체의 인스턴스는 메서드에 의해 생성됩니다 .FileHandlefsFileHandlefs.promises.open()
이 FileHandle객체를 사용하여 파일 설명자를 가져올 수 있으며, 이는 다음과 같은 용도로 사용할 수 있습니다.
다음 속성이 FileHandle구현되었습니다(각 속성에 대한 필수 인수와 선택 인수에 대한 자세한 내용은 설명서를 참조하세요 ):
다음 메서드는 다음을 지원하도록 업데이트되었습니다 FileHandle(각 메서드의 인수에 대한 정보는 링크된 문서를 참조하세요).
njs를 사용하여 구성을 향상시키세요
njs 0.7.7을 통해 팀이 njs 코드를 작업하고 공유하기가 더 쉬워졌습니다. njs 지시문에 대한 확장된 컨텍스트를 통해 사용자 지정 JavaScript 코드로 NGINX 구성을 더욱 간단하게 개선할 수 있습니다. API 게이트웨이, 역방향 프록시 또는 웹 서버로의 첫 번째 이동을 할 수 있으며, 이는 단순히 또 다른 미들웨어 또는 에지 구성 요소 이상입니다. 스택에 다른 구성 요소를 추가하지 않고도 JavaScript, TypeScript 또는 타사 노드 모듈을 통해 애플리케이션의 일부로 만들 수 있습니다 . 필요한 것은 NGINX뿐입니다!
위 내용과 같이 NGINX Plus 를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
전문가에게 상담받기