배포 환경에서 Nginx 사용 시 추가 설정
이전 글에서 STOMP를 이용한 실시간 채팅을 구현했다.
로컬에서 테스트 할 때는 문제 없겠지만, 배포 환경에 따라 웹소켓을 이용하기 위해서는 추가 설정을 해야할 수 있다.
만약 이 글의 서비스에서 적용된 Nginx 관련 설정이 궁금하다면 이 글을 참고한다.
현재 우리 애플리케이션에서는 Nginx를 리버스 프록시로 사용하여 SSL을 적용하고 있다.
즉, Nginx를 사용하여 특정 도메인의 특정 포트로의 접근을 EC2 퍼블릭 IP로 포워딩 시켜주고 있다.
HTTP 요청일때는 별 문제 없지만 웹소켓은 HTTP와는 다른 프로토콜이므로 포워딩 시켜줄 때 추가 설정을 해줘야 한다.
101 Switching Protocol
웹소켓을 사용할 때 요청 헤더를 보면 아래와 같이 101 Switching Protocol 요청을 보내고 있다.
요청 URL은 SSL을 적용했으므로 HTTPS 처럼 보안이 적용된 wss://www.midcon.store/ws 이다.
여기서 요청 헤더를 보면 Connection, Upgrade 헤더가 담겨 있는걸 확인할 수 있다.
이 요청을 통해 HTTP 요청에서 웹소켓 프로토콜(WS)로 전환 을 요청하는 것이다.
따라서 EC2의 퍼블릭 IP 주소로 포워딩 해줄 때도 Connection, Upgrade 헤더를 설정 해줘야 한다.
이전 글에서 WebSocketConfig를 설정할 때 웹소켓 요청 엔드포인트를 /ws로 해두었다.
그러므로 /ws 경로로 들어오는 요청에 Connection, Upgrade 헤더를 설정해주면 될 것이다.
Nginx 추가 설정
Nginx를 설정 해주는 방식은 여러 가지가 있겠지만 본인은 sites-available/default 파일을 직접 수정했다.
추가 설정할 부분은 아래와 같다.
location /ws {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
설정 후 443번 포트 관련 설정은 아래 사진과 같다.
Nginx 설정 시 location 순서를 고려해야할 수도 있지만 여기서는 "/ws"와 "/" 설정의 순서는 상관없을듯 하다.
아래에 HTTP 요청을 리다이렉트 하는 부분은 어차피 certbot이 자동으로 설정해주는 부분이니 생략했다.
/etc/nginx/sites-available/default
Nginx 설정을 해주고 난 뒤에는 늘 nginx 를 다시 실행해줘야한다.
아래 명령어로 Nginx를 다시 실행하면 설정값이 적용 돼서 웹소켓을 사용할 수 있을것이다.
sudo service nginx restart
참고자료
nginx 에서 WebSocket Proxy 설정하기
Nginx를 이용하여 websocket 연결 요청을 websocket 전용 url로 proxy 할 필요가 생겨서 기록을 남깁니다. 환경 nginx 1.18ver cent os 7 본론 저 같은 경우 9000번 포트로 들어오는 신호를 http://서버EndPoint/socket/tes
shinwusub.tistory.com
'API 만들어 보기 > 실시간 채팅' 카테고리의 다른 글
실시간 채팅 2: STOMP로 실시간 채팅 구현 - Next.js 코드 (0) | 2024.04.11 |
---|---|
실시간 채팅 1: STOMP로 실시간 채팅 구현 - SpringBoot 코드 (0) | 2024.04.09 |