7일차_아파치 웹 서버

최지웅·2025년 1월 10일
0

인프라

목록 보기
31/31
  • 아파치 웹 서버는 버전관리, 레드마인, 넥서스, 젠킨스 등 각종 애플리케이션 등의 프런트엔드로 사용된다.

1. 설치 및 설정

1-1. 설치 및 구동

  • 설치 후 /etc/httpd에 설정과 로그 파일이 만들어진다.
  • conf/에는 웹 서버의 주요 설정 파일인 http.conf와 파일 포맷이 담긴 magic 파일이 위치한다.
  • conf.d/는 php, mod_ssl등의 아파치 모듈을 설치하면 모듈 별 설정 파일이 위치된다.
  • logs/에 로그 파일이 저장되며 /var/log/httpd의 심볼릭 링크이다.
  • modules/에 아파치 모듈이 위치된다. /usr/lib64/httpd/modules/에 대한 심볼릭 링크이며 기본 컨텍스트는 https_modules_t이다.
  • run/은 service명령 등의 실행 정보를 기록하는 디렉터리로 /var/run/httpd의 심볼릭 링크이다.
# 1. 아파치 웹 서버 실행
# yum install httpd # 설치
# lokkit -s http # 외부에서의 연결을 위해 방화벽 해제(자동 iptables재부팅)
# chkconfig httpd on # 부팅과 동시에 구동하게 설정
# chkconfig httpd --list  # 설정 값 확인

# serice httpd configtest # httpd.conf파일의 설정 이상 유무 확인
# service httpd graceful # 재부팅(요청들 처 후)

1-2. httpd.conf 설정

  • 웹 서버의 주요 파일 설정으로 전역 설정, 서버 설정, 가상 호스트 설정으로 나뉜다.
  • 전역 설정
  1. ServerRoot: 설정&로그 최상위 디렉
  2. ServerTokens: 오류 시 노출할 정보 범위. 정보 최소화를 위해 Production설정 권장
  3. keepAlive: On으로 설정시 HTTP 지속연결을 이용하여 세션 하나로 여러 요청 처리
  4. MaxKeepAliveRequests: 한 세션에 동시연결가능한 클라이언트 수. 낭낭하면 좋음
  5. KeepAliveTimeout: 클라이언트에서 처리할 시간. 크면 소켓개수 적게되긴 함
  6. Listen: 포트 설정
  7. LoadModule: 사용 가능 모듈 목록. 추가가능
  8. Include: 분할된 설정파일 포함
  9. User, Group: 유닉스에서 1024포트는 루트로 사용해야하는데 아파치의 경우 해킹의 위험 때문에 최초 구동을 루트로 한 이후 자식 프로세스를 이용해 setgid함수로 User, Group으로 전환시킨다. 이때 사용되는 사용자/그룹명이 apache:apache이기에 로그인이 불가능하게 /sbin/nologin으로 설정한다.

1-3. 서버 설정

  1. ServerAdmin: 서버 관리자 이메일 주소 설정
  2. ServerName: 서버 전체 도메인 네임
  3. AllowOverride: 디렉터리 별 설정 .htaccess(but 설능저하, 보안취약)
  4. DocumentRoot: /var/www/html
  5. DirectoryIndex: index.html, index.html.var
  6. <Directory> 지시자: 디렉터리 단위 별 설정 적용 시 사용
  7. <Files> 지시자: 파일 명에 따른 설정 적용
  8. Redirect: url to new url
  9. Redirect Match: Regex url to new url
  10. Default Type: 기본 MIME 타입
  11. LogFormat, ErrorLog: 제곧내
  12. CustomLog: 클라이언트 접속/요청 이력을 남길 파일 경로
  13. Alias: 별칭
  14. AddDefaultCharSet: 가상호스트 별 HTTP응답헤더에 추가

1-4. 가상 호스트

  • 하나의 장비로 여러 도메인을 가지는 서비스를 각각 구동할 경우 사용
  1. Ip 기반 가상 호스트: 웹 서버에 여러 IP할당 및 가상 호스트 사용
  2. 포트 기반 가상 호스트: 포트별로 아파치 실행 혹은 Listen사용
  3. 이름 기반 가상 호스트: DNS 기반 여러 도메인 분산. NameVirtualHost *:80

2. 모듈을 이용한 기능 확장

2-1. 사용 환경과 정규 표현식

  • 기본적으로 아파치모듈의 지시가는 장소와 범위가 어디에 설정했는지에 따라 전역 설정, 가상 호스트, 디렉터리 or 로케이션에 따라 달라진다. 기본은 전역 설정이다.
  • 정규표현식 사용이 가능하다.

2-2. mod_setenvif를 이용한 조건부 환경설정

  • BrowserMatch지시자를 이용해 브라우저의 Usage-Agent헤더 별 환경변수를 설정 / 해제할 수 있다.
# 브라우저가 Mozila로 시작하는 경우 두 개의 환경변수 설정
BrowserMatch ^Mozilla iframes=yes browser=netscape
# 브라우저가 curl links wget와 같은 명령어 기반 HTTP클라이언트인 경우 환경변수를 설정하고 환경변수를 삭제한다.(javascript)
BrowserMatch "^(curl|ELink|Wget)" iframes=np !javascript
  • BrowserMatchNoCase 지시자를 이용해 대소문자 구분 없이 처리가 가능하다.
  • SetEnvif지시자는 HTTP요청 속성에 따라 환경변수를 정의한다. 이를 이용해 이미지를 로깅하지 않거나, 리퍼터 체크, AND OR 연산이 가능하다. 마찬가지로 NoCase버전이 있다.

2-3. mod_header로 HTTP 헤더 다루기

  • HTTP요청 및 응답 헤더를 조정하고 변경할 수 있는 모듈이다. 순차적으로 처리하기에 설정 순서가 중요하다.

  • 다음과 같은 옵션을 사용할 수 있다. set, append, add, unset, echo

  • 비슷하게 콘텐츠 핸들러보다 먼저 호출되며 브라우저의 헤더를 삭제할 수 있다는 점이 차이점인 RequestHeader지시자가 존재한다.

  • 위 기능들을 활용하여 서버의 PHP헤더를 제거하여 정보 노출을 최소화하거나, 기본 인터넷 익스플로러 호환성을 제거하거나, 로그인 페이지는 캐시를 사용하지 않도록 하는 등으로 활용 가능하다.

  • mod_header로 설정한 지시자가 제대로 동작하는지를 위해 curl을 사용한다. -v옵션을 주거나 서버의 헤더 정보를 출력하는 -I옵션을 주면 된다.

2-4. mod_rewrite로 URL 다루기

  • 규칙(정규표현식) 기반으로 URL을 redirection 혹은 rewriting할 수 있는 아파치 확장 모듈이다.
RewriteRule pattern target_url [flag, flag, ...] # flag는 패턴이 일치할 경우 어떤 동작을 취할지 지정
  • 기능은 Clean(Short) URL, 대규모 가상 호스트, 웹사이트 재배치, 조건에 따른 처리(http, https) 등이 있다.

  • 간단한 URL 전환은 Redirect지시자를 사용하는 것이 더 간편하다.

  • mod_rewirte에서 아파치의 다양한 환경변수를 사용할 수 있다.

  • 조건에 따라 rewrite를 수행하는 RewriteCond지시자도 있다.

  • mod_rewrite는 다음과 같은 상황에 적용할 수 있다. 쿼리를 사용한 URL을 결과 URL로 전환, 요청 리소스가 없을 경우 404페이지로 전환, 리소스의 외부 링크 차단, HTTP 연결을 HTTPS로 전환, 모든 페이지를 HTTPS로 전환 등.

2-5. mod_ssl을 이용한 보안 강화

  • TLS(Transport Layer Security)는 SSL(Secure Socket Layer)를 기반으로 하는 암호화 프로토콜이다.

  • mod_ssl은 OpenSSL을 이용해 HTTPS를 구현한 확장 모듈이다.

  • 적용 시 curl -v옵션을 추가하여 핸드셰이크 과정까지 확인할 수 있다.

  • ssl사이트가 여러 개인 경우 웹 서버의 가상 호스트 기능을 이용해 한 장비에서 서비스 가능하며, NameVirtualHost *:443처럼 가상 호스트 별 달라질 설정을 추가하면 된다.

  • 이 때 HTTP연결 이전에 SSL세션 구축이 이루어지기에, SSL 핸드셰이크 과정에서 받은 서버의 SSL인증서와 브라우저(HTTP)가 요청하는 가상 호스트가 다르면 신뢰할 수 없는 사이트라고 뜬다.

profile
이제 3학년..

0개의 댓글