기타
APISIX에서 HTTP 요청 흐름 가로채기
ipxy
2025. 4. 12. 12:57
728x90
✅ 가로채기 (Interception)란?
요청 흐름 가로채기란,
원래 클라이언트가 API 서버로 보내는 HTTP 요청을
- 중간에
- APISIX가 먼저 받고
- 내용을 "가공하거나 따로 복제해서" 다른 데로 보내는 것을 말합니다.
→ 원래 목적지로 가는 걸 막거나 수정하는 건 아님.
→ "보내면서" 또는 "보내기 전에" 추가 행동을 하는 거예요.
방법 1. APISIX 기본 Lua 플러그인 이용 (serverless-pre-function)
- 요청이 들어올 때
- ngx.req.get_body_data() 같은 걸 써서
- 요청 바디나 헤더를 읽은 다음
- 그걸 Kafka 또는 다른 HTTP 서버로 POST 보내는 Lua 코드 삽입
Lua 플로우
-- 요청 바디 읽기
local body = ngx.req.get_body_data()
-- Kafka Producer API (또는 다른 중계 서버)로 HTTP 요청 보내기
local http = require("resty.http")
local httpc = http.new()
local res, err = httpc:request_uri("http://your-kafka-producer-api", {
method = "POST",
body = body,
headers = {
["Content-Type"] = "application/json",
}
})
정리:
- 요청 들어올 때 데이터 읽고
- 그걸 원하는 곳에 추가로 전송하는 것
- 원래 API 서버 호출은 그대로 진행
방법 2. APISIX Plugin Phase Hook 사용
APISIX는 요청 흐름을 여러 단계로 나눕니다:
rewrite | 요청이 백엔드로 가기 전에 수정 |
access | 접근 제어 전에 실행 (여기서 가로채는 게 일반적) |
balancer | 백엔드 서버 선택 |
header_filter | 백엔드 응답 헤더 수정 |
body_filter | 백엔드 응답 바디 수정 |
log | 요청 완료 후 로그 처리 |
가로채기는 주로 rewrite나 access phase에 이뤄집니다.
→ access phase에서 요청 본문을 읽고, Kafka로 추가 발송하고, 원래 API 호출도 진행.
원래 가로채기 추가 후
요청 → 백엔드 | 요청 → APISIX → (Kafka로도 보내고) → 백엔드 |
단순 중계 | 복제 및 추가 전송 + 중계 |
728x90