
- 정적 웹 서버 동작 방식
- 클라이언트 즉, 웹 브라우저를 통해 80번 포트로 웹 서버에 연결
- 사용자 문서 (index.html)를 요청
- 웹 서버가 클라이언트가 요청한 파일을 시스템에서 검색
- 웹 서버가 요청한 파일을 읽음
- 웹 서버가 파일을 클라이언트의 웹 브라우저에게 제
- 동적 웹 서버 동작 방식
- 클라이언트 즉, 웹 브라우저를 통해 80번 포트로 웹 서버에 연결
- 사용자 문서 동적인 페이지를 표현하는 php 프로그램 요청
- 웹 서버가 php 프로그램을 실행시킨 후 클라이언트가 요청한 매개변수 넘겨줌
- 웹 서버가 php 프로그램으로부터 생성된 결과를 읽어드림
- php 프로그램으로부터의 결과를 웹 서버는 클라이언트의 브라우저에 전송
| /var/www/ | 웹 페이지 콘텐츠 기본 디렉토리 위치 |
|---|---|
| /etc/httpd/conf | 웹 서버 주 설정 파일인 http.conf 파일 위치 |
| /etc/httpd/conf.d/ | 웹 서버의 추가 설정 파일 위치 |
| /etc/httpd/conf.modules.d/ | 웹 서버와 함께 설치된 모듈 설정 관련 파일 위치 |
| /usr/share/httpd | 테스트 페이지, 에러 페이지 등 기본 컨텐츠 위치 |
| /usr/share/doc/httpd | 웹 서버 관련 문서 파일 위치 |
Apache 구성


AllowOverride
Require
가상 호스트
가상 호스트 구성

- HTTPS 암호화 방식
- 클라이언트 → 서버로 랜덤 데이터와 사용 가능한 암호화 방식을 보낸다.
- 서버 → 클라이언트로 랜덤 데이터, 사용할 암호화 방식과 SSL 인증서를 보낸다.
- 클라이언트는 서버에게 받은 인증서의 CA가 자신이 들고 있는 CA 리스트에 있는지 확인하고, 있다면 CA의
공개키로 복호화한다. 이는 곧 CA 비밀키에 의해 암호화됐다는 것이므로 인증서의 신원을 보증해준다.
(공개키 암호화 방식)- 클라이언트는 자기가 보낸 랜덤 데이터와 서버로부터 받은 랜덤 데이터를 조합하여 임시 키 (pre master
secret key)를 만든다.- 만들어진 임시 키를 인증서의 공개키로 암호화하여 서버에게 보낸다.
- 서버는 자신이 들고 있던 비밀키로 임시 키를 복호화한다.
- 이로써 클라이언트와 서버는 동일한 임시 키를 공유하게 되는데, 일련의 과정을 거쳐 master secret 값을
만들고 세션 키를 생성한다.- 이렇게 만들어진 세션 키로 암호화된 데이터를 주고받는다. (대칭키 암호화 방식)
- 세션이 종료되면 클라이언트와 서버 모두 세션 키를 폐기한다
web 서비스 실습
가상 호스트
dnf -y install httpd
- vhost0
cd /etc/httpd/conf.d/
vi 00-vhost.conf
<VirtualHost *:80>
DocumentRoot /var/www/html0
ServerName vhost0.test.example.com
ServerAlias vhost0
</VirtualHost>
<Directory /var/www/html0>
AllowOverride None
Require all granted
</Directory>
:wq
mkdir /var/www/html0
echo vhost0 > /var/www/html0/index.html
--------------------------------------------
- vhost1
cd /etc/httpd/conf.d/
vi 01-vhost.conf
<VirtualHost *:80>
DocumentRoot /var/www/html1
ServerName vhost1.test.example.com
ServerAlias vhost1
</VirtualHost>
<Directory /var/www/html1>
AllowOverride None
Require all granted
</Directory>
:wq
mkdir /var/www/html1
echo vhost1 > /var/www/html1/index.html
-----------------------------------------
vi /etc/hosts
192.168.56.101 server.test.example.com vhost0.test.example.com vhost0 vhost1.test.example.com vhost1
:wq
systemcl start httpd
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
curl server.test.example.com
curl vhost0
curl vhost1
===========================================
https 실습
ssl 패키지 설치
yum -y install mod_ssl
openssl genrsa -out private.key 2048
openssl req –new –key private.key –out cert.csr
openssl x509 –req –signkey private.key –in cert.csr –out cert.crt
chmod 600 private.key cert.crt
mv private.key /etc/pki/tls/private/
mv cert.* /etc/pki/tls/certs/
----------------------------------------------------
vi /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
DocumentRoot "/var/www/html" => # 제거
ServerName server.test.example.com:443 => # 제거 후에 server.test.example.com:443 으로 변경
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/pki/tls/certs/localhost.crt => cert.crt 으로 변경
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key => private.key 로 변경
:wq
----------------------------------------------------------
vi /etc/httpd/conf.d/00-vhost.conf
<VirtualHost *:80>
DocumentRoot /var/www/html0
ServerName vhost0.test.example.com
ServerAlias vhost0
RewriteEngine On => 추가
RewriteCond %{HTTPS} off => 추가
RewriteRule ^(.*)$https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] => 추가
</VirtualHost>
<Directory /var/www/html0>
AllowOverride None
Require all granted
</Directory>
:wq
----------------------------------------------------------------
vi /etc/httpd/conf.d/01-vhost.conf
<VirtualHost *:80>
DocumentRoot /var/www/html1
ServerName vhost1.test.example.com
ServerAlias vhost1
RewriteEngine On => 추가
RewriteCond %{HTTPS} off => 추가
RewriteRule ^(.*)$https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] => 추가
</VirtualHost>
<Directory /var/www/html1>
AllowOverride None
Require all granted
</Directory>
:wq
----------------------------------------------------------
systemcl restart httpd
firewall-cmd --add-service=https --permanent
firewall-cmd --reload