# ========================================== # 포털에서는 대용량 첨부의 공개 API 를 열지 않는다 — 공개 호스트(SHARE_PUBLIC_URL)를 따로 둘 때 (11단계 — 계약 4절 "공개 호스트") # # 포털 server 의 location ^~ /api/ 블록 **안에** 넣는다(nginx.conf — nginx-env.envsh 의 NGINX_PORTAL_SHARE=closed). # 템플릿이 아니다(/etc/nginx/snippets/share-api-closed.conf). 없는 경로와 같은 404 RES_001(JSON — @api_not_found) — # 백엔드도 같은 판정으로 막는다(두 겹 — modules/file-sharing/public-host.ts). 본문 한도(1m)를 넘는 요청도 JSON 413 FILE_002 다. # 대소문자를 가리지 않는다(~*) — /api/Public-Links/… 도 닫는다(백엔드 라우팅은 대소문자를 가리지 않는다 — nginx.conf 머리말) # [/\x5c] — %5C(인코딩한 역슬래시 — nginx 가 \ 로 풀어 고른다)도 닫는다. 날 \(경로) · # · 0x80 이상 바이트는 server 단계에서 400 이다 # (nginx.conf 의 $request_target_rejected — 백엔드의 url.parse 되읽기가 \ 를 / 로 바꿔 이 닫기를 비켜 갔다, 2026-10-31 리뷰) # ========================================== location ~* ^/api/public-links(?:[/\x5c]|$) { error_page 404 @api_not_found; error_page 413 @api_payload_too_large; return 404; }