[SSL] http file 업로드 인증 방식 캐기(nginx)

happypath·2022년 3월 3일
0
post-thumbnail

지난번 SSL 인증 받는 방법에 대해 간략히(?) 정리했는데, 중간에 '도메인 인증' 부분에서 삽질을 했다했지요...ㅎㅎ 그 부분을 기록해 보고자 합니다.

  • 환경 : azure vm, nginx, 가비아 DNS

SSL 인증받는 방법(지난글)

도메인 인증

<email, dns(cname), http upload>
1. email : admin@도메인 으로 된 메일이 없기 때문에 패스
2. DNS(CNAME) : 가비아 DNS 관리 툴에 넣으면 된다고 한 간단한 포스트를 보고 해봤으나 실패(애초에 내가 DNS 세팅을 잘 못 했다는 것을 나중에 알게됨)
3. http file 업로드 : 서버 특정 경로에 txt 파일 다운받아서 올려놓으면됨

저는 3번을 선택했습니다.


START!

1. 가비아 DNS 관리툴 - 'CNAME, A'레코드 등록

azure 서버에서 생기는 변화 사항들이 제 도메인에 바로바로 반영이 안되는 문제점이 있었어요. 원래 vm주소로 들어가면 잘 되어 있는데, 내가 구매한 도메인으로 들어가면 왜 반영이 안되지? 그리고 다음날 아침에 다시 들어가 보면 설정되어있음...
뭔가 쎄함을 느꼈다.

CNAME 으로만 매핑을 해놨더니 느리더랍니다.
즉, CNAME은 쉽게 말해, 사람이 이해하기 쉽게 만들어 놓은 도메인끼리 매핑해 주는것
ex) www.naver.com 을 www.daum.net으로 이해해줄래?

컴퓨터는 이렇게 도메인을 매핑하려면 네트워크상에서 해당 도메인의 ip주소(123.0.0.1)가 무엇인지 알아야 한대요.ip를 찾으려고 DNS서버가 엄청난 각고의 노력을 하는거쥬. 그래서 제가 vm에서 만든 변화 사항들이 반영이 느렸던거에요.
-> 내 상황: pretty.com(구매한 예쁜 도메인) 을 ~~cloudapp.azure.com(못생긴 도메인) 으로 이해하고 연결해 줄래?

반면에 A레코드는 내가 산 예쁜 도메인을 서버 ip에 바로 매핑해 줌으로써 ip를 찾는 과정을 없애 버리는 거죠!
-> 해결 : pretty.com(구매한 예쁜 도메인) 을 123.0.0.1(명확한 주소)로 연결해 줄래?
-> 아래 사진 보면, CNAME, A레코드 모두 등록 되어 있는 것을 알 수 있다.(원래는 CNAME만 있었음)

A레코드 등록 안했을 때 심각하게 404에러를 계속, 자주 마주함,,,, 왜 못찾는거니ㅠㅠ새벽에 엉엉 눈물을 삼켰다.


2. nginx 설정

기본적으로 ubuntu에 sudo apt-get install nginx로 nginx 설치해 주면, 80 포트가 열립니다.

/etc/nginx/sites-enabled 에 위치한 default에서 작업

처음에 default 파일을 열어보면 대충 이런식으로 되어있을 겁니다.(주석으로 되어있는 부분은 보기좋게 최대한 삭제했음)

# ----맨 처음 오픈시 상태-----

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	# SSL configuration
	# listen 443 ssl default_server;
	# listen [::]:443 ssl default_server;
	# include snippets/snakeoil.conf;

	root /var/www/html;

	index index.html index.htm index.nginx-debian.html;

	server_name;

	location / {
		try_files $uri $uri/ =404;
	}

	location ~/.well-known/pki-validation {
		default_type "text/plain";
		index 81731E9C3722034CC8071032CCA21939.txt;	
	}
}

# virtual server 예시 밑에 있고....

저는 이렇게 바꿔줄게요. nginx 셋팅하는게 저는 시간이 오래걸렸습니다.

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	# ---이따 인증서 발급받고나서 설정해야함---
	# SSL configuration
	# listen 443 ssl default_server;
	# listen [::]:443 ssl default_server;
	# include snippets/snakeoil.conf;
    
    # ---루트 디렉토리 하나 만들어 주세요! 도메인 이름으로---
    # ex) /var/www/naver.com
	root /var/www/내 예쁜도메인샤랄라;

	index index.html index.htm index.nginx-debian.html;


	# ---www 붙은 & 안붙은 주소 모두 기입---
	server_name www.naver.com naver.com(예시);


	location / {
		try_files $uri $uri/ =404;
	}


	# ---naver.com/.well-known/pki-validation으로 요청오면---
    # txt 파일을 index.html 처럼 보여줘!
    # location안에 root 넣는 예시들이 많았는데, 저는 경로 오류떴어요
	location ~/.well-known/pki-validation {
		default_type "text/plain";
		index 위에서 다운받은 auth file 이름.txt;	
	}
}

# Virtual Host configuration for example.com
# to sites-enabled/ to enable it.

위 파일 처럼 바꿔 주셨으면, sudo systemctl restart nginx로 nginx를 재시작!

여기까지 문제가 없다면 이렇게 txt파일이 뜰 것이고, 문제가 분명 발생하지 않을 수 없다.
-> 403, 404 둘 중 하나 뜰 것임(내가 그랬으니까ㅋㅋㅋㅋㅋㅋㅋㅋㅋ)


3. 에러를 마주하다

- 404 not found

  1. DNS 서버에 도메인 제대로 매핑했는지 확인
  2. txt 파일 경로 다시 확인
  3. nginx root 디렉토리 경로 확인

- 403 forbidden

차라리 403 forbidden이면 낫습니다. 폴더랑 파일을 찾긴 찾는다는거거등.. 404가 미쳐버려...
403이 뜨는 이유는 해당 경로에 권한이 없기 때문인데, /var/www/블라블라 우리가 만들어준 디렉토리에 권한이 없을 가능성이 매우 높습니다.

/etc/nginx/nginx.conf 파일 최상단을 보면

user www-data; # nginx 유저 누구인지 알려주는것!
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

이렇게 누가 nginx 유저인지 알려주고 있는데 www-data라는 놈입니다.
그런데 우리 서버 안에 있는 폴더나 파일들이 대부분 아래 사진처럼 root임!
그래서 접근을 못하는 상황인것이쥬.

403을 물리치기 위해서는 nginx 설정할 때 root로 지정해 줬던 디렉토리에 대한 권한/소유를 우리 사랑스러운 nginx유저인 www-data로 바꿔줘야합니다!!!!

마법의 명령어 간다!

sudo chown -R www-data:www-data /var/www

샤라락 뿅 www-data 님의 것이니 마음껏 향유하십쇼


삽질하는 시간은 길었는데 글로 정리하고 보니 짧군요,
꼭 다들 txt 파일이 문제없이 예쁘게 뜨시면 좋겄습니다...

0개의 댓글