(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

Listen 8080을 추가한다.

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

포트 4000 추가 입력

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

4000은 없는 상황

포트 등록

semanage port -a -t http_port_t -p tcp 4000

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
복사했습니다!