Nginx 리버스 프록시 환경에서 WSS 연결 시 SSL 프로토콜 에러 해결하기
- sanghoroh
- 4월 3일
- 1분 분량

오늘은 Nginx 리버스 프록시 환경에서 WSS(WebSocket Secure) 연결 시 발생하는 SSL 프로토콜 에러에 대한 해결 방법을 공유하고자 합니다.
문제 상황
다음과 같은 구조에서 WSS 연결을 시도할 때 SSL 프로토콜 에러가 발생합니다.
server.js: HTTP (8080) 서버 실행
Nginx: HTTPS (443) 요청을 HTTP (8080)으로 프록시
이 구조는 브라우저 또는 Twilio와 같은 클라이언트가 WSS로 연결을 시도할 때 SSL 프로토콜 에러를 발생시킵니다.
원인 분석
이 문제는 Nginx가 HTTPS 요청을 받아 HTTP로 프록시하면서 발생합니다. WSS는 SSL/TLS 프로토콜을 사용하여 암호화된 통신을 수행하지만, Nginx가 HTTP로 프록시하면서 암호화된 연결이 해제되기 때문에 클라이언트와 서버 간의 SSL 프로토콜 불일치가 발생합니다.
해결 방법
이 문제를 해결하기 위해서는 Nginx에서 WSS 요청을 올바르게 프록시하도록 설정을 변경해야 합니다. 다음은 Nginx 설정 파일의 예시입니다.
Nginx
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
주요 설정 항목
proxy_http_version 1.1;: HTTP 1.1을 사용하여 WebSocket 연결을 지원합니다.
proxy_set_header Upgrade $http_upgrade;: Upgrade 헤더를 전달하여 WebSocket 연결을 요청합니다.
proxy_set_header Connection 'upgrade';: Connection 헤더를 upgrade로 설정하여 WebSocket 연결을 유지합니다.
proxy_cache_bypass $http_upgrade;: WebSocket 연결 시 캐시를 우회합니다.
위 설정을 Nginx 설정 파일에 추가하고 Nginx를 재시작하면 WSS 연결 시 SSL 프로토콜 에러를 해결할 수 있습니다.
주의 사항
yourdomain.com, /path/to/your/certificate.crt, /path/to/your/private.key는 실제 환경에 맞게 수정해야 합니다.
WebSocket 연결을 위해 server.js에서도 필요한 설정을 추가해야 할 수 있습니다.
결론
Nginx 리버스 프록시 환경에서 WSS 연결 시 SSL 프로토콜 에러는 Nginx 설정 변경을 통해 해결할 수 있습니다. 위 해결 방법을 참고하여 안정적인 WebSocket 서비스를 구축하시기 바랍니다.
해시태그
Comments