본 포스트는 www.mydomain.com 이 가상의 웹서비스를 구축한다고 가정하고 웹서버 접속 및 폴더 생성, 권한 부여, SSL 설정, 도메인 가상호스트 및 HTTPS 리디렉션 작업, 웹서버 재시작 및 검증, SSL 적용 확인에 대한 가이드입니다.
목차
1. 웹서버 접속
2. 폴더생성
웹서비스를 할 모든 코드가 들어갈 폴더 생성
- /var/www 이동 : cd /var/www
- domain 폴서 생성 : mkdir domain
※ 폴더 이름은 다르게 정해도 무관함(설명의 편의를 위해 도메인명과 일치시킴.)
3. 권한부여
새로생성한 폴더에 권한을 부여한다.
sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
- sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
- sudo : 관리자 권한 획득
- chmod 2775
2 : Setgid 비트 설정
7 : user에게 읽기 쓰기 실행 권한 부여
7 : group에게 읽기 쓰기 실행 권한 부여
5 : other에게 읽기와 실행 권한 부여
※ Setgid 비트는 디렉토리에서 사용되며, 해당 디렉토리에 새로운 파일이 생성되면 파일을 생성한 소유자가 속한 그룹도 자동으로 파일의 소유자의 권한을 갖게 됨.(주로 여러명이 협업할 때 필요한 기능임.)
※ 각 숫자의 의미
0: 권한 없음 1: 실행 권한 2: 쓰기 권한 3: 쓰기와 실행 권한 4: 읽기 권한 5: 읽기와 실행 권한
6: 읽기와 쓰기 권한 7: 읽기, 쓰기, 실행 권한
- && find /var/www -type d -exec sudo chmod 2775 {} \;
&& : 앞의 명령어가 성공적으로 실행된 후에만 뒤의 명령어를 실행
find /var/www 에서 부터 찾는데, type이 d(폴더)인 것을 모두 찾아서
-exec 이후 명령을 실행하는데,
sudo 관리자권한을 획득하고
chmod 2775 권한을
{} 앞서 find로 찾은 모든 디렉토리를 { } 여기 안에 대입하여 시행하고
\; 종료한다.
- find /var/www -type f -exec sudo chmod 0664 {} \;
find /var/www 에서 부터 찾는데, type이 f(파일)인 것을 모두 찾아서
-exec 이후 명령을 실행하는데,
sudo 관리자권한을 획득하고
chmod 0664 권한을
{} 앞서 find로 찾은 모든 디렉토리를 { } 여기 안에 대입하여 시행하고
\; 종료한다.
4. SSL 설치
- 사전지식
Let's Encrypt는 무료 SSL 인증서를 제공하는 서비스로, 이 인증서는 90일마다 갱신해야 함.
Certbot은 Let's Encrypt은 무료 SSL 인증서를 사용하기 위해 설치하는 프로그램으로 파이썬 환경에서 동작함.
cronie-noanacron은 SSL 인증서를 자동으로 갱신하기 위한 프로그램
- openssl, mod_ssl 설치 : 설치 도중에 질문하면 → y
sudo su
dnf install openssl mod_ssl
- Certbot 설치과정
리눅스의 패키지 관리자인 DNF(Dandified Yum)를 사용하여 `python3`, `augeas-libs`, `pip` 패키지를 설치
sudo dnf install -y python3 augeas-libs pip
파이썬 가상환경 설정 : Python 3의 `venv` 모듈을 사용하여 `/opt/certbot/` 위치에 가상 환경을 생성
sudo python3 -m venv /opt/certbot/
설치 내용 확인
ls /opt/certbot
위 명령어로 다음 파일이 나오면 정상 : bin include lib lib64 pyvenv.cfg
ls /opt/certbot/bin
위 명령어로 다음 파일이 나오면 정상 :
Activate.ps1 activate.csh pip pip3.9 python3
activate activate.fish pip3 python python3.9
pip 업그레이드
sudo /opt/certbot/bin/pip install --upgrade pip
Certbot 설치
sudo /opt/certbot/bin/pip install certbot
Certbot 심볼릭 링크 설정
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
`/opt/certbot/bin/certbot` 파일에 대한 심볼릭 링크를 `/usr/bin/certbot`로 생성하라는 의미로 위 명령어로 어디서든 certbot 명령이 실행이 가능해진다.
- Certbot 실행하여 SSL 인증서 발급
아파치 서버 정지
sudo systemctl stop httpd
도메인(domain.com)에 SSL 인증서 발급
sudo certbot certonly --standalone -d domain.com
※ 콘솔에서 요청이 있으면 아래와 같은 순서로 응답 분홍색 부분을 나의 환경에 맞게 바꿔서 입력한다.
|
도메인(www.domain.com) SSL 인증서 발급
sudo certbot certonly --standalone -d www.domain.com
domain.com 과 www.domain.com SSL 인증서 설정
sudo vi /etc/httpd/conf.d/ssl.conf
(아래 설정에서 도메인 주소 및 DocumentRoot 를 본인의 것으로 바꿔서 입력)
<VirtualHost *:443>
DocumentRoot "/var/www/domain"
ServerAlias domain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/domain.com/chain.pem
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "/var/www/domain"
ServerAlias www.domain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.domain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.domain.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.domain.com/chain.pem
</VirtualHost>
5. 도메인 가상호스트 및 HTTPS 리디렉션 작업
(아래 설정에서 도메인 주소 및 DocumentRoot 바꿔서 입력)
- sudo vi /etc/httpd/conf.d/domain.com.conf 로 파일을 열어서 맨 하단에 아래 내용을 추가한다.
더 좋은 방법은 이후 포스트를 참조하세요( 가상호스트 별도 파일을 관리하는 방법입니다. )
<VirtualHost *:80>
ServerAdmin myemail@gmail.com
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot "/var/www/domain"
ErrorLog domain.com
CustomLog domain.com combined
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>
위 설정은 domain.com 해도 www.domain.com 가고,
www.domain.com 해도 https://www.domain.com 으로 가도록 리다이렉션 작업을 한 것이다.
6. 웹서버 재시작 및 검증
- sudo systemctl restart httpd 으로 웹서버를 재시작
- sudo apachectl configtest 으로 입력한 명령어들의 문법 체크
7. SSL 인증서 자동갱신
크로니-노아나크론 설치( cronie-noanacron )
sudo dnf install cronie-noanacron
SSL인증서 자동갱신 설정
sudo vi /etc/crontab
아래 그림처럼 파일을 열면 제일 하단에 다음 코드를 붙여 넣는다.
30 1 * * 2 root /usr/bin/certbot renew --post-hook “systemctl reload httpd”
※ 이 명령어는 cron 작업 스케줄러를 사용하여 매주 화요일 새벽 1시 30분에 `certbot renew` 명령을 실행하여 SSL/TLS 인증서를 갱신하고, 갱신 후에는 `httpd` 서비스를 재시작하는 작업을 스케줄링하는 것
이렇게 하면 Let's Encrypt은 무료 SSL 인증서의 유효기간인 90일 전에 주기적으로 위 명령어를 실행하여 인증서를 자동갱신하게 된다.
8. SSL 적용 확인
웹서버를 재시작하고 Ctrl + Shift + Del로 "캐시된 이미지 및 파일"에 체크하고 "인터넷 사용 기록 삭제" 클릭하면 즉시 SSL이 적용되어 주소창 앞에 아래와 같은 아이콘을 확인할 수 있음.
웹서버 접속, 폴더 생성, 권한 부여, SSL 설정, 도메인 가상호스트, HTTPS 리디렉션, SSL 적용 확인 등의 단계를 따라 웹서버를 구성하였습니다. 이를 통해 웹사이트의 안전하고 원활한 운영이 가능해졌습니다.
다음 포스트에서는 워드프레스를 서버에 올리고 관리자 페이지(phpMyAdmin) 설정하는 것 까지 가보겠습니다.
'aws' 카테고리의 다른 글
7탄. 1개의 서버(aws)에 여러 개 사이트 운영하기(virtual host) (0) | 2024.01.16 |
---|---|
6탄.AWS 아마존리눅스(amazon linux) 워드프레스(wordpress) 설치 (8) | 2024.01.14 |
4탄. Namecheap에서 도메인 구입: 도메인 등록과 DNS 설정 방법 (2) | 2024.01.13 |
3탄. LAMP 서버 완벽 설치 가이드 - Linux, Apache, PHP, MySQL (2) | 2024.01.06 |
2탄. 2024년 최신 AWS EC2 접속 가이드: Xshell, AWS 콘솔, Termius를 활용한 완벽한 접속 방법 (0) | 2024.01.02 |