본문 바로가기
프로젝트/라즈베리

[3] 라즈베리 파이에 정적 파일 서버 띄우기 + 계정 인증

by Riverandeye 2020. 9. 7.

이번 게시글에선 간단한 static file server를 nginx를 이용하여 띄워 볼 계획이다. 

이 과정을 통해 다음과 같은 정적 파일 서버를 간단하게 구성할 수 있다. 

 

간단한 정적 파일 서버

만약 라즈베리가 포트포워딩이 되어있지 않아 접근하기가 힘들다면 이 글을 먼저 읽어보고 설정한 후에 작업해보자. 

 

1. Nginx 설치

nginx는 매우 가벼운 웹 서버이며, 리버스 프록시로도 이용할 수 있고, 여러 플러그인을 도입해 이용할 수 있다. 

sudo apt-get install nginx 를 통해 nginx를 설치하고, /etc/nginx의 nginx.conf 파일을 조회해보자. 

 

sudo apt-get install nginx 

 

SSL, gzip 및 여러 설정들이 있지만, 우린 여기에 주목해보자.  

 

가상 호스트 설정

nginx에서는 개별 호스트에 대한 설정을 conf.d 폴더와 sites-enabled 폴더에 구성한다.

이 설정 위의 SSL 및 로깅에 관한 설정들은 공통적인 부분이라, 개별 도메인과 서버에 관한 설정을 분리하여 모듈화 할 수 있다. 

새로 관리해야 할 도메인이 추가되면, 기존 파일은 건들지 않고 새로운 파일을 생성해서 설정함으로써 관리하여 매우 편리하다. 

 

2. Nginx 설정 및 실행

 

sites-available 폴더에 서버를 연결할 도메인 이름의 파일을 만들어보자. 

 

파일을 만들기

해당 파일에서 다음과 같이 설정한다.

 

다음 설정에 대해서 설명을 하자면, 

cloud.riverandeye.com 도메인으로 / 이하 경로로 요청이 들어온 경우, /www/files에 있는 파일을 전달하겠다는 뜻이다. 

autoindex는 nginx 자체 설정으로, 해당 root 폴더의 파일을 리스팅 한다는 뜻이다. 

server_name은 자신의 도메인에 맞게 변경해주어야 한다. 

 

저렇게 설정하고, 자기 도메인에 해당 서버를 연결하면 간단하게 파일 리스팅 서버를 구성할 수 있다. 

이는 nginx 자체적으로 제공하는 기능이기 때문에, 매우 쉽고 간편하다고 볼 수 있다. 

 

sites-available 폴더에서 설정 파일을 생성했으면, sites-enabled 폴더로 Symbolic link를 만들어주자 

 

sudo ln -s /etc/nginx/sites-available/cloud.riverandeye.com /etc/nginx/sites-enabled

 

Symbolic link를 만들어 동작시키는 이유는, 그럼 편하니까! 도메인에 대한 배포를 취소할 때 그냥 sites-enabled의 Symbolic link를 제거하면 끝이고, 기존 설정파일을 보존할 수 있기 때문이다. 

 

nginx를 실행하는 건 systemctl 명령어를 이용하면 간편한다.

sudo systemctl restart nginx 를 이용하여 nginx 서버를 실행한다.

처음 설치시 default로 실행되어 있어서 restart라는 명령어를 사용한것, 안되어 있으면 restart -> start로 바꿔주자. 

 

연결한 도메인으로 이동하면, 맨 위 이미지 같이 파일이 리스팅되어있는 것을 볼 수 있다. 

 

3. Authentication 구성하기

현재 상황은 그냥 아무나 내 사이트에 접속해서 원하는 파일을 가져갈 수 있는 상황이다. 

로그인 기능을 추가해서, 내가 원하는 대상들이 계정을 통해 파일에 접근할 수 있게끔 하면 참 좋을 것 같다.

 

Authentication 구성엔 다음 문서를 참고하였는데, nginx 공식 문서라 그런지 확실히 정리가 잘 되어있다. 

 

우선 password file을 생성할 util을 설치해야 하는데, apt 혹은 apt-get 이용하여 설치한다. 

Debian 혹은 Ubuntu의 경우엔 apache2-utils 를

그 외 CentOS 등의 리눅스 계열 운영체제엔 httpd-tools 를 설치한다. 

 

sudo apt install apache2-utils

 

설치 후 htpasswd라는 커맨드를 사용할 수 있게 되는데, 이를 이용하여 아이디와 패스워드를 저장해준다.

아이디-패스워드가 작성된 파일을 본인은 /etc/nginx/conf.d 에 .htpasswd 라는 파일 명으로 생성하였다. 

 

sudo touch /etc/nginx/conf.d/.htpasswd

 

파일을 생성한 후엔 htpasswd 모듈을 이용하여 해당 파일에 아이디와 패스워드를 암호화하여 작성한다.

sudo htpasswd /etc/nginx/conf.d/.htpasswd <아이디>

New password : <비밀번호>

Re-type new password: <동일한 비밀번호>

이런식으로..

그 후, basic_auth 설정을 통해 해당 서버로 요청시 authentication을 거치게끔 설정한다.

해당 설정은 이전에 생성했던 /etc/nginx/sites-available 폴더의 도메인 파일에 설정을 추가해준다. 

server {
	listen	80;
	server_name cloud.riverandeye.com;
	auth_basic	"authentication required";
	auth_basic_user_file	/etc/nginx/conf.d/.htpasswd;
	location / {
		root /www/files;
		autoindex on;
	}
}

server_name은 꼭 변경하도록 하자.

sudo systemctl restart nginx 를 통해 서버를 껐다 켜고 지정한 사이트에 접속하면 다음과 같은 화면을 볼 수 있을 것이다. 

 

로그인 창

이전에 설정한 ID와 PW로 접속하면 기존 리스팅 된 파일의 목록을 마저 조회할 수 있다. 

 

이렇게 매우 간단하게 자기만의 정적 파일 서버를 구성해보았다 :)

댓글