Dev
Nginx 에서 Socket.io 세팅하기
믹-아
2023. 2. 11. 01:18
개발 당시에는 localhost:3000 의 주소를 이용해서 nodejs socketio 서버랑 통신했었다.
이후 서버에 올리고 포트번호가 아닌 cname 을 통해서 통신하기 위해서 nginx 세팅을 했다.
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/my.co.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my.co.kr/privkey.pem;
server_name api.my.co.kr;
access_log /var/log/nginx/my-access.log;
error_log /var/log/nginx/my-access.log;
location / {
proxy_pass https://my.co.kr:3000;
}
}
이렇게 api.my.co.kr 을 3000번 포트로 연결해놨다.
그런데 아무리 해도 안되길래
뭐지? ssl 세팅을 잘못했나? 하면서 삽질을 엄청했다.
그러다 그냥 클라이언트에서 3000번 포트 (https://my.co.kr:3000) 로 연결하니 바로 되길래 nginx 쪽이 문제구나 싶었다.
https://socket.io/docs/v3/reverse-proxy/
검색하니 바로 나오더라
해결방법은
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/my.co.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my.co.kr/privkey.pem;
server_name api.my.co.kr;
access_log /var/log/nginx/my-access.log;
error_log /var/log/nginx/my-access.log;
location / {
proxy_pass https://my.co.kr:3000;
}
# 아래 부분
location /socket.io/ {
proxy_pass https://my.co.kr:3000/socket.io/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
코드 블럭의 아래 location /socket.io 부분을 추가해주면 된다.
nginx 로그를 봤을 때 socketio 를 통신하면서 해당 주소의 /socket.io 와 통신해야하는데 이 부분이 문제가 생겨서 그런 듯 하다.