모바일(Bearer JWT)→api·브라우저(세션)→front 공존. front/api 동일 prefix 충돌을 $http_authorization map 으로 해소. 모바일은 루트 업무 prefix 사용(Config.ts 권위). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
75 lines
3.3 KiB
Plaintext
75 lines
3.3 KiB
Plaintext
# itms.zioinfo.co.kr — ITMS 리버스 프록시 (개발서버, Stage B 라이브 반영)
|
|
# 서버(101.79.17.164). 브라우저 진입점 = front(:11020).
|
|
#
|
|
# 구성 (Stage B — 웹 + 모바일 동시 지원):
|
|
# - front(:11020) : 브라우저 JSP 화면 (세션 기반). 기본 경로.
|
|
# - auth(:11000) : OAuth2 인가서버. 모바일 password/refresh grant → /oauth/.
|
|
# - api(:11010) : 업무 REST(Bearer JWT). 모바일 앱이 도메인 경유 직접 호출.
|
|
#
|
|
# ★경로 충돌 해소(실측): front 와 api 가 동일 prefix(/main·/srm·/rem·/sys·/potl 등)를
|
|
# 각각 화면(11020)·REST(11010)로 제공한다. 순수 경로 분기 불가 → **Authorization: Bearer
|
|
# 헤더**로 분기($itms_biz_backend map). 모바일은 항상 Bearer 전송(→api), 브라우저는 세션
|
|
# 쿠키(무 Bearer→front). 이로써 웹/모바일이 한 도메인에서 공존.
|
|
# ※ 모바일 앱(workspace/itms/mobile)은 '/api/' prefix 가 아니라 **루트 업무 prefix**
|
|
# (/oauth·/main·/srm·/rem·/bbs·/cmm·/sta·/sys·/potl)를 사용한다(constants/Config.ts 권위).
|
|
#
|
|
# 선결: front/auth/api 기동 + certbot(--nginx -d itms.zioinfo.co.kr). 미기동 시 502.
|
|
|
|
# 모바일(Bearer JWT)=api(:11010) / 브라우저(세션)=front(:11020) 헤더 기반 분기
|
|
map $http_authorization $itms_biz_backend {
|
|
default http://127.0.0.1:11020;
|
|
"~*^Bearer " http://127.0.0.1:11010;
|
|
}
|
|
|
|
server {
|
|
listen 80;
|
|
server_name itms.zioinfo.co.kr;
|
|
location / { return 301 https://$host$request_uri; }
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl;
|
|
server_name itms.zioinfo.co.kr;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/itms.zioinfo.co.kr/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/itms.zioinfo.co.kr/privkey.pem;
|
|
|
|
client_max_body_size 50m;
|
|
|
|
# 통합 메신저 앱 QR 다운로드 페이지(읽기전용, 중앙 ITSM APK 저장소 재사용)
|
|
location = /mobile-app {
|
|
alias /opt/itms/static/mobile-app.html;
|
|
default_type text/html;
|
|
}
|
|
|
|
# OAuth2 인가서버(:11000) — 모바일 password/refresh grant
|
|
location /oauth/ {
|
|
proxy_pass http://127.0.0.1:11000;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_read_timeout 120s;
|
|
}
|
|
|
|
# 업무 REST(:11010, Bearer) vs 프론트 화면(:11020, 세션) — Authorization 헤더로 분기
|
|
location ~ ^/(main|srm|rem|bbs|cmm|sta|sys|potl)/ {
|
|
proxy_pass $itms_biz_backend$request_uri;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_read_timeout 120s;
|
|
}
|
|
|
|
# 웹 UI (front :11020) — 브라우저 진입점(기본)
|
|
location / {
|
|
proxy_pass http://127.0.0.1:11020;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_read_timeout 120s;
|
|
}
|
|
}
|