Web Server/Apache

○ Apache 가이드 - 설치부터 HTTPS 적용까지

심심한 낙지 2020. 7. 5. 18:07

POOPOO: 배변 일기 앱

SMALL

 

이 포스팅은 CentOS 7 버전에서 진행되었습니다.


목차


설치하기

 

Apache 설치하기

Apache와 Apache Tomcat을 연동하는 방법은 총 세가지가 있습니다. 그 중 한가지인 mod_jk를 사용하는 방법은, httpd-devel을 사용해야 에러가 나지 않기 때문에, httpd-devel 을 설치합니다.

# yum install -y httpd-devel

 

 

방화벽 설정하기

외부에서 접근을 허용하기 위해서는 방화벽에 해당하는 포트를 허용할 수 있도록 등록해야 합니다.

Apahe는 80번 포트를 사용하고 있기 때문에, 아래와 같이 방화벽에 80번 포트를 허용합니다.

이후에 SSL 인증서를 적용하여 HTTPS를 사용하기 위해서는 443 포트를 사용하기 때문에 443 포트를 허용합니다.

--reload 명령어를 통해서 방화벽에 적용을 해줍니다.

# firewall-cmd --permanent --zone=public --add-port=80/tcp
# firewall-cmd --permanent --zone=public --add-port=443/tcp
# firewall-cmd --reload

 

 

실행하기

설치된 Apache 웹서버를 실행합니다.

시작 - start / 중지 - stop / 재시작 - restart

# service httpd start

 

 

접속하기

시작한 다음, 웹서버로 접속을 시도해봅니다.

웹 브라우저를 켜신 후, "http://아이피:80/" 을 입력하시면 아래와 같은 페이지가 뜨는 것을 보실 수 있습니다.

 

 

Apache 웹 서버의 초기 화면


HTTPS 인증서 적용하기

 

필요한 패키지 설치하기

정상적인 방법으로 HTTPS 인증서를 적용하기 위해서는, 인증서를 발급하는 업체에 일정 금액을 지급한 후, 인증서 파일을 넘겨받습니다.

하지만, 그러기 위해서는 도메인(https://naver.com과 같은 사이트 주소)을 구매해야하기 때문에 개발단계에서는 부담이 될 수 있습니다.그렇기 때문에 초기에는 사설 인증서 파일을 만들어서 Apache 서버에 적용합니다.

그래서 이번 포스팅에서는 사설 인증서를 만들기 위한 패키지를 설치하는 방법에 대해서 정리해보겠습니다.

# yum install -y mod_ssl openssl

 

 

인증서 생성하기

개인키 생성하기

# openssl genrsa -out ssl.key 2048

 

인증서 발급을 위해 필요한 정보를 담고있는 CSR 파일 생성하기

# openssl req -new -key ssl.key -out ssl.csr

 

개인키와 CSR 파일을 이용하여, SSL 인증서 파일(*.crt)을 생성하기

# openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt

 

파일을 지정된 경로에 복사하기

# cp ssl.crt /etc/pki/tls/certs
# cp ssl.key /etc/pki/tls/private/ssl.key
# cp ssl.csr /etc/pki/tls/private/ssl.csr

 

 

환경설정 파일 수정하기

Apache의 환경설정 파일은 httpd.conf 라는 이름을 가집니다. 이 파일을 찾아서 상단에 아래와 같은 내용을 추가합니다.

# vi /etc/httpd/conf/httpd.conf
<< 추가할 내용 >>

NameVirtualHost *:443
<VirtualHost *:443>
  ServerName localhost
  SSLEngine on
  SSLCertificateFile /etc/pki/tls/certs/ssl.crt
  SSLCertificateKeyFile /etc/pki/tls/private/ssl.key
</VirtualHost>

 

 

Apache 재시작

설정파일 변경 후, 변경한 내용을 반영하기 위해서 Apache 서버를 재시작합니다.

# service httpd restart

Tip :: 스크립트 작성하기

 

작업 순서 정리하기

1. Apache 설치

2. 방화벽 설정

3. HTTPS 인증서에 필요한 패키지 설치

4. 인증서 생성 후 지정된 위치에 복사

5. httpd.conf 상단에 HTTPS 관련 설정 추가

6. 기존 httpd.conf 파일 백업 후 새로 만든 httpd.conf 파일로 덮어쓰기

7. Apache 재시작

 

 

스크립트 작성하기

위에서 작성한 작업 순서에 맞게 쉘 스크립트를 작성해줍니다.

이와같이, 직접 개발환경을 구성하는 작업을 한 후, 팀원들에게 개발환경을 공유하는 방법에 있어서는 쉘 스크립트가 매우 유용합니다.

단! 쉘 스크립트는 운영체제와 패키지의 버전에 매우 민감하기 때문에, 장기간 사용할 수는 없고, 주기적으로 잘 작동되는지 테스트를 해야합니다.

이 점만 유의해주시면 팀원들에게 좀 더 빠르게 개발환경을 구성해 주실 수 있을 것 같습니다.

 

스크립트 파일 만들고 실행권한을 부여하기

# touch installAndSSL
# chmod 755 installAndSSL

 

생성된 스크립트 파일에 아래의 내용을 입력하기

# vi installAndSSL
# ---------------- installAndSSL 파일내용 ----------------
# 1. 아파치 설치
yum install -y httpd-devel


# 2. 방화벽 설정
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --reload


# 3. HTTPS 인증서에 필요한 패키지 설치
yum install -y mod_ssl openssl


# 4. 인증서 생성 후 지정된 위치에 복사
openssl genrsa -out ssl.key 2048
openssl req -new -key ssl.key -out ssl.csr
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt
cp ssl.crt /etc/pki/tls/certs
cp ssl.key /etc/pki/tls/private/ssl.key
cp ssl.csr /etc/pki/tls/private/ssl.csr


# 5. httpd.conf 파일만들기
touch httpd.conf

echo 'NameVirtualHost *:443' >> httpd.conf
echo '<VirtualHost *:443>' >> httpd.conf
echo '  ServerName localhost' >> httpd.conf
echo '  SSLEngine on' >> httpd.conf
echo '  SSLCertificateFile /etc/pki/tls/certs/ssl.crt' >> httpd.conf
echo '  SSLCertificateKeyFile /etc/pki/tls/private/ssl.key' >> httpd.conf
echo '</VirtualHost>' >> httpd.conf

echo 'ServerRoot "/etc/httpd"' >> httpd.conf
echo 'Listen 80' >> httpd.conf
echo 'Include conf.modules.d/*.conf' >> httpd.conf
echo 'User apache' >> httpd.conf
echo 'Group apache' >> httpd.conf
echo 'ServerAdmin root@localhost' >> httpd.conf

echo '<Directory />' >> httpd.conf
echo '    AllowOverride none' >> httpd.conf
echo '    Require all granted' >> httpd.conf
echo '</Directory>' >> httpd.conf

echo 'DocumentRoot "/var/www/html"' >> httpd.conf
echo '<Directory "/var/www">' >> httpd.conf
echo '    AllowOverride None' >> httpd.conf
echo '    Require all granted' >> httpd.conf
echo '</Directory>' >> httpd.conf
echo '<Directory "/var/www/html">' >> httpd.conf
echo '    Options Indexes FollowSymLinks' >> httpd.conf
echo '    AllowOverride None' >> httpd.conf
echo '    Require all granted' >> httpd.conf
echo '</Directory>' >> httpd.conf
echo '<IfModule dir_module>' >> httpd.conf
echo '    DirectoryIndex index.html' >> httpd.conf
echo '</IfModule>' >> httpd.conf
echo '<Files ".ht*">' >> httpd.conf
echo '    Require all denied' >> httpd.conf
echo '</Files>' >> httpd.conf
echo 'ErrorLog "logs/error_log"' >> httpd.conf
echo 'LogLevel warn' >> httpd.conf
echo '<IfModule log_config_module>' >> httpd.conf
echo '    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined' >> httpd.conf
echo '    LogFormat "%h %l %u %t \"%r\" %>s %b" common' >> httpd.conf
echo '    <IfModule logio_module>' >> httpd.conf
echo '      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio' >> httpd.conf
echo '    </IfModule>' >> httpd.conf
echo '    CustomLog "logs/access_log" combined' >> httpd.conf
echo '</IfModule>' >> httpd.conf
echo '<IfModule alias_module>' >> httpd.conf
echo '    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"' >> httpd.conf
echo '</IfModule>' >> httpd.conf
echo '<Directory "/var/www/cgi-bin">' >> httpd.conf
echo '    AllowOverride None' >> httpd.conf
echo '    Options None' >> httpd.conf
echo '    Require all granted' >> httpd.conf
echo '</Directory>' >> httpd.conf
echo '<IfModule mime_module>' >> httpd.conf
echo '    TypesConfig /etc/mime.types' >> httpd.conf
echo '    AddType application/x-compress .Z' >> httpd.conf
echo '    AddType application/x-gzip .gz .tgz' >> httpd.conf
echo '    AddType text/html .shtml' >> httpd.conf
echo '    AddOutputFilter INCLUDES .shtml' >> httpd.conf
echo '</IfModule>' >> httpd.conf
echo 'AddDefaultCharset UTF-8' >> httpd.conf
echo '<IfModule mime_magic_module>' >> httpd.conf
echo '    MIMEMagicFile conf/magic' >> httpd.conf
echo '</IfModule>' >> httpd.conf
echo 'EnableSendfile on' >> httpd.conf
echo 'IncludeOptional conf.d/*.conf' >> httpd.conf

# 6. 기존의 httpd.conf 파일을 백업후 위에서 만든 파일 붙여넣기
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.backup
rm -f /etc/httpd/conf/httpd.conf
cp ./httpd.conf /etc/httpd/conf/


# 7. Apache 재시작
service httpd restart

 

 

스크립트 실행하기

# ./installAndSSL

 

LIST