이번에는 Web서버 중에 하나인 apache서버를 생성할것이다. apache서버는 리눅스 뿐만이 아니라 윈도우에서도 사용 가능하다.
먼저 apache서버를 설치할것인데 yum으로 설치하게 되면 실습에 필요한 기능이 없기 때문에 이번에는 compile하여 데몬을 설치했다. 모듈을 이용한 compile은 두가지 방식이 있다. 정적 모듈은 부족한 부분만 컴파일이 불가하여 새로 설치방식이고, 동적모듈은 컴파일에 부족한 부분을 추가하는 방식이다.
그래서 apache-enable하고, 동적 모듈을 사용하여 직접 컴파일했기 때문에 지정한 디렉토리에 모든게 들어가 있다. 하지만 yum은 실행파일은 bin에 있고, 설정파일은 etc에 있는 등 파일들이 분산되어 생성된다.
먼저 데몬을 압축시킨 압축 파일을 다운받는다.
그리고 압축을 해제하면 다음과 같은 파일들이 생성된다.
설치 순서는 usr/local/httpd-2.2.34디렉토리 아래에 있는/configure --prefix=/app/apache --enable-so로 이동한다. make 하게되면 컴파일이 되고 make install 하게되면 설치가 진행된다.
만약 컴파일이 되지 않는다면 gcc가 설치되어 있나 확인하고 없으면 yum으로 깔면 된다.
/app/apache/는 아파치에 관련된 설정파일을 전부 모아둔 루트이므로 만약 apache를 제거 하려면 이 폴더를 지워주면 된다.
httpd.conf파일은 아파치서버 설정파일이다. 홈페이지 운영하는 사람 ≠ 관리하는 사람이다. 따라서 홈페이지를 운영하는 사람에게 홈페이지 권한을 주어야 한다. /app/apache/htdocs가 디폴트 다큐먼트 루트인데 계정 웹마스트에게 인계하기 위해 web계정으로 연결해준다.
http.conf에는 전역환경 설정이 있는데 Serverroot "/app/apache"는 최상위 디렉토리를 지정해 주는 예약어다.
timeout 120는 tcp커넥션을 120초 후 제거한다는 의미이다.
maxclients 150는 최대 동시 접속자 수인데, 실제 양은 지정한 값의 5배~10배 정도라고 볼수있다. 왜냐하면 읽는 동안 접속이 끊기기 때문이다. 무슨 의미냐면만약 네이버에 접속한다고 했을때 도메인을 입력하고 엔터를 누르는 순간 부터 페이지가 완전히 로딩되기 직전까지가 읽는 상태이다. 즉, 완전히 로딩된 페이지를 보는 순간에는 접속이 끊어진것이다.
Startservers 20은 접속자가 몰려 프로세스가 부족한 현상이 나타나기 전에 미리 프로세서에 띄워놓아 메모리를 확보하는 것이다.
MinSpareServers/MaxSpareServers는 최소 혹은 최대 대기상태의 프로세서 수를 정하는 것인데 현재는 의미없어서 지정 안해도 괜찮다.
ServerName은 DNS나 hosts파일에 등록된 이름을 지정하는 것인데 로컬호스트(localhost)127.0.0.0으로 설정한다. 만약 로컬호스트로 지정하지 않는다면 아파치(Apache)서버 실행시 httpd: Could not reliably determine the server's fully qualified domain name이라는 에러가 발생한다.
ServerAdmin '메일주소'는 에러 발생시 현재 컴터의 메일을 받는 곳이다.
이제 기본서버 구성을 살펴보자.
ServerTokens는 응답이나 데이터 보낼때 어느정도 보낼지를 설정한다. Major, Minor, Min, Prod, OS, Full중에서 하나를 선택하는데, Full은 권장하지 않는다. 왜냐하면 Full을하면 패킷에 모든 정보가 담기므로 클라이언트의 정보도 볼수있게 되기 때문이다.
DocumentRoot "/app/apache/htdocs"는 apache서버 이용시 사용할 홈 디렉토리이다.
DirectoryIndex는 메인 페이지로 사용할 파일명이 들어간다. 보통은 index.html나 index.java, index.php중에서 사용하거나 전부 사용한다. 웹서버로 접속시 index.html를 무조건 송신하는데 만약 파일을 못찾으면 404Error : Not Found가 발생한다. 이때 전역함수인 DocumentRoot를 제대로 설정해 주지 않는다면 상위 디렉토리의 시스템에 임의로 접근할수있게되어 무결성이 깨지게 된다.
ErrorLog logs/error_log는 웹서버에 문제가 발생시 에러를 기록하는 로그파일이다.
CustomLog logs/access_log combind은 외부에서 접근한 기록에 대한 로그파일이다.
UserDir public_html은 개인 홈 디렉토리를 지정하는데 예시에서는 public_html을 홈 디렉토리로 정하겠다는 것이다.
UserDir은 보통 ~(Tilde)계정명으로 사용하게 한다.
~ 기호는 틸드(tilde)라고 읽는다. 이 기호는 사용자의 홈 디렉터리를 표시하는 단축 기호이다. 만약 현재 자신의 계정 이름을 모르겠다면 홈 디렉터리로 옮겨서 디렉터리 이름을 보면된다. 윈도우에서는 보통 홈 디렉터리를 C:\Users\계정이름과 같이 만들어 준다. <출처 : 데이터 사이언스 스쿨>
웹서버는 기본적으로 디렉토리 단위로 설정하게 된다. 따라서 계정의 홈 디렉토리별로 따로 지정하게 되면 아래에서 설정을 보자.
<Directory "/app/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
각 라인에 대해 설명하자.
<Directory "/app/apache/htdocs">//Directory가 /app/apache/htdocs인 곳에 대한 설정이다.
Options Indexes FollowSymLinks
/*Option에 대한 설정값들을 아래와 같이 지정할수있다.
ALL : 가능한 모든 옵션을 다 사용한다.
None : 아무런 옵션도 없다.
Indexes : 메인 페이지가 없는 경우 파일 목록을 보여준다.
FollowSymLinks : 디렉토리의 심볼릭 링크를 이용한다.
ExecCGI : CGI를 실행한다. */
AllowOverride None//사용자 인증 파일인 .htaccess 파일 사용해 디렉토리에 대한 apache 레벨에서의 접근을 제한하는 설정이다. 현재 인증은 apache 레벨에서 구현하지 않는다.
Order allow,deny
Allow from all
/* 이 부분에서는 접근 권한에 대해 설정할 수 있다. 권한설정에는 order와 require 두가지가 존재한다. 각각 허용과 거부에 대한 명령어가 다른데 order이 경우에는 allow와 deny로 require는 grant와 denied가 있다. 권한 설정 명령어를 선택하면 허용하는 경우와 거부하는 경우를 반드시 적어줘야 한다. order을 예로 들어 'deny from all, allow from 특정 ip'로 작성하게 되면 외부의 IP를 접근 거부하는데 특정ip만 접근을 허용한다. */
실수로 apache서버 주소를 잘못지정하여 터미널에서 변경 후 재부팅을 하게 되었는데 PuTTY는 inactivate되고 세션을 다시 시작하게 되면 ip가 맞지않아 실행이 되지 않는다. xwindow에서는 터미널에서 NetworkManager을 비활성화 시켰기 때문에 이 또한 설정이 불가능 하다 이럴때는 아래 사진과 같은 방법을 사용하면 root로 로그인이 가능해 xwindow안에 터미널에서 사용이 가능하다.
'교육 > Server' 카테고리의 다른 글
Day 19 (Apache) (0) | 2019.12.13 |
---|---|
Day 18 (apache) (0) | 2019.12.11 |
Day 16 (DNS) (0) | 2019.12.09 |
Day 14 (DNS) (0) | 2019.12.05 |
Day 13 (DNS) (0) | 2019.12.04 |