본문 바로가기

코노하로 웹 서비스 시작하기 (2) -아파치-

by Recstasy 2019. 4. 23.

  CentOS 7에서 아파치를 설치해보자


 지난 포스팅에서 아파치를 설치하는 것까지 성공했다면, 이제 아파치의 설정을 고쳐야 한다. 윈도우에서 레지스트리를 편집하는 작업과 비슷하다고 할까. 암튼 리눅스에서는 'gedit'명령어로 편집기를 이용한다. 본격적으로 웹 서버를 설정하기 위해서 아래 명령어를 '터미널'에서 타이핑하자.(관리자 모드)


___▷ 관리자 설정하기

 # gedit /etc/httpd/conf/httpd.conf  

위의 명령어를 넣고 '엔터'를 하면, 편집기 창이 열린다. gedit에서 먼저 고쳐야 할 부분은 '관리자 메일 주소(86번째 줄)'와 서버 이름(95번째 줄)'이다. 아래 사진의 빨간색으로 표시한 부분을 자체적으로 설정한다. 'ServerAdmin'과 'ServerName'은 그대로 두고, 옆의 부분만 수정하면 된다.  


___▷ Root폴더 설정하기

 서버에는 index.html파일을 읽을 수 있는 진입 폴더가 지정돼 있다. 이를 서버의 루트 폴더라고 하는데, 고속도로 ic 정도로 이해하면 되지 않을까한다. httpd.conf파일에서 어떻게 타이핑 하느냐에 따라 고속도로 진입로(서버 root폴더)를 바꿔 버릴 수도 있다. 


 가령, 웹 서버를 설치하고 'http://localhost'를 브라우저에 입력하면, 아파치의 root폴더인 '/var/www/html' 폴더에 접근한다. 만일 html폴더에 'index.html'파일이 있다면, 아파치는 그 즉시 index.html파일을 읽는다. 만일 index.html파일이 root폴더인('/var/www/html/')에 없으면, testing어쩌고저쩌고 하는 페이지가 뜬다. 


 만일, /var/www/html/joywebgl/page/customer 이란 폴더를 root폴더로 지정하고 싶다면, httpd.conf파일의 131번째 줄부터 151번째 줄까지의 <Directory "/var/www/html"></Directory> 부분을 수정한다. (웹 브라우저에서 접근할 때 'html'폴더는 생략하고 타이핑)


144번째 줄에 Options가 있다. Options에서는 초기 접속을 했을 때, 디렉터리 파일에 대한 접근을 제어하는 기능을 넣을 수 있다. 초기 설정은 Options Indexes FollowSymLinks이다. 무슨 뜻일까; 아래 표를 보면서 탐독해보쟈.


 Options 사항들

 내용 

  ExecCGI

 - CGI프로그램(activeX처럼 뭔가 설치하라고 뜨는 프로그램들) 실행을 설정 

  FollowSymLinks 

 - 심볼릭 링크(다른 디렉터리로 연결) 로 이동여부를 설정 

  Includes

 - SSI 사용 설정 

  IncludesNOEXEC

 - SSI는 가능하지만, CGI 스크립트나 프로그램은 실행할 수 없음 

  Indexes

 - 해당 디렉터리에 인덱스 파일이 없으면 디렉터리 파일 목록을 

   보여줌.

 

 - 실수로 이 옵션을 설정할 경우, 의도치 않게 디렉터리 정보가 

   노출된다

  MultiViews

 - 다국어 지원 기능 

  SymLinkslfOwnerMatch

 - 심볼릭 링크의 소유자와 링크가 참조하는 파일의 소유자가 

   같을 때만 링크 대상에 접근할 수 있도록 설정. 

 

 - 보안은 강화되지만, 아파치 성능이 떨어짐 


144번째 줄에서 'FollowSymLinks'만 사용하도록 설정한다. 


___▷ ip 접근 권한 설정하기

 웹 서비스를 실행하다보면, 의도치 않은 공격을 받게 된다. 전혀 본인과 상관없는 애들이 공격을 한다. 해커들이 실력을 테스트하는 용도로 약해 보이는 사이트를 공략한다고 한다. 프론트 개발에 집중할 때는 '보안'을 가볍게 생각했다. `공격을 당하면 다시 만들면 되지`라는 철 없는 소리를 한 적이 있었다. 


 하지만 서버는?? 다시 만들 수 있을까. 고객의 DB나 시간이 가면서 구축된 중요한 데이터는 프로그래머가 어떻게 할 수 없는 영역이다. 서버 속도가 느리더라도 서버 분야는 안전이 우선이다. 아파치에서 웹 서버를 설정하자마자 가장 기본적으로 보안을 관리할 수 있는 부분은 ip접근 권한 설정이다. 


 Options 설정 아래에 보면 'Require all granted'란 부분이 있다. 해당 부분을 어떻게 설정하느냐에 따라 ip를 차단할 수 있고, 허용할 수 있다.

설정 

 내용 

 Require all granted

 모든 접속 허용 

 Require all denied

 모든 접속 거부 

 Require ip [IP주소 입력]

 설정한 IP주소의 접속을 허용 

 Require host [호스트명]

 설정한 주소의 호스트 접속 허용 

 Require not ip [IP주소]

 설정한 ip주소의 접속을 거부 

 Require not host [호스트명]

 설정한 호스트의 접속을 거부 


가령, ip 201.3.118.37의 접속을 거부하고 싶다면 아래와 같이 설정하면 된다.

 Require all granted

 Require not ip 201.3.118.37 


만일 192.168.1.0에서 192.168.1.128까지의 접속만 허가하려면, 다음과 같이 작성한다.

 Require all denied

 Require ip 192.168,1.0/128 


___▷ 웹 서버 실행 

 httpd.conf파일의 설정을 마쳤다면, 본격적으로 아파치를 시작해보자. 웹 서버를 실행하려면 먼저 root(관리자)권한을 얻는다. 그리고 아래와 같은 명령어를 순서대로 실행한다.



 systemctl start httpd.service

 systemctl enable httpd.service 



만일 아파치 실행중에 httpd.conf파일을 변경했다면, restart명령어를 실행해야 한다.

 systemctl restart httpd.service 


 아파치를 실행하고 나서, 파이어폭스의 url입력창에 'localhost'나 '127.0.0.1'을 입력하면 testing페이지가 나타난다. 이제 남은 일은 방화벽 설정으로 서버를 오픈하는 일이다.


___▷ 방화벽 설정하기

 현재 localhost는 전세계로 공개되지 않은 상태다. 아직 방화벽을 열지 않았기 때문이다. conoha에서 DNS를 도메인과 연결했다면, 반드시 아파치 방화벽을 열어둬야 한다. 처음 웹 서버를 node.js로 설치하고 나서 방화벽 때문에 5일 동안 도메인 연결을 기다렸다. 아래 코드 단 두 줄이면 해결되는 문제였다. 


(마스터 권한)

firewall-cmd --permanent --add-service=http --zone=public

firewall-cmd --permanent --add-service=https --zone=public

firewall-cmd --reload

 


위의 명령을 실행하고, 자신의 ip(코노하 vps ip)를 다른 컴퓨터에서 타이핑 해보자. 아파치의 'Testing 123...'이란 페이지가 있다면 성공이다.

댓글

최신글 전체

이미지
제목
글쓴이
등록일