web hacking(Knockon Bootcamp)

[2주차 TIL] KnockOn Bootcamp Apache

king-neo 2024. 12. 15. 17:02

아파치 웹 서버의 개념

아파치 웹서버는 리눅스 기반의 오픈소스 웹서버 소프트웨어이다.

아파치는 고성능의 HTTP 서버이며, 안정성과 확장성(모듈), 호환성(다양한 운영체제 사용)이 매우 좋다.

모듈이라는 개념으로 수많은 기능을 추가할 수 있다.

 

아파치의 기본 구조와 모듈

  • httpd
  • 설정 파일
  • 모듈

모듈

아파치의 주요 설정 파일

아파치의 메인 설정 파일인 httpd.conf의 설정요소

 

httpd.conf의 설정요소

  • ServerRoot - Apache의 설치 디렉토리, 
  • Listen - 통신하는 특정 포트 설정
  • LoadModule - 디렉토리 안 모듈 읽어들이고, 사용 가능한 모듈 목록 추가
  • ServerAdmin - 서버 오류 발생 시 클라이언트로 전송하는 오류 메세지가 들어갈 이메일 주소 설정
  • ServerName - 호스트 이름 및 포트 설정, 등록된 DNS 이름이 없으면 IP 주소 설정
  • DocumentRoot "/usr/local/www" - 클라이언트 요청을 저장하는 디렉토리 설정
  • DirectoryIndex index.html - 클라이언트가 서버 루트 경로 접근할때 보여줄 파일

port.conf - 포트 설정 파일

 

.htaccess 파일의 사용법

.htaccess 파일은 웹 서버 디렉토리를 설정한다. 즉, 웹 서버 설정을 개별적으로 지정할 수 있다.

이 파일은 주로 URL redirection, 인증, 접근 제한, 에러 페이지 설정 등 기능을 설정할 수 있다.

 

[Order, Allow, Deny 지시어]

클라이언트가 사용하는 호스트의 IP주소나 도메인에 의해 웹서버의 데이터에 대한 접근 통제한다.

 Allow, Deny 지시자는 접속 허락과 차단할 수 있도록 지정한다. 동시에 사용할 경우에는 Order 지시어를 통해 설정한다.

-Order Allow, Deny - Allow지시자 먼저 검사하고 Deny 지시자가 검사한다. 접근을 기본적으로 차단한다.

-Order Deny, Allow -  Deny지시자 먼저 검사하고 Allow 지시자를 검사한다. 접근을 기본적으로 허용한다.

 

  • URL 리디렉션 및 재작성
RewriteEngine On
RewriteCOnd %{HTTP_HOST} ^olddomain.com$ [NC]
RewriteRule ^(.*)$ https://www.newdomain.com/ [R=301,L]

 

  • 접근 제어(192.168.1 IP 호스트 차단)
<Directory /usr/local/www>
	Order Allow,Deny
    Allow from all
    Deny from 192.168.1
</Directory>

 

  • AuthName "인증시도 문구"  - 인증창에 뜰 내용
  • AuthType Basic - 인증 방식(Basic/Digest)
  • AuthUserFile /www/.htpasswd - 인증 적용 경로( .htaccess 인증요구, htpasswd 인증확인)
  • Require user ID - 인증 허용할 user id
  • ErrorDocument 401 "인증 실패시 문구" - 인증 실패시 문구
  • # htpasswd -c .htpasswd ID - 최초 계정 ID 생성( 추가 생성시 -c 제거)
  • Adding Password for ID
  • New password: Password 입력
  • Re-type new password: Password 재입력

 

아파치 성능 튜닝의 기초

httpd.conf 설정

  • Timeout - 지정한 시간동안 클라이언트가 응답이 없을 경우, 세션 종료  
Timeout 60
  • KeepAlive - 지속적인 연결 허용 여부 설정 
KeepAlive on
  • MaxKeepAliveRequests - 허용할 최대 요청 수 지정, 성능 높이려면 높게 설정 권장, 무제한은 0으로 설정
MaxKeepAliveRequests 100

 

아파치 메모리 사용량 측정

ps aux | grep apache2 | awk '(print $6)' | awk '{total = total + $1} END {print total/1024}'
// 아파치의 메모리 사용량
ps aux | grep httpd | wc -1
// 아파치 프로세스 개수
netstat -nta | grep : 80.*ESTABLISHED | wc -1
//처치 클라이언트 수

메모리 사용량을 프로세스 개수로 나누면 평균 메모리 사용량을 알 수 있다.

 

 

도전

아파치와 Nginx의 차이점 이해하기

  Apache Nginx
설계 아키텍처 프로세스 기반 접근 방식(하나의 스레드가 하나의 요청 처리), 멀티 스레드 방식 이벤트 중심 접근 방식(하나의 스레드가 여러 요청 처리), 비동기 방식
OS 지원 모든 Unix 계열 지원, Windows 모두 지원 거의 모든 Unix 계열 지원, Windows 부분 지원
유연성 동적 모듈과 로딩 지원 동적 모듈과 로딩 지원 x
특징 안정성, 확장성, 호환성 우세 성능 우세

Tomcat의 대해 이해하기

Tomcat은 JAVA 기반의 웹 어플리케이션을 위한 오픈 소스 서블릿 컨테이너이자 웹 서버이다.

JAVA 서블릿과 JSP(JavaServer Pages)를 지원하여 동적인 웹 컨턴츠를 생성하고 처리 가능하다.

서블릿 : 클라이언트의 요청을 처리하고, 그 결과를 반환하는 자바 프로그램
JSP : HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구

 

[Tomcat의 특징]

  • 경량화된 서버 - 경량화된 설계로 서버를 가볍게 빠르게 동작 가능
  • 호환성 - 다양한 운영체제 구동 가능
  • 보안성 - SSL/TLS 암호화, 사용자 인증 및 권한 관리, 클러스터링 등 보안성이 좋음
  • 개발과 배포 용이성 - 대부분의 기능을 개발하고 배포

 

apache 로컬환경 or 클라우드서버 에서 설치 후 실습해보기

일단 apache를 Linux 환경에서 설치하여 실행해보겠다.

sudo apt-get install apache2
sudo apt-get update apache2
sudo apt-get upgrade apache2

sudo systemctl start apache2 // apache 서버 시작
sudo systemctl stop apache2 // apache서버 종료
sudo systemctl status apache2 // apache 상태 확인

 

apache 실행하면 http://localhost를 치면 따로 화면이 나오는데 나는 딱히 안나와 찾아보니 

 

이 홈페이지 내용을 보면 위 화면에 보이는 html 파일은 /var/www/html/index.html에 위치하며 변경할 수 있다고 말한다.

Documentroot가 어디로 설정하는지 확인하려 000-default.conf에 확인하였다.

그러면 이제 /var/www/html에 들어있는 파일들이 클라이언트가 요청하면 주는 파일이겠다 생각하였다.

그래서 이제 DirectoryIndex를 찾아서 어떻게 주는지 확인하려고 찾아보았다.

찾은 결과로 /etc/apache2/mods-enabled/dir.conf에 있는 것을 확인하였다.

위 사진을 보아 어떤 파일을 클라이언트에게 주는지 확인할 수 있다.

 

이를 통해서 내가 html파일과 php파일을 /var/www/html에 넣은 뒤 dir.conf에 설정하면 localhost를 치면 이제 내 html이      나올 수 있겠다는 생각할 수 있게 되었다.