본문 바로가기

Memo & Plan

라즈베리파이 3B+ 에 Nginx와 HTTPS(SSL/TLS) 구성하기를 가장한 삽질 일기.

반응형
우선 똑같은 실수를 다시 반복하지 않기 위해 기록을 남긴다.
참 습관이란 게 고마울 때도 많지만 가끔 실수를 했는지 조차 모르게 만드는 것 같다...

 

 

1. 서론

우선 내 목표는 포트폴리오용 API 서버를 구현하는 것이 목표였고,

Nginx로 로드밸런서 및 Reverse Proxy를 구성해서 Backend 서버들을 묶어줄 생각이었다.

 

Nginx를 선택한 것은 원래 Apache Mod_Proxy를 걷어내고선 똑같은 실수를 다시 반복하지 않기 위해 기록을 남긴다.

참 습관이란 게 고마울 때도 많지만 가끔 실수를 했는지 조차 모르게 만드는 것 같다...

 

우선 내 목표는 포트폴리오용 API 서버를 구현하는 것이 목표였고,

Nginx로 로드밸런서 및 Reverse Proxy를 구성해서 Backend 서버들을 묶어줄 생각이었다.

 

Nginx를 선택한 것은 Apache C10K 문제에 대한 글을 읽고, 공부할 겸해서 원래 사용하던 Apache Mod_Proxy를 걷어내고 Reverse Proxy를 사용해보기 위해서였다.. 또 한창 핫하게 많이들 사용하는 것으로 들어서 호기심도 좀 있었다.

어차피 Frontend는 Vercel에 배포할거니 HA구성을 생각을 하고 도입을 했던 것이다. (사실 Let's Encrypt만 잘되믄...ㅎㅎ)

 

자꾸 이야기가 딴길로 새는 것 같지만 또 자세히 안알아보고 공부하면 좋지 하면서 도입한거라...
여기서 몇 가지 문제가 생긴다...

 

2. NGINX 도입 후 문제 발생 (주저리주저리..)

애초에 나는 HA 및 Reverse Proxy 사용이 목표였다.. 그런데 애초에 염두해 두었던 HA 기능을 보다가 문제가 생겼다...

그래도 기존에 쓰던 라즈베리파이 3B+에 우분투 올려서 계속 쓰고 있었기 때문에 우분투는 새로 공부하는 생각으로 버전만 올려주었다..

이전에 깔아둔 우분투 버전이 EOL 코앞... 이기도 했고... ㅎㅎ
예전 같았으면 다른 테스트 서버와 맞춰서 CentOS로 갈수도 있었겠지만...
다들 아시다시피 그 친구는 보내줘야해서
Rocky Linux를 잠시 생각했으나 지금은 새로운 환경에 익숙해지기도 시간을 할애하기도 힘든 상황이기에...
그래도 계속 사용해온 우분투 서버버전으로 결정!
(어차피... 라즈베리파이 말고 좀 쓸만한 서버들은 도커로 하면 리눅스 종류는 그렇게 크게... 방해가 안되니까... )

 

health check 기능을 쓰려고 보니 뭔 Nginx Pro를 구입하라고 한다???

분명 오픈소스로 유명한 것으로 알고 있었는데... 뭔... 찾아보니 F5 라고 하는 곳에서 Pro버전을 판매하고 있었다.

아.. 기본버전은 오픈소스가 맞았다 그래서 쓰는 건 상관 없는데... health check나 몇가지 기능들은 유료...

누가 health check 가능한 걸로 컴파일해서 쓸 수 있게 작업해 둔 것도 있는데..

막상 써보니 버전업도 빠릿하지 않고, 컴파일 해서 쓰는거라.. 그냥 apt install 해서 쓰는거랑 좀 차이가 있었다... 

 

여기서 멈췄어야했다... 어차피 대안도 있고, C10K가 발생할만큼 방문자도 없어서 상관 없는 것을 아는데...

문제 발생하면 파고드는 성격이라... 또 깜빡... 정신 못차리고 컴파일까지 해서 깔아버렸다...

 

그런데... 요즘 쓰는거랑 설정파일 경로 같은 게 차이가 좀 있네? 옛날 방식인지... conf파일 하나에 설정 다 때려 박혀있고... sites-available 경로도 없음...

 

 

그냥 NGINX는 밀어버렸다... HA는 그냥 나중에 HAProxy나 Spring Cloud 구성을 따로 하기로 하고...

어차피 Backend만 구성하고 거기에 Spring Authorization Server 구성할거라...

일단 Reverse Proxy랑 로드밸런싱(라운드로빈) 구성만 하기로 했다..

그래도 넘어진김에 재정비하고 갈려고 기존에 회사 일이 바빠 못했던 홈서버 ip 대역정리나 해야겠다 싶었다...

 

3. NGINX 재설치하고 또.또.또. 문제 발생

깔끔하게 하고 싶어서 컴파일버전 nginx나 기존 nginx 설치했었던 것들을 완전 클린하게 지워줬다.

그리고 홈서버나 개발 관련 서버 장비들은 DHCP 대역 밖으로 빼기로 했다(일단 지금 작업중인 라즈베리파이만!).

 

... nginx 재설치 및 재설정 후 https까지 잘 동작하는 것을 확인! ...

cd /etc/netplan
network:
    version: 2
    ethernets:
        renderer: networkd
        eth0:
            dhcp4: false
            addresses:
                - x.x.x.x/24
            routes:
                - to: 0.0.0.0/0
                  via: x.x.x.x
            nameservers:
                addresses:
                    - x.x.x.x
                    - x.x.x.x
            optional: true​
sudo netplan apply

 

여기서 인증서 날짜가 뭔가 갱신이 안되어 있길래... 뭐지 싶었다..

sudo certbot certificates
sudo crontab -l

 

확인해보니 crontab도 정상적으로 등록되어 있는 상황...

sudo certbot renew --dry-run

 

읭...? 안된다? 아래의 에러가 똭!!!

The requested nginx plugin does not appear to be installed

 

하... 내가 nginx 지우다 완전 깔끔히 지우고나서 뭘 덜 깔았구나... 

 sudo apt install python3-certbot-nginx

 

아.. 맞다... 이거 지웠었지.. 깔아야겠다.... (Enter)

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

 

 

sudo apt install update
sudo apt install python3-certbot-nginx
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

 

아 왜!!! 왜 때문에!! https 웹페이지 접속도 안되고.... 어디부터 잘못한거지?

ifconfig

 

... 생략 ...
netmask 255.255.255.0
...

 

아......... 멍청한 건 나였다...

ip 대역 정리하면서... 습관적으로 CIDR를 x.x.x.x/24 로 적어놨네... 이런... 범인은 나놈...

DHCP 풀도 늘릴 겸 전체 IP를 싹 정리한 게 화근...

 

근데 웃긴 건 윈도우PC나 라우터나 다른 것들은 다 255.255.0.0, x.x.x.x/16로 안틀리고 다 맞춰놓고,

맨 마지막에 작업한 라즈베리파이는 x.x.x.x/24로 해놨네.... 이래서 습관이 무서운가보다...

 

... python3-certbot-nginx 설치 후 인증서 갱신 ...

sudo certbot renew --renew-hook="sudo systemctl restart nginx"

sudo certbot --nginx -d www.도메인.com -d api.도메인.com
sudo ln -s /etc/nginx/sites-available/www.도메인.com /etc/nginx/sites-enabled/
Could not automatically find a matching server block for login.withuscloud.com. Set the `server_name` directive to use the Nginx installer.

 

바로 되넹.... nginx 설정도 맞춰주니 모든 게 정상화...

authorization server를 위한 도메인도 추가해주었다...

마지막 빨간 글은 이미 알고 있는 내용으로.. 인증서 발급할 때 도메인 두 개 동시에 입력해서 자동으로 설정등록이 안된다는 내용이다. 나중에 nginx 설정 잘 보면 되는거라 에러가 아닌 것! server_name 구분 해주면 된다..

쓰다보니 무슨 개발자가 아니라 인프라 담당자가 쓴 글처럼 보이네... 그래도 개인 서버니까 공부한 샘 치자...

4. 결론

아... 허탈하다....