[TIL] 24.12.13 FRI

GDORI·2024년 12월 13일
0

TIL

목록 보기
131/143
post-thumbnail

HTTPS

유니티 클라이언트를 itch.io에 webGL로 올리니 문제가 발생했다. 이유는 api 통신 간 http를 사용중이여서 불가능하다는 것이었다.
우리 서버는 nginx를 통해 모든 서버를 접속하기 때문에 nginx에만 인증서를 설치해주면 해결되는 문제라 진행했다.
무료이고 쉬운 Let's Encrypt를 사용하였다.

Let's Encrypt를 이용하여 nginx 서버에 인증서 설치

Certbot 설치

sudo apt update
sudo apt-get install letsencrypt -y

root 계정으로 서트봇을 설치해준다. 호스팅 업체를 이용한다면 root 계정을 쓸 수 없을 것이니 다른 방법을 물색해야...

인증서 생성

cd /root
sudo service nginx stop 
certbot certonly --standalone -d 본인 도메인 -d www.본인 도메인 -d api.본인 도메인

증명할 도메인만 -d 붙이고 적어주면 된다. 만약 example.com만 받으려면
certbot certonly --standalone -d example.com 해주면 된다.

처음 이메일을 묻는데 이메일 적어주고 다음 질문들은 다 Y 입력해주면 된다.
마지막에 키파일을 어디다 만들었는지 뜨는데 잘 적어놓도록 하자.
바로 밑에 과정에서 쓴다.

nginx 재기동

sudo service nginx restart

nginx conf파일에 ssl 인증서 연동

http {
    server {
        listen 5555 ssl;
        server_name 본인도메인;

        ssl_certificate /etc/letsencrypt/live/본인도메인/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/본인도메인/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/본인도메인/chain.pem;

        location / {
            proxy_pass 프록시 할 서버;  # 프록시 대상 서버
            proxy_set_header Host $host;       # 클라이언트 Host 헤더 전달
            proxy_set_header X-Real-IP $remote_addr;  # 클라이언트 IP 전달
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 프록시 체인 전달
        }
    }
}

나의 경우 5555번 포트로 연동이 되어있어 저렇게 써있지만, 보통의 경우 listen 443 하면 된다.

문법 테스트 후 config 적용

sudo nginx -t 
sudo nginx -s reload

문제 발생

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:8

문법 테스트 시 위의 문제가 발생했다. 사유는 stream을 쓰기 위해 패키지 설치가 아닌 소스 컴파일 설치를 했기 때문에 ngx_http_ssl_module 모듈이 빠진 상태로 설치되어 읽지 못하는 것 이었다.
어찌하긴.. 재설치 해야지

현재 버전 불러오기

sudo nginx -v

nginx 소스 다운로드

wget http://nginx.org/download/nginx-<VERSION>.tar.gz
tar -xzvf nginx-<VERSION>.tar.gz
cd nginx-<VERSION>

VERSION은 위에서 조회한 현재 사용중인 버전을 적어주면 된다. (ex: 1.27.3)

옵션 설정하기

./configure --prefix=/usr/local/nginx \
            --with-stream \
            --with-http_ssl_module

본인의 경우 --with-stream 모듈을 사용중이었기 때문에 적어주었지만, 없다면 밑에 ssl 모듈만 적으면 된다.

재컴파일

make

nginx 실행 파일 교체

sudo systemctl stop nginx # 서비스 종료
sudo cp objs/nginx /usr/local/nginx/sbin/nginx # 새로운 바이너리 복사
/usr/local/nginx/sbin/nginx # nginx 재기동

나는 nginx를 저 위치에 설치해서 위처럼 재기동 하지만 패키지 또는 사용자가 경로를 지정해서 설치한 경우엔 nginx만 쳐도 된다.

확인

/usr/local/nginx/sbin/nginx -V
# 또는
nginx -V
configure arguments: --prefix=/usr/local/nginx --with-stream --with-http_ssl_module

위처럼 추가된 것을 확인할 수 있다.

문제발생 2

https 문제를 해결하니 CORS 문제가 발생해 추가해주고 게임을 해보려고 하는데..

SocketException: Success
  at System.Net.Sockets.Socket..ctor (System.Net.Sockets.AddressFamily addressFamily, System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType) [0x00000] in <00000000000000000000000000000000>:0 
--- End of stack trace from previous location where exception was thrown ---

위와 같은 문제가 발생한다.
찾아보니...... TCP와 같은 저수준 네트워크 프로토콜의 경우 브라우저로는 불가능하기 때문에 나타나는 증상이란다.
맞지.. 안되겠지..
유저테스트를 위해 TCP 로직을 webSocket으로 바꾼다는건 말이 안되는거니까.. 여기까지..

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글