본문 바로가기
프로그래밍/Linux

Ubuntu Apache SSL Express 연동

by 꾸션 2022. 5. 5.

Ubuntu에서 Apache 웹서버와 Node.js의 Express를 연동하고, SSL을 연동하여 HTTPS서비스를 위한 설정을 간단하게 요약하여 정리한 내용입니다.

 

패키지, 모듈, 설정파일 설치

apache서버와 ssl연동에 필요한 Ubuntu 패키지를 설치합니다.

# Apache 패키지 설치
sudo apt install apache2

# SSL관련 Apache 모듈 설치
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_html
sudo a2ensite default-ssl.conf
 

SSL/TLS: 웹 보안의 필수 구성요소

인터넷은 현재 전 세계에서 가장 널리 사용되는 정보와 커뮤니케이션 도구입니다. 불행하게도, 이런 인기 때문에 해커들과 사이버 범죄자들의 주요 목표가 되기도 합니다. 이 문제를 해결하기

ccusean.tistory.com

 

http -> https 설정

http(80)포트로 접속하는 클라이언트를 https(443)포트로 리다이렉션하는 설정을 합니다.

설정파일은 "/etc/apache2/sites-enabled/000-default.conf"에 있습니다.

sudo vim /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
  ServerName test.com
  ServerAlias *.test.com
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

 

https(ssl 연동) -> express 설정

https(443)로 들어오는 접속을 express(8080)로 연결하는 방법입니다.

기본 도메인 연동방법과 서브도메인연동방법에 대한 예시입니다.

각 도메인의 ssl키연동방법도 함께 기술합니다.

(예시로 도메인명은 test.com으로  하였습니다.)

sudo vim /etc/apache2/sites-enabled/default-ssl.conf

도메인(VirtualHost)설정은 "<IfModule mod_ssl.c>"와 "</IfModule>"사이에 " <VirtualHost *:443>"와 "</VirtualHost>"를 사용해서 설정합니다.

 

기본 도메인 설정 방법

ServerName: test.com

도메인: test.com

<IfModule mod_ssl.c>
  <VirtualHost *:443>
    ServerName test.com
    ServerAlias *.ccusean.com
#   ServerAdmin webmaster@localhost

#   폴더명 마지막 "/"제거 예) "/home/계정/폴더명"
    DocumentRoot "express폴더명"

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine On
    SSLCertificateFile	/etc/letsencrypt/live/test.com/cert.pem
    SSLCertificateKeyFile	/etc/letsencrypt/live/test.com/privkey.pem
    SSLCertificateChainFile	/etc/letsencrypt/live/test.com/chain.pem
#	SSLCACertificatePath	/etc/letsencrypt/live/test.com/
    SSLCACertificateFile	/etc/letsencrypt/live/test.com/fullchain.pem

    ProxyRequests Off
#   url 마지막에 "/" 꼭 추가
    ProxyPass        / http://test.com:8080/
    ProxyPassReverse / http://test.com:8080/
  </VirtualHost>
</IfModule>

※ /etc/hosts 파일에 도메인(test.com, sub.test.com)을 설정하면 DNS서버를 거치지 않아 더 빠르게 처리됩니다.

 

hosts파일 설정

우분투 서버에서 hosts를 설정하는 방법입니다. 모든 OS(Windows, Unix, Linux, MAC)는 hosts라는 파일을 이용해서 DNS를 설정할 수가 있습니다. 보통 도메인으로 어떤 시스템에 접근을 하려고 할 때, 해당

ccusean.tistory.com

"ProxyPass", "ProxyPassReverse"는 express서버에서 domain처리가 필요하지 않은 경우 test.com 대신 localhost로 처리 해도 됩니다.

# express서버에서 도메인 처리가 필요한 경우 (속도를 위해서 /etc/hosts 파일도 같이 설정해 주세요.)
ProxyPass        / http://test.com:8080/
ProxyPassReverse / http://test.com:8080/

# 서버내에서 도메인 처리가 필요하지 않은 경우
ProxyPass        / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

 

서브 도메인 설정 방법

ServerName: sub.test.com

도메인: sub.test.com

<IfModule mod_ssl.c>  
  <VirtualHost *:443>
    ServerName sub.test.com
#   ServerAdmin webmaster@localhost

#   폴더명 마지막 "/"제거 예) "/home/계정/폴더명"
    DocumentRoot "express폴더명"

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine On
    SSLCertificateFile	/etc/letsencrypt/live/test.com/cert.pem
    SSLCertificateKeyFile	/etc/letsencrypt/live/test.com/privkey.pem
    SSLCertificateChainFile	/etc/letsencrypt/live/test.com/chain.pem
#   SSLCACertificatePath	/etc/letsencrypt/live/test.com/
    SSLCACertificateFile	/etc/letsencrypt/live/test.com/fullchain.pem

    ProxyRequests Off
#   url 마지막에 "/" 꼭 추가
    ProxyPass        / http://sub.test.com:8080/
    ProxyPassReverse / http://sub.test.com:8080/
  </VirtualHost>
</IfModule>

 

기본 도메인 + 서브도메인 동시에 설정하는 경우

서버 도메인을 먼저 설정해주고, 기본 도메인을 제일 마지막에 설정해 주어서 서브 도메인 처리를 기본 도메인이 가로채가지 않게 합니다.

<IfModule mod_ssl.c>

###################################################
# 서브 도메인
  <VirtualHost *:443>
    ServerName sub.test.com
#   ServerAdmin webmaster@localhost

#   폴더명 마지막 "/"제거 예) "/home/계정/폴더명"
    DocumentRoot "express폴더명"

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine On
    SSLCertificateFile	/etc/letsencrypt/live/test.com/cert.pem
    SSLCertificateKeyFile	/etc/letsencrypt/live/test.com/privkey.pem
    SSLCertificateChainFile	/etc/letsencrypt/live/test.com/chain.pem
#   SSLCACertificatePath	/etc/letsencrypt/live/test.com/
    SSLCACertificateFile	/etc/letsencrypt/live/test.com/fullchain.pem

    ProxyRequests Off
#   url 마지막에 "/" 꼭 추가
    ProxyPass        / http://sub.test.com:8080/
    ProxyPassReverse / http://sub.test.com:8080/
  </VirtualHost>
  
##################################################
# 기본 도메인
  <VirtualHost *:443>
    ServerName test.com
#   ServerAdmin webmaster@localhost

#   폴더명 마지막 "/"제거 예) "/home/계정/폴더명"
    DocumentRoot "express폴더명"

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine On
    SSLCertificateFile	/etc/letsencrypt/live/test.com/cert.pem
    SSLCertificateKeyFile	/etc/letsencrypt/live/test.com/privkey.pem
    SSLCertificateChainFile	/etc/letsencrypt/live/test.com/chain.pem
#	SSLCACertificatePath	/etc/letsencrypt/live/test.com/
    SSLCACertificateFile	/etc/letsencrypt/live/test.com/fullchain.pem

    ProxyRequests Off
#   url 마지막에 "/" 꼭 추가
    ProxyPass        / http://test.com:8080/
    ProxyPassReverse / http://test.com:8080/
  </VirtualHost>

</IfModule>

 

서비스 재실행

apache 서버를 재실행하여 연동 성공여부를 확인 합니다.

sudo systemctl restart apache2

# 혹은 아래와 같이
sudo systemctl stop apache2
sudo systemctl start apache2

 

반응형

댓글0