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