설정 정책

설정기반의 메인 서비스 플로우는 아래와 같다.

Note

setting.jsonJSON Schema (Draft2020-12) 는 아래에서 다운로드 한다.

../_images/serviceflow.png

재시작이 필요한 설정목록

아래 설정들은 서비스 성능과 안정성에 영향을 줄 수 있어 동적변경이 불가능하다.

  • env.properties.memoryUsage

  • env.properties.coreWorkers

  • env.properties.inspection

  • env.network.passiveSockets

  • env.network.http

  • env.network.https

  • env.network.http2

  • env.network.geoip

  • env.rt.localCacheStorage

  • env.rt.properties

변경 후 올바른 적용을 위해 서비스를 재시작해 주어야 한다.

$ m2 restart

CLI & API

CLI와 API로 설정변경을 진행한 경우 notupdated 필드가 추가된다.

{
  "version": "1.1.0",
  "method": "reloadall",
  "status": "OK",
  "result": "accepted",
  "notupdated": [
    {
      "field": "env.properties.memoryUsage",
      "cur": {
         "totalUsableRatio": 100,
         "workingRatio": 60,
         "partition": "1:1"
      },
      "new": {
         "totalUsableRatio": 90,
         "workingRatio": 60,
         "partition": "1:1"
      }
    },
    {
      "field": "env.network.http",
      "cur": {
         "recvBufferSize": 8192
      },
      "new": {
         "recvBufferSize": 16384
      }
    }
  ]
}

setting.feedback

중앙동기화를 통해 재시작이 필요한 설정목록이 변경되면 setting.feedback 포맷parameters.result.notupdated 필드가 추가된다.

{
  "messageVer": "1",
  ... (생략) ...
  "parameters": [
    {
      "url": "http://www.example.com/m2pkg_v10.tgz",
      "result": {
        "version": "22.02.0",
        "method": "deploy",
        "status": "ok",
        "lastModified": "Tue, 15 Oct 2022 12:45:26 GMT",
        "version": 10,
        "notupdated": [
          {
            "field": "env.properties.memoryUsage",
            "cur": {
              "totalUsableRatio": 100,
              "workingRatio": 60,
              "partition": "1:1"
            },
            "new": {
              "totalUsableRatio": 90,
              "workingRatio": 60,
              "partition": "1:1"
            }
          },
          {
            "field": "env.network.http",
            "cur": {
              "recvBufferSize": 8192
            },
            "new": {
              "recvBufferSize": 16384
            }
          }
        ]
      }
    }
  ],
  "setting": null
}

매칭조건 리스트

다음은 매칭조건을 지원하는 기능 테이블이다.

설정

레퍼런스 링크

hosting[].urlRewrites

urlRewrites

hosting[].fallbacks.matchingList[]

fallbacks

hosting[].hook.matchingList[]

hook

functions.network.http.backEnd.urlRewrites[]

backEnd . urlRewrites

functions.network.http.frontEnd.headers.expires.matchingList[]

expires

functions.network.http.frontEnd.headers.modify.matchingList[]

modify

functions.network.http.frontEnd.accessControl.matchingList[]

accessControl

functions.network.http.frontEnd.bypass.matchingList[]

bypass . matchingList

functions.network.http.frontEnd.compression.matchingList[]

compression

functions.network.http.backEnd.headers.modify.matchingList[]

modify

functions.network.cache.cachingKey.queryString.matchingList[]

queryString

functions.network.cache.cachingKey.postMethod.matchingList[]

postMethod

functions.network.cache.ttl.custom

ttl . custom

$URL[...]$URLMATCH[...] 차이

$URL[ ] 은 클라이언트가 요청한 URL을 정규표현식에 따라 매칭/치환한다.

{
   "pattern": "$URL[example.com/download/(.*)/(.*)]",
   "replace": "#1.example.com/#2"
}

이 예제에서 (.*) 조건으로 매칭된 문자열이 #1 , #2 로 치환된다. 따라서 urlRewrites 는 치환을 위해 반드시 매칭이 선행되어야 하기에 “매칭되지 않음”을 의미하는 !URL[] 조건이 지원되지 않는 것이다.

여기에 아래와 같은 URL 필터링 조건이 추가된다면 $URL[ ] 표현으로 지원이 불가하다.

  • example.com/download/ 하위 요청인데

  • example.com/download/us/ 하위 요청이 아니고

  • example.com/download/uk/ 하위 요청이 아닐 때

이런 경우 $URLMATCH[] 로 표현이 가능하다.

{
   "pattern": "$URLMATCH[example.com/download/(.*)] & !URLMATCH[example.com/download/us/(.*)] & !URLMATCH[example.com/download/uk/(.*)] & $URL[example.com/download/(.*)/(.*)]",
   "replace": "#1.example.com/#2"
}

$URL[...] 지원 리스트

$URL 은 단일 조건만 지원한다.

설정

$URL

!URL

표현

목적

hosting[].urlRewrites

O

X

정규표현식

URL 치환

hosting[].fallbacks.matchingList[]

O

X

정규표현식

URL 치환

hosting[].hook.matchingList[]

O

X

정규표현식

URL 치환

functions.network.http.backEnd.urlRewrites[]

O

O

* 표현

URL 매칭

functions.network.http.frontEnd.headers.expires.matchingList[]

O

O

* 표현

URL 매칭

functions.network.http.frontEnd.headers.modify.matchingList[]

O

O

* 표현

URL 매칭

functions.network.http.frontEnd.accessControl.matchingList[]

O

O

* 표현

URL 매칭

functions.network.http.frontEnd.bypass.matchingList[]

O

O

* 표현

URL 매칭

functions.network.http.frontEnd.compression.matchingList[]

O

O

* 표현

URL 매칭

functions.network.http.backEnd.headers.modify.matchingList[]

O

O

* 표현

URL 매칭

functions.network.cache.cachingKey.queryString.matchingList[]

O

O

* 표현

URL 매칭

functions.network.cache.cachingKey.postMethod.matchingList[]

O

O

* 표현

URL 매칭

functions.network.cache.ttl.custom

O

O

* 표현

URL 매칭

$URLMATCH[...] 지원 리스트

  • $URLMATCH[...] 표현은 정규표현식만 사용하며 URL 패턴매칭 용도로만 사용된다.

  • 멀티조건과 부정조건을 모두 지원한다.

설정

$URLMATCH

!URLMATCH

hosting[].urlRewrites

O

O

hosting[].hook.matchingList

O

O

hosting[].fallbacks.matchingList[].pattern

O

O

functions.network.http.frontEnd.accessControl.matchingList[]

O

O

functions.network.http.frontEnd.headers.modify.matchingList[]

O

O

functions.network.http.backEnd.headers.modify.matchingList[]

O

O

기타 지원 리스트

모든 표현은 부정표현도 같이 지원한다.

설정

IP

HEADER

RESHEADER

MIME

METHOD

PROTOCOL

CODE

ORGSTATUS

hosting[].urlRewrites

O

O

X

X

X

O

X

X

hosting[].fallbacks.matchingList[]

X

O

O

X

X

X

X

X

hosting[].hook.matchingList[]

X

X

X

X

O

X

X

X

functions.network.http.backEnd.urlRewrites[]

O

O

X

X

X

O

X

X

functions.network.http.frontEnd.headers.expires.matchingList[]

X

X

X

O

X

X

X

X

functions.network.http.frontEnd.headers.modify.matchingList[]

O

O

O

X

O

X

O

X

functions.network.http.frontEnd.accessControl.matchingList[]

O

O

X

X

X

O

X

X

functions.network.http.frontEnd.bypass.matchingList[]

O

O

X

X

X

O

X

X

functions.network.http.frontEnd.compression.matchingList[]

X

X

X

X

X

X

X

X

functions.network.http.backEnd.headers.modify.matchingList[]

O

O

O

X

O

X

O

X

functions.network.cache.cachingKey.queryString.matchingList[]

X

X

X

X

X

X

X

X

functions.network.cache.cachingKey.postMethod.matchingList[]

X

X

X

X

X

X

X

X

functions.network.cache.ttl.custom

X

X

X

X

X

X

X

O