개발 당시에는 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 와 통신해야하는데 이 부분이 문제가 생겨서 그런 듯 하다.
'Dev' 카테고리의 다른 글
[Nginx] 403 forbidden ( 13 : permission denied ) (48) | 2021.11.23 |
---|---|
[Nginx] 에러 로그 실시간 확인 하기 (51) | 2021.11.23 |
Fail2ban 설치 (47) | 2021.06.07 |
[Raspbian] 라즈베리 파이 VNC 접속하기 (14) | 2021.03.17 |
[Linux] ssh server 자동 실행 (19) | 2021.02.16 |