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 (기본)
전체 가상호스트를 상호배제적으로 배포한다.shared
변경된 가상호스트를 상호배제적으로 배포한다.
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
}
]
}