본문 바로가기

Architecture

Win10에서 Apache 2.4와 Certbot(https) 그리고 왜 안돼?

반응형

1. OneDrive와 싸움

 

우선 글쓰기에 앞서 뻘짓으로 많은 시간을 날려먹었다. 이게 다 전에 겪었던 일 이었던 것 같은데...

당시 손으로 기록을 남겼거나 아니면 바쁘단 핑계로 기록을 남기지 않은 것 같다.

 

우선 OneDrive 놈이 또 사고를 쳐서(깔끔하게 사용 못하는 내 잘못이겠지만 ㅠㅠ) 개인 PC에 테스트 환경 구성을 다시 진행했다. Apache는 기존에 있던 것을 그대로 사용하려고 하는데. 분명 전에 구동해서 몇번 테스트를 진행했는데, 이게 또 오늘 하려니까 안돌아가는거다. 내 예상으로는 직전에 그만두었던 직장 노트북에 개인 MS Office랑 OneDrive가 설치되어 있었는데. 로그아웃을 해두고 나왔음에도 뭔가의 이유로 다시 붙은 것 같다. 그러면서 OneDrive가 뭘 또 업데이트 한게 아닌가 싶다. 그나마 다행인건 오늘 회사에서 노트북 포멧할건데 혹시 중요한 자료 같은 거 없냐고 연락이 왔었는데, 뭐... 일단 개인 자료는 잘 백업 받았었고 회사 자료도 정리는 해뒀으니 문제는 없을 것 같았다. 그 후 내 개인 MS 계정을 접속해보니 왜, 뭐 때문에, 역시나... 디바이스 항목에 이전 노트북이 다시 붙어있었다. 뭐지...

 

어차피 포멧은 해주신다고 쳐도 혹시나 이게 문제인가 싶어 다시 MS Office 디바이스 로그아웃은 시켰고, 다시 Apache 세팅하는걸로...

 

2. Windows와 싸움

 

Apache를 다시 세팅하려고 httpd.exe를 실행하는데. 웬걸? 또 안된다... 하... 그래서 지난 번 개인 PC에서 세팅할 때도 그랬으니 뭐 익숙하게 몇가지를 진행해봤다.

 

httpd -k restart

 

Enter 딱! 했는데. 엉? 또 안된다.

 

하 설마 또 포트 열린 상태로 뻗었나?

 

netstat -ano

 

Enter 딱! 했는데. 엉? 80포트가 없어?

 

아오... 그 와중에 윈도우10 검색 버튼 맛이 가질 않나, 시작버튼은 열린 채로 안닫히고, 아오.... 버벅버벅 갑자기 창 하나 클릭해서 타이핑 할라고 하는데 활성창 전환도 제대로 안되고... 진짜 골고루 사람을 괴롭혀서...

또 이놈 문제인가 싶어서 바로 win + x 눌러서 관리자 모드 파워쉘을 열었다...

 

Dism /online /cleanup-image /restorehealth 

sfc /scannow

 

Enter 때리고 기다리다가 복구 완료된 것 확인하고 할라니까 윈도우 시작버튼, 검색버튼 정신은 차린 듯한데.. 아파치는 여전히 안되넹..??? 아 진짜 뭐지??

 

services.msc

 

서비스 찾는데... 어? 아파치가 없다? 그렇다... 기록을 떠나서 평소 항상 걸리던 게 이것들 이었으니 또 이거겠거니... 하고 제일 먼저 확인해 볼 걸 확인을 안한거다.

 

아 근데 진짜 웃긴 건 httpd.exe 실행을 하면 잠깐 뜨는 것처럼 되더니 cmd가 뻗고 먹통이 되고 닫히지도 않고 Ctrl + C도 안먹고 X버튼으로 닫으려 해도 안닫히고 버벅이는거다. 그러다 윈도우 재부팅 한 번 해줬더니 이젠 그냥 오류를 뱉어내는데... 엥 뭔 소리지?

 

AH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using xxxx::44ac:xxxx:xxxx:xxxx. Set the 'ServerName' directive globally to suppress this message

 

?????? 네??? 재부팅부터 다시 해보자...

 

[Thu Mar 30 18:42:47.324707 2023] [mpm_winnt:error] [pid 12432:tid 468] (OS 2)지정된 파일을 찾을 수 없습니다. : AH00436: No installed service named "Apache2.4".

 

예?? 제가 뭘 잘못했죠???

하.. 일단 No installed가 갑자기 뜨는 게 마음에 걸리니 혹시나... 진짜 혹시나 싶은 마음에....

 

httpd -k install

 

Enter !!! 제발!!!

 

Installing the 'Apache2.4' service The 'Apache2.4' service is successfully installed. Testing httpd.conf.... Errors reported here must be corrected before the service can be started.

 

됐다... 허허 바로 다시 httpd.exe 실행하니 정상 동작한다.... 물론 당시에 작업해뒀던 설정들은 다 그대로 잘 살아있었다...

진짜 왜? 아오... 쓰잘데기 없는데에 시간을 엄청 낭비했다... 잘되던 게 왜 갑자기 이러냐구... 잘 해결은 됐는데도 기쁘지는 않았다...

 

3. 이제 진짜 Certbot(HTTPS) 적용하자

 

돌아돌아 드디어 본론으로 왔다. Genesys Cloud WebRTC SDK 테스트할 일이 있어서 HTTPS 환경이 필요했다. 사설인증서 같은거로 해도 동작은 하는데, 뭐 어쨌든 필수니까 한 번 하는거 계속 쓴다는 생각으로 Certbot(Let's Encrypt)으로 해야겠다고 생각했다. (Genesys Github에서도 OpenSSL로 테스트 진행하는 것으로 보이지만...) 최근에 도메인이 좀 바뀌어서 그것만 수정하면 되겠거니 싶어서 cmd로 가서 기존 certbot을 좀 보려고 버전을 쳐봤다.

 

certbot --version

 

ㅎㅎㅎㅎㅎ 없다...? ㅎㅎㅎ 진짜 뭐지....??? C드라이브는 OneDrive 상관 없을건데?? 진짜 뭐지 싶었다...

그래서 새로 다운 받으려다가 갑자기 드는 생각이 다운로드 폴더에 없으면 진짜 내가 막 혼자 꿈꾼건가? 싶어서 바로 들어가봤다... 진짜 웃긴 건 certbot 설치파일이 들어있네? 그리고 Apache에 Mod_Proxy 설정을 해둔 것도 그대로인데???

진짜 뭔지 모르겠다... 이전 노트북에서 공부했던 걸 착각하는건줄 알았는데.. 그건 또 아닌 것 같기도 하다...

 

어쨌든 어찌저찌 다시 설치하고 내 공유기에서 80, 443 포트포워딩 걸어준 다음에 namecheap 들어가서 도메인에 내 DDNS를 붙여주었다. (Certbot - https://certbot.eff.org/instructions?ws=apache&os=windows&tab=standard) 

 

Certbot Instructions

Tagline

certbot.eff.org

certbot certonly --standalone

 

동의, 동의, 도메인 입력.. 그리고 물론 보안설정 잘 해주었고, 이제 진짜 붙겠지?

 

ㅎㅎㅎㅎㅎㅎ Apache 설정에 도메인 바뀐 거랑 인증서 경로 바뀐 것 적용 안해서 또 잠깐 멍타임을 갖은 뒤 ㅎㅎㅎ

드디어 붙었다.. 드디어 보이는 It's works 하 ㅋㅋㅋㅋㅋㅋ

 

내가 볼 때 [200 OK], It's works, Hello World 얘들 주기적으로 봐주면 우울증 같은 거 걸릴 틈도 없을 것 같다는 생각이 든다.

 

물론 Certbot으로 세팅했기 때문에 해당 인증서는 3개월 짜리이다. 그래서 이전에 우분투 서버나 CentOS에 설정할 때는 cron으로 자동 갱신 설정해두고 신경끄고 살았었는데, 일단 지금은 냅뒀다가 다음에 하기로 했다.

 

4. Apache Config

 

혹시나 나중에 까먹을 수 있으니 아파치 설정도 좀 적어둬야겠다. 오늘은 그냥 Apache 위에 정적 HTML 올려서 사용을 했는데, 보통 Mod_Proxy 설정을 이용해서 작업을 많이 하고 있었다. 그것에 관해 내가 다시 기억하기 위해 키워드만 남겨본다.

 

우선 Apache2.4 conf 폴더에서 httpd.conf 파일에 가서 아래의 항목들을 주석해제 해준다.

 

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Include conf/extra/httpd-vhosts.conf

 

다음은 conf 폴더에서 extra 폴더로 들어가면, httpd-vhost.conf 라는 파일이 있다. 여기서도 아래의 항목들을 설정해주자.

 

<VirtualHost *:443> 
  ServerName yourdomain.com 
  ServerAlias yourdomain.com 
  SSLEngine on
  SSLCertificateFile "C:\Certbot\live\yourdomain.com\fullchain.pem"
  SSLCertificateKeyFile "C:\Certbot\live\yourdomain.com\privkey.pem"
  
  SSLProxyEngine on
  ProxyRequests off 
  ProxyPreserveHost On 
  
  <Location /gc>
    ProxyPass http://localhost:5500 
    ProxyPassReverse http://localhost:5500
  </Location> 
  <Location /py>
    ProxyPass http://localhost:8501
    ProxyPassReverse http://localhost:8501
  </Location>
</VirtualHost>

 

물론 80포트로 설정도 되긴 하지만 난 애초부터 443포트 HTTPS를 사용하는 것이 목적이었으니까. 여기까지만 쓰겠다.

이 mod_proxy 설정을 걸어주게 되면 Nginx의 리버스 프록시(Reverse Proxy)같은 효과를 볼 수 있다. 서브도메인만 다르게 설정해서 구분해서 API Server를 라운드로빈으로 돌린다거나, 지금 내가 한 것처럼 Location테그를 통해 하위주소로 구분지어 보내는 것도 가능하다. 참 여러모로 장점이 많은 설정이다. 다만 단순하게 세팅 가능한데 억지로 이런 방식을 쓰는 건 좋지 않다고 생각한다. 애초에 요즘은 클라우드에 다 올려서 작업을 해버리니 더더욱 많이 써보지는 못한 설정이다.

 

5. 마무리 및 넋두리

 

뭔가 오늘은 정신이 좀 없었던 것 같다. 애기도 좀 커서 많이 칭얼대기도 하고, 공부할 건 많은데 어찌나 피곤하던지.. 리팩토링 책 펼치고 거의 30분 넘게 졸았던 것 같다. 거기다 예전에 만들어두고 관리 안해서 취소당한 구글 에드센스 ㅠㅠ 그리고 유튜브 계정... 또 다시 시작할려니 골치가 아프다. 블로그 제목도 뭐 떠오르는 게 없어서 결국 도메인이랑 맞춰버렸다. 뭐만하면 다 추천도서나 다른 사이트가 먼저 떠버리니... 예전에 네이버 블로그처럼 검색이 잘되지도 않는 것 같다. 거기다 다음카카오에서 무슨 광고 정책인가? 바꾼다는 이야기도 본 것 같고해서 오늘은 티스토리 쭉 써도 괜찮은 건가 고민을 좀 했던 것 같다.

 

그래도 선택지가 많지는 않았던 게 광고 붙이고 쓰기 괜찮은 곳이 많지는 않았기 때문에 그냥 다음카카오가 너무 심하게 하진 않겠지? 하는 마음으로 남아 있기로 했다. 물론 나중에 개인 포트폴리오 서버 만들고 나면 그 때는 블로그도 직접 만들지 다시 고민해 볼지도 모르지만, 일단 좀 지켜봐야겠다.

 

아 그래도 개운한 게 오늘 목표했던 것 중 Genesys Cloud WebRTC SDK로 Outbound 하는 것 까지는 성공해서 기분이가 좋다. Genesys에서 문서가 거의 없다싶이 하다가 그나마 업데이트 됐음에도 아직은 좀 부족한 감이 있는 게 다른 것은 고사하고 간혹 발견되는 오타나 오기입 같은 것들 때문에 문서 그대로 따라해도 안되는 경우도 많았기 때문이다. 약간 노가다 성으로 Genesys Github에서 직접 fork 떠서 이것저것 해보고 뜯어보고 개인 서버에서 또 노가다성으로 해보니 됐다. 문서는 진짜 반쪽짜리 도움인 것 같다.

 

그리고 Genesys Case Open하며 생긴 습관이라 그런데, 내가 JS 문법 몰라서 오래 걸린 것도 문서에 나와있는대로 하지 않아서 안됐던 것도 아니다. require, import, cdn 다 다룰줄 알고 문서 확실히 다 켜두고 진행하는거니까 제발 일단 개발자, 엔지니어 잘못이라고 의심부터 안했으면 좋겠다. 물론 얼마나 기초적인 질문 글들이 많이 올라오면 그렇게 하겠는지는 이해는가지만... 메크로 처럼 답변을 주면 좀 슬프다... 그래도 오라클에 SR 올렸을 때 보단 답변을 빨리주고 무엇보다 Genesys Korea가 함께 소통해주는 부분은 많은 힘이 됐던 것으로 기억한다.