meta

메타 정보 및 서버에 종속된 정보를 설정한다. /usr/local/m2/setting.json 다음 영역에 대해 기술한다.

{
  "meta": {
    "version" : "1",
    "group": "",
    "labelGroupToMetrics": true,
    "branch": "",
    "admin": "admin@example.com",
    "defaultHosting": "foo.com"
  }
}
version

현재 버전은 항상 1 이다.

group

관리목적의 노드그룹 이름

labelGroupToMetrics (기본: true)

group 설정이 유효하다면 /metrics API 에서 제공하는 모든 메트릭의 1번째 label 로 group 을 설정한다.

# group 설정이 없는 경우
m2_http_backend_send_size_bytes{host="example.com"} 12345

# group 설정이 있는 경우
m2_http_backend_send_size_bytes{group="image_service", host="example.com"} 12345
branch

설정형상의 브랜치

Note

test , stage , production 처럼 의도를 명시할 뿐 기능성이 있는 것은 아니다.

admin

관리자 정보(메일 또는 이름)를 설정한다.

defaultHosting

요청을 처리할 가상호스트를 찾지못한 경우 선택될 가상호스트를 지정할 수 있다. 설정하지 않거나 일치하지 않다면 404 Not Found 로 응답한다.

setting

{
  "meta": {
    "setting": {
      "deploy": "exclusive"
    }
  }
}
deploy (기본: exclusive)

관리자 정보(메일 또는 이름)를 설정한다.

  • exclusive (기본) 전체 가상호스트를 상호배제적으로 배포한다.

    ../../_images/reload_exclusive.png
  • shared 변경된 가상호스트를 상호배제적으로 배포한다.

    ../../_images/reload_shared.png

history

과거설정 관리정책을 설정한다.

"history": {
  "retention": {
    "days": 60,
    "count": 100,
    "size": 10
  }
}
retention

과거설정을 보관한다. 멀티 속성 중 하나만 만족하더라도 과거 설정을 삭제한다.

  • days (기본: 60일) 시간 기준으로 보관한다.

  • count (기본: 100개) 개수 기준으로 보관한다.

  • size (기본: 10MB) 용량 기준으로 보관한다.

settingTrace

설정 정책M2Live Service Flow 에 영향을 주는 매칭조건 리스트 를 추적한다.

"settingTrace": {
  "enable": false,
  "keyword": "_trace_"
}

Warning

설정이 노출될 우려가 있기에 keyword 는 반드시 바꾸어 사용한다.

사용 예제는 다음과 같다.

# 일반요청
GET /example HTTP/1.1
Host: example.com

# settingTrace 요청
GET /example/_trace_ HTTP/1.1
Host: example.com

요청을 인지하는 시점에 keyword 는 즉시 제거되어 일반요청과 동일하게 처리된다. 응답은 리소스가 아닌 HTTP/1.1 422 Unprocessable Entity 응답코드와 함께 디버깅을 위한 정보가 제공된다.

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
Content-Length: 1752

{
  "sessionId": 2,
  "x-ctx-id": "2205522a-e8e5-460b-9bb7-cfce368f9dde",
  "cachehit": "TCP_CLIENT_REFRESH_MISS",
  "response": {
    "code": 100,
    "headers": [
      { "key": "my-powered-by", "value": "winesoft" },
      { "key": "cookie", "value": "NNB=LS3KUV63E5RV6; NRTK=ag#all_gr#1_ma#-2_si#0_en#0_sp#0;" }
    ]
  },
  "trace": [
    {
      "vhost": "example.com",
      "setting": [
        {
          "path": "hosting.urlRewrites",
          "matchingList": [
            {
              "pattern": "example.com/(.*)?cache=on",
              "replace": "foo.com/#1",
              "accessLogUrl": "replace"
            }
          ]
        }
      ]
    },
    {
      "vhost": "foo.com",
      "setting": [
        {
          "path": "functions.network.http.frontEnd.modify",
          "matchingList": [
            {
              "pattern": "$IP[192.168.4.0/255.255.255.0]",
              "header": "$REQ[x-custom-header]",
              "mode": "unset"
            },
            {
              "pattern": "$HEADER[via]",
              "header": "$REQ[via]",
              "mode": "unset"
            }
          ]
        },
        {
          "path": "functions.network.http.frontEnd.bypass",
          "matchingList": [
            {
              "pattern": "$URL[/example]",
              "action": "bypass"
            }
          ]
        },
        {
          "path": "hosting.fallbacks",
          "matchingList": [
            {
              "resCodes": [ "4xx" ],
              "pattern": "$URL[/(.*)] & $RESHEADER[Content-Type: text/html]",
              "replace": "sorry.example.com/#1"
            }
          ]
        }
      ]
    },
    {
      "vhost": "sorry.example.com",
      "setting": null
    }
  ]
}

Warning

이 기능은 함수체인을 추적하지 않는다. 예를 들어 hyperdims 를 사용한다면 hyperdims 함수로 요청/응답만 추적하며 hyperdims 함수의 내부동작과 그 너머의 콘텐츠 캐싱까지는 추적되지 않는다.