유니티 클라이언트를 itch.io에 webGL로 올리니 문제가 발생했다. 이유는 api 통신 간 http를 사용중이여서 불가능하다는 것이었다.
우리 서버는 nginx를 통해 모든 서버를 접속하기 때문에 nginx에만 인증서를 설치해주면 해결되는 문제라 진행했다.
무료이고 쉬운 Let's Encrypt를 사용하였다.
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 입력해주면 된다.
마지막에 키파일을 어디다 만들었는지 뜨는데 잘 적어놓도록 하자.
바로 밑에 과정에서 쓴다.
sudo service nginx restart
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 하면 된다.
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
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
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
위처럼 추가된 것을 확인할 수 있다.
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으로 바꾼다는건 말이 안되는거니까.. 여기까지..