worker_processes auto; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; # 성능 최적화 sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; # Gzip 압축 gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml; # 프록시 캐시 설정 (terrain/tileset용) proxy_cache_path /var/cache/nginx/tiles levels=1:2 keys_zone=tile_cache:100m max_size=1g inactive=24h; # 업스트림 정의 upstream spring_app { server host.docker.internal:8080; keepalive 32; } upstream gis_3d_manager { server 10.100.232.242:3004; keepalive 16; } upstream gis_2d_server { server 10.100.232.241:3004; keepalive 16; } upstream gis_basemap { server 10.100.232.211:8083; keepalive 16; } upstream poi_search { server 10.100.232.242:5000; keepalive 8; } upstream address_search { server 10.100.232.241:8983; keepalive 8; } upstream wind_server { server 10.100.232.242:4444; keepalive 8; } upstream llm_server { server all4solution.iptime.org:14142; keepalive 8; } server { listen 80; server_name localhost; # 타일 요청 캐시 설정 proxy_cache tile_cache; proxy_cache_valid 200 1h; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; # ============================================ # GIS 프록시 (캐시 적용) # ============================================ # 3D 매니저 (terrain, tileset) location /MapPrime3DManager/ { proxy_pass http://gis_3d_manager/MapPrime3DManager/; proxy_http_version 1.1; proxy_set_header Host 10.100.232.242:3004; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Connection ""; # 캐시 헤더 add_header Cache-Control "public, max-age=3600"; add_header X-Cache-Status $upstream_cache_status; # CORS add_header Access-Control-Allow-Origin *; } # 2D 서버 (WMS, WFS) location /MapPrimeServer/map/wms { proxy_pass http://gis_2d_server/MapPrimeServer/map/wms; proxy_http_version 1.1; proxy_set_header Host 10.100.232.241:3004; proxy_set_header Connection ""; } location /MapPrimeServer/map/wfs { proxy_pass http://gis_2d_server/MapPrimeServer/map/wfs; proxy_http_version 1.1; proxy_set_header Host 10.100.232.241:3004; proxy_set_header Connection ""; } location /MapPrimeServer/rest/ { proxy_pass http://gis_2d_server/MapPrimeServer/rest/; proxy_http_version 1.1; proxy_set_header Host 10.100.232.241:3004; proxy_set_header Connection ""; } # WMTS (배경지도) location /MapPrimeServer/map/wmts { proxy_pass http://gis_basemap/Basemap/map/wmts; proxy_http_version 1.1; proxy_set_header Host 10.100.232.211:8083; proxy_set_header Connection ""; add_header Cache-Control "public, max-age=3600"; add_header X-Cache-Status $upstream_cache_status; } # ============================================ # 기타 GIS/검색 서비스 프록시 # ============================================ # POI 검색 location /POISearch/ { proxy_pass http://poi_search/; proxy_http_version 1.1; proxy_set_header Host 10.100.232.242:5000; proxy_set_header Connection ""; } # 주소 검색 location /app/ { proxy_pass http://address_search/app/; proxy_http_version 1.1; proxy_set_header Host 10.100.232.241:8983; proxy_set_header Connection ""; } # 3D 바람길 서버 location /cmm/g3f/windServer/ { proxy_pass http://wind_server/; proxy_http_version 1.1; proxy_set_header Host 10.100.232.242:4444; proxy_set_header Connection ""; } # 기상청 API (HTTPS 프록시) location /sgp/weather/ { proxy_pass https://apihub.kma.go.kr/; proxy_http_version 1.1; proxy_set_header Host apihub.kma.go.kr; proxy_set_header Connection ""; proxy_ssl_server_name on; } # ============================================ # LLM 웹소켓 프록시 # ============================================ location /llmConnection/ws/ { proxy_pass http://llm_server/ws/; proxy_http_version 1.1; proxy_set_header Host all4solution.iptime.org:14142; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # WebSocket 필수 헤더 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 5분 타임아웃 proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; } # ============================================ # LLM HTTP API 프록시 (직접 LLM 서버로) # ============================================ location /llmConnection/api/ { proxy_pass http://llm_server/api/; proxy_http_version 1.1; proxy_set_header Host all4solution.iptime.org:14142; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Connection ""; # 5분 타임아웃 proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; } # ============================================ # LLM API (Spring Boot 프록시 - 백업) # ============================================ location /api/v1/llm/ { proxy_pass http://spring_app; proxy_http_version 1.1; 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_set_header Connection ""; # 5분 타임아웃 (LLM 응답 대기) proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; } # ============================================ # Spring Boot 앱 (나머지 요청) # ============================================ location / { proxy_pass http://spring_app; proxy_http_version 1.1; 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_set_header Connection ""; # WebSocket 지원 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } }