개발 당시에는 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 와 통신해야하는데 이 부분이 문제가 생겨서 그런 듯 하다.

+ Recent posts