Tagged: Httpd

Apache 설정

Apache LogoApache 설정이 필요 합니다. 그대로 쓰더라도 아무 문제가 없기는 하지만 아주 조금만 설정을 해주면 보안도 높아지고 성능도 좋아집니다.

이 문서의 내용은 Apache 2.4.10 기준으로 작성 되었습니다.

 

1. Default Character Set

아파치의 기본 문자셋을 지정해 줍니다.

2. Server Signature

서버의 자세한 정보를 숨깁니다. 이는 컴파일 설치를 했다면 conf/extra/httpd-default.conf 파일에 정의되어 있으며 httpd.conf 에서 extra/httpd-default.conf 파일을 Include 해주면 활성화됩니다.

3. 디렉토리 리스팅 비활성화

컴파일 설치를 했다면 httpd.conf 파일에서 extra/httpd-autoindex.html 파일을 활성화 하지 않습니다. 그리고 다음과 같이 디렉토리 리스팅을 비활성화 해줍니다.

4. backup 파일이나 source 파일 접근 금지

 

Apache HTTP SERVER Project 개요

Apache Logo

 Apache HTTP SERVER Project 는 아파치 소프트웨어 재단(Apache Software Foundation)이 운영하는 수많은 프로젝트중에 톱(Top) 프로젝트 입니다. 유닉스(Unix)와 윈도우즈 NT 계열의 운영체제를 위한 오픈소스(Open Source) HTTP 서버를 개발하는 프로젝트 입니다. 이 프로젝트의 목적은 HTTP 표준을 준수하면서도 안정적, 효율적, 확장가능한 HTTP 서비스를 제공하는데에 있습니다.

현재 가능 널리쓰이고 인기 있는 이 프로젝트는 1996년에 시작되었으며 올해(2014)년 2월에 18년째를 맞이했습니다.

1. 역사

1995년 2월즘에 웹에서 운영되어지는 HTTD 데몬으로 일리노이 대학의 슈퍼컴퓨팅 애플리케이션 국립센터의 Rob McCool씨가 만든 것을 대부분 사용했었습니다. 그런데 1994년 중반즘에 Bob McCool이 NCSA를 떠난 이후에 개발이 정체되었습니다. 이러한 조그마한 웹마스터 그룹은 이메일을 통해서 정보를 교환하고 기능을 개선하거나 버그를 패치하는데 협력을 시작합니다. Brian Behlendorf 과 Cliff Skolnick 는 캘리포티아 베이 지역에 있는 컴퓨터에 코어개발을 위해 그들의 정보를 메일링 리스트에 공유합니다. 1995년 2월 말에 8명의 공헌자(Contributor)로 구성된 재단의 원조 아파치 그룹이 갖춰집니다.

  • Brian Behlendorf
  • Roy T. Fielding
  • Rob Hartill
  • David Robinson
  • Cliff Skolnick
  • Randy Terbush
  • Robert S. Thau
  • Andrew Wilson

1995년 4월, 아파치의 첫번째 공개 릴리즈(0.6.2 Version)된다. 이즘에 NCSA에서도 웹서버 개발을 진행하고 있었는데, NCSA의 서버개발팀의 Brandon Long 과 Beth Frank는 명예 멤버처럼 메일리스트에 합류하면서 두 프로젝트에 아이디어와 버그등을 수정하게 됩니다.

첫번째 공개 릴리즈는 빅 히트였지만 전체적인 개선과 재디자인이 필요한 시점에서 1995년 5월 ~ 6월달동안 Rob Hartill 과 나머지 그룹멤들은 0.7.x 에 새로운 기능을 구현(pre-fork기능)과 작지만 성장하고 있는 아파치 사용자 커뮤니티를 지원하는데 힘을 쏟습니다. Robert Thau는 새로운 서버 아키텍쳐를 디자인했는데, 코드명 Shambhala, 모듈화된 구조와 보다 많은 확장성을 위한 API 구조, pool 기반의 메모리 할당 그리고 Adaptive pre-forking 프로세스 모델이였습니다. 아파치 그룹은 0.7.x 에 이 기능들을 넣고 서버 베이스를 바꿉니다. 그리고 8월에 0.8.8을 릴리즈 됩니다.

많은 베타 테스트 이후에 잘 알려져 있지 않은 플랫폼에 포팅하고 새로운 문서를 작성하고 많은 새로운 기능을 추가해 1995년 12월 1일에 아파치 1.0 을 릴리즈 합니다. 그리고 1999년 6월에 아파치 HTTP 서버를 법적, 재정적으로 지원하기 위해 아파치 그룹 멤버들은 Apache Software Foundation 을 설립하게 됩니다.

2. 참고사이트

Apache 웹 서버, Configtest 체크 만들기

Apache 웹 서버 시스템을 다루다보면 자주 접하게 되는 문제가 Apache 웹 서버의 재시작 문제입니다. 이것이 왜 문제가 되는가 하면, 재시작을 위해서는 Apache 웹 서버의 설정 파일들이 문제가 없는지에 대한 테스트가 선행되어야 하기 때문입니다.

다행스럽게도 Apache 는 설정 파일에 대한 적합성 테스트를 제공 합니다.

만일 설정파일에 문제가 있다면 다음과 같이 됩니다.

Apache 웹 서버는 어떻게 설정 파일에 문법 체크를 하는 걸까?

1. server/main.c

httpd 실행파일은 server/main.c 에서부터 만들어집니다. 이 파일에는 main() 함수가 존재하고 Switch 문으로 httpd 의 옵션들을 받도록 되어 있습니다.

configtest 옵션을 주면 내부적으로 configtestonly 값이 1루 세팅 됩니다.

Apache 에서 configtest 를 실행하면 바로 위 구문이 실행됩니다. ap_run_test_config 가 실행되네요. ap_run* 은 일종의 매크로 같은 것인것으로 보인다.

server/config.c 에는 Apache의 설정 파일들을 읽고, 검사를 하고, 추가된 모듈이 있다면 모듈에 맞게 문법을 검사 합니다.

내용이 복잡한데, 어째되었던간에 결과는 다음과 같은 문자열을 화면에 뿌리도록 되어 있습니다.

  • ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, “Syntax OK”);
  • return apr_pstrcat(p, “Syntax error in -C/-c directive: “, errmsg, NULL);
  • return apr_psprintf(p, “Syntax error on line %d of %s: %s”,

위와같이 문제가 없으면 ‘Syntax OK’, 문제가 있으면 ‘Syntax error’ 라는 문장을 가진 문자열을 리턴 합니다.

2. 쉘 종료 변수와 stdout, stderr

쉘은 프로그램이 정상 종료나 비정상 종료에 대해 다음과 같은 환경변수를 가집니다.

  • 0 : 정상종료
  • 1 : 비정상 종료

그런데, Apache 웹 서버도 Configtest 를 진행해서 ‘Syntax OK’ , ‘Syntax error’ 는 stderr 로 메시지를 리턴합니다.

이렇게 파일에 저장이 되지 않습니다.  다음과 같이하면 파일에 저장이 됩니다.

Apache 웹 서버는 설정 검사 결과가 통과되던 안되던 메시지는 stderr 로 메시지를 출력 합니다. 단, 쉘 리턴 변수만 달리 됩니다.

3. python 으로 체크 테스트 만들기

python 의 apache configtest 모듈이 있다면 좋았겠지만, 그런게 없더군요. 결국에는 python 에서 외부명령어를 사용하는 방법밖에 없습니다.

python 에서 외부명령어 사용을 위한 방법에는 다양하지만, subprocess 를 이용해 보겠습니다.

위 코드에서 핵심은 Popen 객체에 stderr=sys.stdout 를 주고 외부 프로세스가 끝나기를 기다려 리턴값을 받는 ‘p_status = p.wait()’ 에 있습니다.