이미지 로딩 중...
CodeDeck AI
2025. 11. 8. · 2 Views
Apache 웹서버 기초부터 심화까지
Apache 웹서버의 핵심 개념부터 고급 설정까지 다루는 완벽 가이드입니다. 기본 설정, 가상 호스트, 보안, 성능 최적화 등 실무에서 필요한 모든 Apache 설정을 실제 예제와 함께 학습합니다.
들어가며
이 글에서는 Apache 웹서버 기초부터 심화까지에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Apache_기본_설정
- 가상_호스트_설정
- htaccess_활용
- SSL_인증서_설정
- URL_리라이팅
- 접근_제어_및_인증
- 성능_최적화_설정
- 보안_헤더_설정
- 로그_관리_및_분석
- 프록시_및_리버스_프록시
- MPM_설정_최적화
- 캐시_설정
1. Apache_기본_설정
개요
Apache의 핵심 설정 파일인 httpd.conf의 기본 구조와 필수 디렉티브를 이해합니다. ServerName, DocumentRoot 등 기본 설정을 통해 웹서버의 기초를 다집니다.
코드 예제
ServerName example.com
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
설명
ServerName으로 도메인을 지정하고, DocumentRoot로 웹 문서 경로를 설정합니다. Directory 블록에서 해당 경로의 접근 권한과 옵션을 제어합니다.
2. 가상_호스트_설정
개요
하나의 Apache 서버에서 여러 도메인을 운영할 수 있는 가상 호스트 설정입니다. 포트 기반과 네임 기반 가상 호스트를 구성할 수 있습니다.
코드 예제
<VirtualHost *:80>
ServerName site1.com
DocumentRoot "/var/www/site1"
ErrorLog "logs/site1-error.log"
CustomLog "logs/site1-access.log" combined
</VirtualHost>
설명
VirtualHost 블록으로 개별 사이트를 정의하고, 각 사이트마다 별도의 DocumentRoot와 로그 파일을 지정하여 독립적으로 관리합니다.
3. htaccess_활용
개요
.htaccess 파일로 디렉토리별 설정을 동적으로 제어합니다. URL 리다이렉션, 접근 제어, MIME 타입 설정 등을 수행할 수 있습니다.
코드 예제
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Options -Indexes
DirectoryIndex index.html index.php
설명
RewriteEngine으로 HTTP를 HTTPS로 자동 리다이렉트하고, Options -Indexes로 디렉토리 목록 노출을 방지합니다. 보안과 SEO를 동시에 개선합니다.
4. SSL_인증서_설정
개요
HTTPS를 위한 SSL/TLS 인증서 설정입니다. Let's Encrypt 또는 상용 인증서를 Apache에 적용하여 안전한 통신을 구현합니다.
코드 예제
<VirtualHost *:443>
ServerName secure.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/cert.pem
SSLCertificateKeyFile /etc/ssl/private/key.pem
SSLCertificateChainFile /etc/ssl/certs/chain.pem
</VirtualHost>
설명
443 포트에서 SSLEngine을 활성화하고, 인증서 파일 경로를 지정합니다. 인증서, 개인키, 체인 파일을 정확히 설정해야 HTTPS가 작동합니다.
5. URL_리라이팅
개요
mod_rewrite 모듈을 사용한 고급 URL 변환입니다. 사용자 친화적인 URL 구조를 만들고, 레거시 URL을 새 구조로 매핑합니다.
코드 예제
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/([a-zA-Z0-9]+)$ profile.php?id=$1 [L,QSA]
설명
실제 파일이나 디렉토리가 아닌 경우, /user/john 같은 깔끔한 URL을 profile.php?id=john으로 내부 변환합니다. SEO와 사용자 경험을 개선합니다.
6. 접근_제어_및_인증
개요
특정 디렉토리나 파일에 대한 접근을 제한하고, 기본 인증을 구현합니다. IP 기반 제어와 사용자 인증을 결합할 수 있습니다.
코드 예제
<Directory "/var/www/admin">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Require ip 192.168.1.0/24
</Directory>
설명
Basic 인증으로 사용자명/비밀번호를 요구하고, 특정 IP 대역에서만 접근을 허용합니다. 관리자 페이지 보호에 유용합니다.
7. 성능_최적화_설정
개요
Apache의 성능을 향상시키는 핵심 설정입니다. 압축, 캐싱, KeepAlive 등을 통해 응답 속도와 처리량을 개선합니다.
코드 예제
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
설명
KeepAlive로 연결 재사용을 활성화하고, mod_deflate로 텍스트 기반 콘텐츠를 압축합니다. 네트워크 대역폭을 절약하고 로딩 속도를 크게 향상시킵니다.
8. 보안_헤더_설정
개요
웹 애플리케이션의 보안을 강화하는 HTTP 헤더를 설정합니다. XSS, 클릭재킹, MIME 스니핑 공격을 방어합니다.
코드 예제
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=31536000"
</IfModule>
설명
보안 헤더로 iframe 삽입 차단, MIME 타입 변조 방지, XSS 공격 차단을 수행합니다. HSTS로 HTTPS 사용을 강제하여 중간자 공격을 방어합니다.
9. 로그_관리_및_분석
개요
Apache의 접근 로그와 에러 로그를 효과적으로 관리합니다. 커스텀 로그 포맷으로 필요한 정보만 기록하여 분석합니다.
코드 예제
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog "logs/access.log" combined
ErrorLog "logs/error.log"
LogLevel warn
설명
combined 포맷으로 IP, 요청, 상태코드, 리퍼러, 사용자 에이전트를 기록합니다. LogLevel로 로그 상세도를 조절하여 디스크 사용량을 관리합니다.
10. 프록시_및_리버스_프록시
개요
Apache를 리버스 프록시로 설정하여 백엔드 서버를 보호하고 로드밸런싱을 구현합니다. Node.js, Python 등 다른 서버와 연동합니다.
코드 예제
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /api http://localhost:3000/api
ProxyPassReverse /api http://localhost:3000/api
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
설명
/api 경로는 3000 포트의 Node.js로, 나머지는 8080 포트로 전달합니다. ProxyPreserveHost로 원본 호스트명을 유지하여 백엔드가 올바른 요청을 처리하게 합니다.
11. MPM_설정_최적화
개요
Multi-Processing Module(MPM) 설정으로 Apache의 동시 처리 성능을 조정합니다. prefork, worker, event 모드 중 환경에 맞게 선택합니다.
코드 예제
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 1000
</IfModule>
설명
event MPM으로 비동기 처리를 활성화하고, 워커 수를 조정하여 메모리와 성능의 균형을 맞춥니다. 트래픽 패턴에 따라 값을 튜닝해야 합니다.
12. 캐시_설정
개요
mod_cache를 활용한 서버 사이드 캐싱으로 반복적인 요청 처리 속도를 대폭 향상시킵니다. 정적/동적 콘텐츠 모두 캐싱 가능합니다.
코드 예제
<IfModule mod_cache.c>
CacheEnable disk /
CacheRoot /var/cache/apache2/mod_cache_disk
CacheDefaultExpire 3600
CacheMaxFileSize 1000000
CacheIgnoreNoLastMod On
</IfModule>
설명
디스크 캐시를 활성화하여 1MB 이하 파일을 1시간 동안 캐싱합니다. 데이터베이스 쿼리 결과나 API 응답을 캐싱하여 백엔드 부하를 크게 감소시킵니다.
마치며
이번 글에서는 Apache 웹서버 기초부터 심화까지에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#Apache #VirtualHost #htaccess #SSL #ModRewrite