# nginx.conf 설정 user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 4096; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; map $http_upgrade $connection_upgrade { default upgrade; '' close; } types_hash_max_size 4096; include /etc/nginx/conf.d/*.conf; } # default.conf 설정 server { listen 3000; server_tokens off; location /static { alias "E:/IdeaProjects/thelptalk/talk/sample/prod/talk/"; expires 1s; add_header Cache-Control "public, no-transform"; add_header 'Access-Control-Allow-Origin' '*'; add_header 'ACcess-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,USer-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; autoindex off; } location /stomp { proxy_pass http://ap-block; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # websocket connection alive proxy_read_timeout 36000s; proxy_send_timeout 36000s; # websocket buffer setting proxy_buffer_size 128k; proxy_buffers 8 256k; proxy_busy_buffers_size 512k; # large data process setting client_max_body_size 16M; client_body_buffer_size 16M; #temp file setting proxy_max_temp_file_size 16M; proxy_temp_file_write_size 256k; # request buffer disable proxy_request_buffering off; } location /api { proxy_pass http://ap-block; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Cookie $http_cookie; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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 X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; add_header 'ACcess-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; proxy_buffering off; proxy_request_buffering off; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; # large data process setting client_max_body_size 100M; client_body_buffer_size 100M; proxy_cookie_domain .kospo.co.kr kospo.co.kr; } location /logo { alias /attach/logo/; expires 7d; add_header Cache-Control "public, no-transform"; add_header 'ACcess-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; proxy_cache_valid 200 301 302 7d; proxy_cache_valid 404 1m; autoindex off; try_files $uri $uri/ =404; } location / { root "E:/IdeaProjects/thelptalk/talk/sample/prod"; index index.html; try_files $uri $uri/ =404; } error_page 403 404 500 502 503 504 /error.html; location /error.html { root /usr/share/nginx/html/; } } upstream ap-block { ip_hash; #hash $host consistent; #hash $proxy_add_x_forwarded_for consistent; server 127.0.0.1:8010; #server 10.130.7.63:8010; #server 10.130.7.64:8010; #server 10.130.7.65:8010; } upstream ma-block { server 127.0.0.1:8010; } server { listen 8040; server_name talk.kospo.co.kr; server_tokens off; add_header Strict-Tansport-Security "max-age=63072000" always; client_max_body_size 100M; location /api/manual/view { proxy_pass http://ap-block; expires 7d; add_header Cache-Control "public, no-transform"; proxy_cache_valid 200 301 302 1d; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Cookie $http_cookie; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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 X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; add_header 'ACcess-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; } location /static { alias /appl/helptalk/talk/talk/; expires 1s; add_header Cache-Control "public, no-transform"; add_header 'Access-Control-Allow-Origin' '*'; add_header 'ACcess-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,USer-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; autoindex off; } location /logo { alias /attach/logo/; expires 7d; add_header Cache-Control "public, no-transform"; add_header 'ACcess-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; proxy_cache_valid 200 301 302 7d; proxy_cache_valid 404 1m; autoindex off; try_files $uri $uri/ =404; } location /stomp { proxy_pass http://ap-block; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # websocket connection alive proxy_read_timeout 36000s; proxy_send_timeout 36000s; # websocket buffer setting proxy_buffer_size 128k; proxy_buffers 8 256k; proxy_busy_buffers_size 512k; # large data process setting client_max_body_size 16M; client_body_buffer_size 16M; #temp file setting proxy_max_temp_file_size 16M; proxy_temp_file_write_size 256k; # request buffer disable proxy_request_buffering off; } location /api { proxy_pass http://ap-block; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Cookie $http_cookie; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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 X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; add_header 'ACcess-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; proxy_buffering off; proxy_request_buffering off; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; # large data process setting client_max_body_size 100M; client_body_buffer_size 100M; proxy_cookie_domain .kospo.co.kr kospo.co.kr; } location /swagger-ui { proxy_pass http://ap-block; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Cookie $http_cookie; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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 X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; } location / { expires 1s; root /appl/helptalk/talk_vue; index index.html index.htm; add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Expires 0; } location ~* ^/web* { return 301 /; } error_page 403 404 500 502 503 504 /error.html; location /error.html { root /usr/share/nginx/html/; } } # k6 부하테스트 docker run --rm -v /volume5/dev/k6:/k6 k6-stomp --console-output=/k6/output.log /k6/k6.js docker run --name xk6-stomp -v "/volume5/dev/k6:/xk6" grafana/xk6 build \ --with github.com/walterwanderley/xk6-stomp docker run --rm -v "/volume5/dev/k6:/xk6" -w /xk6 grafana/xk6 build --with github.com/walterwanderley/xk6-stomp docker run --rm -v "/volume5/dev/k6:/xk6" -w /xk6 debian:bullseye-slim ./k6 run /xk6/script.js # rabbitmq stomp 실행 rabbitmq-plugins enable rabbitmq_stomp # rabbitmq 포트 설명 5672 - AMQP: 기본 AMQP (Advanced Message Queuing Protocol) 포트 클라이언트 애플리케이션이 메시지를 주고받는 데 사용 5671 - AMQP/SSL: SSL을 통한 암호화된 AMQP 연결에 사용 15672 - HTTP API 및 관리 UI: RabbitMQ 관리 플러그인용 웹 인터페이스 HTTP API 엔드포인트 61613 - STOMP: STOMP (Simple Text Oriented Messaging Protocol) 클라이언트 연결용 STOMP 플러그인이 활성화되어 있어야 함 61614 - STOMP/SSL: SSL을 통한 암호화된 STOMP 연결에 사용 1883 - MQTT: MQTT (Message Queuing Telemetry Transport) 클라이언트 연결용 MQTT 플러그인이 활성화되어 있어야 함 8883 - MQTT/SSL: SSL을 통한 암호화된 MQTT 연결에 사용 15674 - STOMP over WebSockets: 웹 브라우저에서 STOMP 프로토콜을 사용하기 위한 WebSocket 연결 15675 - MQTT over WebSockets: 웹 브라우저에서 MQTT 프로토콜을 사용하기 위한 WebSocket 연결 25672 - 노드 간 및 CLI 도구 통신: RabbitMQ 노드 간 통신 및 rabbitmqctl 같은 CLI 도구와의 통신에 사용 4369 - epmd (Erlang Port Mapper Daemon): Erlang 노드 검색을 위해 사용 이 중에서 STOMP 관련 포트는 다음과 같습니다: 61613: 일반 STOMP 연결 61614: SSL을 통한 STOMP 연결 15674: WebSocket을 통한 STOMP 연결 # 외부 연계 api url: http://{url}/api/message method: post parameter { "type": "MESSAGE", "talkId": "0b98e848d5c548a086a9ebf67223416c", "message": "작업지시번호 [ORD2024828912] 진행 완료" } result 200 : success # pg_bigm 설치 빌드 도구 postgresql-devel build-essential gcc make git pg_bigm tar.gz 파일 다운로드 make sudo make install postgresql.conf shared_preload_libraries = 'pg_bigm' postgresql 재시작 모듈 활성화 create extension pg_bigm; 활성화 된 모듈 조회 select * from pg_extension index 생성 create index idx_talk_message_full_search on talk_message(message text_pattern_ops);