모든지 기록하자!

[Network] 아파치 설정파일 분석 - httpd.conf , httpd-vhost.conf 본문

Network

[Network] 아파치 설정파일 분석 - httpd.conf , httpd-vhost.conf

홍크 2021. 12. 20. 21:07
728x90

1. virtual hosts 주석 해제

 

- 가상 호스트를 사용하기 위해 주석 해제한다.

 

가상호스트란?

기본적으로 웹서버에 존재하는 주 호스트 도메인을 등록하여 사용하고 있지만 추가적으로 한 서버에 여러 도메인을 등록하여 사용한다는 의미이다.

가상 호스트 서버를 이용하여 제한된 공간 안에서 여러 개의 홈페이지를 제공해주는 서비스가(웹, 메일 등) 호스팅 서버스이다.

 

2. ErrorLog 변경

 

ErrorLog “|/apps/apache/bin/rotatelogs /apps/apache/logs/error_log.%Y%m%d 86400”

 

- 에러 로그가 저장되는 경로를 지정한다

로그를 분할해서 남길경우에는 아파치에서 제공하는 rotatelogs를 사용한다. 파일명에 연월일시 분초를 작성하여 파일이 생성된 시간 기록, 86400은 로그파일을 새로 생성할 시간(초단위) 한국 시간으로 맞추려면 +540을 하면 된다. GMT 시간과 한국시간은 9시간이 차이 나기 때문

 

3. CustumLog common 변경

 

ErrorLog “|/apps/apache/bin/rotatelogs /apps/apache/logs/access_log.%Y%m%d 86400” common env=!dontlog

 

- 커스텀 로그가 저장되는 경로를 지정한다.

로그 형식 이름은 "LogFormat"으로 정의된 어떤 로그를 기록할 것에 대한 정의를 지정한 것이다. "LogFormat"의 맨 뒤에 작성되어 있는 문장이 포맷명이 된다.

이 설정은 로그 파일명은 “access.log”이고 로그 포맷은 “common”으로 되어 있다.

env=!dontlog -> dontlog가 아닐 때 로그를 기록한다.

#gif,bmp,jpg,ico,js,css,png 로그에서 제외

SetEnvIfNoCase Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)|(ico)|(eot)$" dontlog

 

4. ServerName 주석 처리 해제

 - 일반적으로 IP 주소에 대해 할당된 도메인명이지만, 따로 이름을 할당하고 그것을 공식 도메인명으로 원하는 경우에 사용한다. "ServerName"가 지정되어 있지 않은 경우는 Apache에 할당된 IP 주소를 역으로 도메인명을 가져온다.

 ServerName [스키마://]도메인명|IP 주소[:포트 번호]

ex) www.exampl.com:80 -> 포트 번호는 생략할 수 있지만 생략된 경우는 http 포트 번호를 사용한다. 포트 번호도 지정하는 것을 추천한다고 한다.

 

5. Directory 변경

 

<Directory> ~ </Directory> 지시자는 지정한 디렉터리 이하의 모든 웹문서들에 대하여 어떤 서비스와 기능을 허용/거부할 것인지를 설정하는 매우 중요한 지시자이다.

<Directory> 지시자의 설정은 개인에 따라 다르니 각자 목적에 맞게 설정해야 한다.

 

Options

- 지정한 디렉토리 이하에 모든 파일과 디렉토리들에 적용할 접근제어를 설정한다. 디렉토리를 보여줄 것인가? CGI를 허용할 것인가? SSI를 허용할 것인가? 등의 설정을 여기서 하게 된다.

 

FollowSymlinks

- 심볼의 링크를 허용한다. 이 옵션을 지정하면 웹브라우저에서 링크 파일의 경로까지도 확인할 수 있게 된다. 보안상 이 값은 설정하지 않는 것이 좋다.

 

AllowOverride

어떻게 접근을 허락할 것인가에 대한 설정

 

None

AccessFileName에 지정된 파일을 엑세스 인증 파일로 인식하지 않는다. AccessFileName의 값이 대부분 .htaccess 이므로 이를 무시하게 된다는 의미가 된다. 이 파일을 무시하기 때문에 새로운 접근 인증 방식을 Override하지 않는다. 대부분이 보안이나 중요한 디렉토리에서 사용할 수 있는 것으로 아주 제한적인 접근만을 허용하고자 할 때에 사용하는 값이다.

 

All

이전의 인증방식에 대하여 새로운 접근 인증방식을 우선 적용하도록 Override를 허용한다.

 

Order deny, allow

allow 설정을 먼저 확인하고 그다음 deny 설정을 확인한다. 뒤에 것이 우선한다는 뜻

6. apache mod_jk 모듈 설정

 

아파치와 톰캣의 연동 원리는?

 

아파치와 톰캣이 연동하기 위해선 AJP를 통해 서로 통신을 하여야 한다.

AJP란 아파치가 웹서버와 외부 서비스(톰캣 등)와 연동하기 위해 정한 규약(프로토콜)이다.

아파치는 이를 사용하여 80 포트로 들어오는 요청은 자신이 받고, 이 요청 중 서블릿을 필요로 하는 요청은 톰캣에 접속하여 처리한다.

 

1) 아파치 웹서버의 httpd.conf 에 톰캣 연동을 위한 설정을 추가하고 톰캣에서 처리할 요청을 지정

2) 사용자의 브라우저는 아파치 웹서버(보통 80 포트)에 접속해 요청

3) 아파치 웹서버는 사용자의 요청이 톰캣에서 처리하도록 지정된 요청인지 확인. 요청을 톰캣에서 처리해야 하는 경우 아파치 웹서버는 톰캣의 AJP포트(보통 8009 포트)에 접속해 요청을 전달

4) 톰캣은 아파치 웹서버로부터 요청을 받아 처리한 후, 처리 결과를 아파치 웹서버에 되돌려줌

5) 아파치 웹서버는 톰캣으로부터 받은 처리 결과를 사용자에게 전송

 

LoadModule jk_module modules/mod_jk.so(모듈 load )

JkWorkersFile /apps/apache/conf/workers.properties (mod_jk를 위한 tomcat 프로퍼티)

JkLogLevel error (로그 레벨 설정)

JkLogStampFormat "[%a %b %d %H %M %S %Y]“ (로그 포맷에 사용할 시간 형식 지정)

 

ExpiresActive On (ExpiresByType과 ExpiresDefault 지시어로 지정한 규칙에 따라 서비스하려는 문서에 이 헤더들을 생성한다.)

 

사용자 PC에서 이미지가 캐쉬된다. 이미지가 많은 사이트에서 아주 효과적으로 사용 가능하며 이미지가 자주 바뀌는 사이트에선 비추천이다.

 

ExpiresByType image/gif "access plus 1 weeks“ (1주 후에 다시 받아온다)

ExpiresByType image/jpeg "access plus 1 weeks“

ExpiresByType image/png "access plus 1 weeks“

ExpiresByType text/css "access plus 1 weeks“

ExpiresByType text/javascript "access plus 1 weeks“

ExpiresByType application/javascript "access plus 1 weeks“

ExpiresByType text/html "now plus 0 minutes

 

Tomcat과의 연동 시에 Tomcat과 같은 DocRoot를 사용할 경우 Apache단에서 설정으로 WEB-INF, META-INF 로의 접근을 막아야 한다.

 

<Location /WEB-INF>

SetHandler WEB-INF

Order deny,allow

Deny from all

</Location>

<Location /META-INF>

SetHandler META-INF

Order deny,allow

Deny from all

</Location>

 

에러 페이지 지정 - 보통 기본 보안점검 사항에 들어가는 디렉터리 리스팅, 불필요한 페이지 및 에러 페이지를 통해 서버 정보 및 중요 정보가 노출되는지 점검

ErrorDocument 403 /error/e_403.jsp

ErrorDocument 404 /error/e_404.jsp

ErrorDocument 405 /error/e_405.jsp

ErrorDocument 500 /error/e_500.jsp

 

TRACE method는 잠재적으로 cross-site tracing, basic 인증 암호 가로채기 등에 악용 가능

TraceEnable Off

 

Dynamic Shared Object (DSO) Support

DSO 방식으로 컴파일된 Apache의 모듈을 적재. 모듈의 위치는 /etc/httpd/modules이며 이는 usr/lib64/httpd/modules의 심볼릭 링크이다.

LoadModule authn_file_module modules/mod_authn_file.so

. . .

등등

 

 

7. httpd-vhost.conf 설정

 

VirtualHost *:80 -> 가상 호스트 구역을 설정하여 사용한다. 가상 호스트의 첫 번째 구역은 클라이언트가 요청한 ServerName(도메인)을 찾지 못하였을 경우에 보여지게 될 부분을 설정하게 된다.

ServerAdmin : 해당 가상호스트의 관리자 이메일 주소

DocumentRoot : 해당 가상 호스트의 홈페이지 디렉토리 위치

ServerName : 해당 가상호스트의 도메인명

ServerAlias : 가상 호스트 설정에 별칭으로 등록한다.

ErrorLog : 해당 가상 호스트의 웹 에러로그 파일 위치

CustomLog : 해당 가상호스트의 웹 로그파일 위치

ProxyPreserveHost on : HTTP 요청 헤더의 Host: 부분을 유지하는 옵션

ProxyPass : 서버가 적절한 문서를 가져오도록 설정

ReversPassReverse : 외부에서 접속했을 때 내부 서버나 다른 곳으로 연결해 주는 방법

DirectoryIndex : 클라이언트의 요청이 있을 때, 파일명을 지정하지 않고 디렉토리만 지정될 경우가 있다. 파일명이 생략된 경우에 어떤 파일을 반환할까를 DirectoryIndex로 지정한다.

Alias : 별칭을 만드는 지시자이고 Alias 별칭명 실제명과 같은 방식으로 만들게 된다. 별칭명뒤에 /를 포함하면 아파치 서버는 URL에도 /이 있어야 처리할 수 있다.

JkMount : 확장자 jsp, json, xml, do를 가진 경로는 woker tomcat으로 연결하는 구문

 

8. workers.properties 설정

worker 이름 : 뒷단의 tomcat 서버를 구분할 수 있는 이름이어야 한다. 나중에 로드밸런싱을 할 때에 tomcat에도 적용되는 이름이기 때문에 설정 중요

worker port : 뒷단 tomcat 서버의 AJP 포트

worker lbfactor : 부하분산을 위한 설정으로 뒷단 tomcat 서버들에 연결 무게를 설정해준다.

728x90

'Network' 카테고리의 다른 글

[Network] TCP , UDP  (0) 2021.12.30
[Network] 인터넷 프로토콜(IP, Internet Protocol)  (0) 2021.12.26
[Network] Virtual Host(가상 호스트)란?  (0) 2021.12.20
Apache와 Tomcat이란?  (0) 2021.12.14
[Network]SMTP, POP3, IMAP 이란?  (0) 2021.12.14
Comments