서버(리눅스)

apache2 SSL https 활성화하기

미친개발 2023. 2. 3. 20:25
반응형

https://blog.hym2n.site/23

apache2를 이용하여 서브도메인에 포트 연결하기

Ubuntu Server 22.04 기준 예를들어 내 도메인이 example.com인데 굳이 http://example.com:3000/ 이런식으로 안해도 aaa.example.com 으로 연결했을때는 3000포트, bbb.example.com으로 연결했을때는 3001포트로 연결되게 (

blog.hym2n.site

https://blog.hym2n.site/24

SSL 인증서를 발급받아 https 프로토콜을 활성화하자 - Let's Encrypt 와일드카드 인증서

암호화된 안전한 프로토콜 https 우리가 웹 페이지를 열때 보통 http나 https 프로토콜을 사용한다. https는 통신 과정에서 암호화 단계를 거쳐 정보를 주고받지만 http는 그런거 없이 쌩 데이터를 주

blog.hym2n.site


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서버를 거치지 않고 로컬 환경으로 바로 연결해주어 사이트 로딩시 더 빠르게 처리된다.

반응형