apache2 셋팅을 완료하고 SSL 인증서를 발급받았다면(위 글 참고)
이제 apache2에 SSL인증서를 적용하고 https 프로토콜을 활성화하는 일만 남았다.
(Ubuntu Server 22.04 기준)
1. apache2 SSL 관련 모드 활성화
우선 apache2에서 SSL 인증 관련 모드와 리다이렉션 관련 모드를 활성화한다.
$ sudo a2enmod rewrite
$ sudo a2enmod ssl
$ sudo a2enmod proxy_html
$ sudo a2ensite default-ssl.conf
--------(이 아래는 이전글에서 했다면 안해도 된다)-------
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
2. http 접속 시 https 리다이렉트 설정
http로 접속할 시 자동으로 https로 리다이렉션하도록 /etc/apache2/sites-enabled/000-default.conf 파일을 아래와 같이 수정해준다.
$ sudo vi /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
3. 기본 도메인 https 설정
이 글에서는 서버 도메인을 example.com이라 가정하고 node js 서버를 3000포트에서 열고있다고 가정한다.
또한 SSL 인증서는 /etc/letsencrypt/live/example.com/ 폴더에 위치해있다.
/etc/apache2/sites-enabled/default-ssl.conf 파일을 아래와 같이 수정한다.
$ sudo vi /etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
ProxyRequests Off
ProxyPass / http://example.com:3000/
ProxyPassReverse / http://example.com:3000/
</VirtualHost>
</IfModule>
여기서 주의해야 할 점은 ProxyPass와 ProxyPassReverse 주소를 쓸 때 마지막에 꼭 / 를 붙여줘야 한다는 것이다.
4. 서브도메인 https 설정
서브도메인을 운영하고 있다면 site-available 폴더에 있는 서브도메인 conf 파일도 수정해주어야 한다.
이 글에서는 example.com 아래에 aaa.example.com을 3001포트로 연결해주고자 한다고 가정한다.
$ sudo vi /etc/apache2/sites-available/aaa.example.com.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName aaa.example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
ProxyRequests Off
ProxyPass / http://example.com:3001/
ProxyPassReverse / http://example.com:3001/
</VirtualHost>
</IfModule>
여기서도 마찬가지로 ProxyPass와 ProxyPassReverse 주소를 쓸 때 마지막에 꼭 / 를 붙여줘야 한다.
5. apache2 서비스 재시작
$ sudo systemctl apache2 restart
위와 같이 입력하여 apache2를 재시작하면 https 적용 완료다.
$ sudo systemctl status apache2.service
해당 명령어로 apache2가 잘 작동중인지 확인하고
웹을 접속하여 http가 https로 잘 리다이렉트되는지,
SSL 인증서가 제대로 뜨는지 확인하면 된다.
물론 https는 http와는 다르게 80포트가 아닌 443포트를 쓰기 때문에 443포트도 열려있어야 한다.
포트포워딩은 구글에 자료 많으니 알아서 잘 하시겟지머
6. 추가로 해주면 좋은 host 설정
$ sudo vi /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu
127.0.0.1 example.com (이 부분을 새로 추가)
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
이렇게 /etc/hosts 파일에 example.com을 추가하면 굳이 DNS서버를 거치지 않고 로컬 환경으로 바로 연결해주어 사이트 로딩시 더 빠르게 처리된다.
'서버(리눅스)' 카테고리의 다른 글
SSL 인증서를 발급받아 https 프로토콜을 활성화하자 - Let's Encrypt 와일드카드 인증서 (0) | 2023.02.03 |
---|---|
apache2를 이용하여 서브도메인에 포트 연결하기(node.js 연동) (0) | 2023.02.01 |
새 서버 장만기(우분투 서버 22.04/Dell Optiplex 3070 Micro) (1) | 2023.02.01 |