(Week 5 - Day 4) - (2/2)
(Week 5 - Day 5) - (1/2)
IP 기반 가상 호스트 - 1
- IP-Based Virtual Host
Virtual Host 웹 사이트 설정파일 설정
cd /etc/httpd/conf.d
vim ip-192.168.56.111.conf
# 이름이라서 아무렇게 지어도 된다.
웹 사이트 DocumentRoot 생성 및 웹 페이지 생성
cd /var/www
mkdir ip-site1
cd ip-site1
echo "192.168.56.111 ip-vhost" > index.html
IP 주소 추가
nmcli connection modify static2 +ipv4.address 192.168.56.111/24
# ipv4 앞에 +가 있으면 ip주소 추가, -가 있으면 ip주소 삭제, 부호가 없으면 변경
nmcli connection up static2
ip addr show # 추가한 ip 확인
서비스 재시작
systemctl restart httpd.service
웹 사이트 접속
IP 기반 가상 호스트 - 2
DocumentRoot를 /var/www/ 하위 디렉토리 이외의 디렉토리에 지정 시 구축 방법
Virtual Host 웹 사이트 설정파일 설정
cd /etc/httpd/conf.d
vim ip-192.168.56.121-dir.conf
웹 사이트 DocumentRoot 생성 및 웹 페이지 생성
mkdir -p /servers/web/ip-192.168.56.121
cd /servers/web/ip-192.168.56.121/
echo "192.168.56.121 ip-vhost" > index.html
IP 주소 추가
nmcli connection modify static2 +ipv4.addresses 192.168.56.121/24
nmcli connection up static2
ip address show
서비스 재시작
systemctl restart httpd.service
접속
원인
ls -ldZ /servers/web
SELinux 파일 보안 컨텍스트 확인시 유형 컨텍스트(Type Context)가 다름을 확인 후
해결
SELinux 동작 시스템의 경우 확인 및 추가 작업을 해주어야한다.
SELinux 유형 컨텍스트를 "httpd_sys_content_t"로 영구 설정
semanage fcontext -a -t "httpd_sys_content_t" "/servers/web(/.*)?"
restorecon -FRv /servers/web
재접속
포트 기반 가상 호스트 - 1
- Port-Based Virtual Host
- 표준 포트 사용
포트 추가
vim /etc/httpd/conf/httpd.conf
Virtual Host 웹 사이트 설정파일 설정
cd /etc/httpd/conf.d
vim port-8080-site1.conf
웹 사이트 DocumentRoot 생성 및 웹 페이지 생성
cd /var/www/
mkdir port-site-8080
cd port-site-8080/
echo "192.168.56.101:8080 port-vhost" > index.html
방화벽 연결 설정
firewall-cmd --add-port=8080/tcp
firewall-cmd --add-port=8080/tcp --permanent
서비스 재시작
systemctl restart httpd.service
접속
포트 기반 가상 호스트 - 2
- 비표준 포트 사용
포트 추가
vim /etc/httpd/conf/httpd.conf
Virtual Host 웹 사이트 설정파일 설정
cd /etc/httpd/conf.d
vim port-4000-site.conf
웹 사이트 DocumentRoot 생성 및 웹 페이지 생성
cd /var/www/
mkdir port-site-4000
cd port-site-4000/
echo "192.168.56.101:4000 port-vhost" > index.html
방화벽 연결 설정
firewall-cmd --add-port=4000/tcp
firewall-cmd --add-port=4000/tcp --permanent
서비스 재시작(오류)
systemctl restart httpd.service
4000은 비표준 포트이기 때문에 서비스시에 작동이 되지 않는다.
semanage port -l | grep http
포트 등록
semanage port -a -t http_port_t -p tcp 4000
서비스 재시작
systemctl restart httpd.service
접속
HTTPS 구성
웹 서버에서 클라이언트에게 콘텐츠를 제공하는 방식은 HTTP와 HTTPS가 있다.
HTTP : Hyper Text Transfer Protocol
HTTPS : Hyper Text Transfer Protocol over Secure Socket / HTTP Secure
개인키 생성
openssl genrsa -out private.key 2048
CSR(Certificate Signing Request) 생성
openssl req -new -key private.key -out cert.csr
인증서 발급
openssl x509 -req -signkey private.key -in cert.csr -out cert.crt
인증서 경로 이동
- 인증서 및 개인키를 지정된 경로로 이동
mv cert.crt /etc/pki/tls/certs/
mv private.key /etc/pki/tls/private/
restorecon -FRv /etc/pki/tls/
# (SELinux 보안 컨텍스트 문제 해결을 위해 restorecon 명령어 실행)
SSL/TLS 설정
패키지 설치
yum -y install mod_ssl
설치 시, SSL/TLS 관련 설정을 저장하고 있는 /etc/httpd/conf.d/ssl.conf 파일이 생성된다.
ssl.conf 주요 내용
cd /etc/httpd/conf.d
vim ssl.conf
Listen 443 https
<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on # on/off 기능
SSLProtocol all -SSLv2 -SSLv3 # ssl protocol 버전 지정
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA # 암호화 알고리즘 나열
SSLCertificateFile /etc/pki/tls/certs/localhost.crt #인증서 지정
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key #인증서 키 지정
</VirtualHost>
ssl 설정 변경
vim ssl.conf
# VirtualHost에 있는 내용만 건드린다.
# 혹시 모르니 바꾸기 전에 원본 라인 복사후 주석처리 해둘 것
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName www.example.com:443
SSLCertificateFile /etc/pki/tls/certs/cert.crt
SSLCertificateKeyFile /etc/pki/tls/private/private.key
</VirtualHost>
방화벽 연결 설정
firewall-cmd --add-service=https
firewall-cmd --add-service=https --permanent
서비스 재시작
systemctl restart httpd.service
도메인 주소 추가
- hosts 파일에 도메인 주소 추가
vim /etc/hosts
접속
주소 : https://www.example.com
예외 처리를 해주면 정상적으로 접속이 가능해진다.
동적 웹 컨텐츠 제공
- Python으로 동적 웹 컨텐츠 제공 실습
WSGI 모듈 설치
패키지 설치
yum -y install mod_wsgi
WSGIScriptAlias 설정
cd /etc/httpd/conf.d/
vim wsgi.conf
Python 스크립트 작성
cd /var/www/cgi-bin/
vim test.py
def application(environ,start_response):
status = '200 OK'
html = '<html>\n' \
'<body>\n' \
'<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">\n' \
'mod_wsgi Test Page\n' \
'</div>\n' \
'</body>\n' \
'</html>\n'
response_header = [('Content-type','text/html')]
start_response(status,response_header)
return [html]
실행
chmod a+x test.py
systemctl restart httpd.service
'Linux' 카테고리의 다른 글
[Linux] 27. MariaDB (0) | 2022.08.12 |
---|---|
[Linux] 25. Apache 웹 서버(~ 가상 호스트_이름 기반) (0) | 2022.08.11 |
[Linux] 24. iSCSI 블록 스토리지 (0) | 2022.08.10 |
[Linux] 23. NFS 스토리지 (0) | 2022.08.10 |
[Linux] 22. FTP 서버 (0) | 2022.08.09 |