RHEL 명령어 실습과정에서 curl -OL ~~~.tar.gz를 통해 nginx 압축파일 다운로드
| 1 | 압축 파일 다운로드 | curl -OL https://nginx.org/download/nginx-1.x.x.tar.gz | |
|---|---|---|---|
| 2 | 압축해제 | tar -zxvf https://nginx.org/download/nginx-1.x.x.tar.gz | |
| 3 | 구성 | ./configure --prefix=/usr/local/nginx | prefix가 없을경우 디폴트 /usr/lcoal/nginx |
| 4 | 컴파일 | make | |
| 5 | 설치 | sudo make install |
<aside> ⚠️
위 과정을 통해 설치했을때, --with-http_ssl_module(SSL/TLS모듈)이 없어, HTTPS 전환이 불가능했다.
curl을 사용하여 설치한 경우 추가 기능을 사용할 수 없는 경우가 있어, 매우 특수한 케이스가 아닌경우에는 sudo dnf install nginx를 하는편이 안전하다.
</aside>
Route 53에서 A레코드를 생성하였다. (security.jmh-labs.com → EC2 공용IP)
| 레코드 이름 (name) | 유형 (Type) | 라우팅 대상 | TTL |
|---|---|---|---|
| security.jmh-labs.com | A | 13.209.88.143 | 300 |
| www.jmh-labs.com | A | 13.209.88.143 | 300 |
| jmh-labs.com | A | 13.209.88.143 | 300 |
--with-http_ssl_module이 설치되어있지 않아서 sudo dnf install nginx로 재설치하고, logrotate, sh의 경로를 다시 지정하였다. (기존 경로 /usr/local/nginx → 바뀐 경로 /usr/sbin/nginx/, 로그 및 PID기록 위치 변경)
sudo dnf install <https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm>
# RHEL의 기본 저장소(BaseOS, AppStream)에는 certbot 패키지가 포함되어있음
# Certbot은 EPEL (Extra Packages for Enterprise Linux)이라는 별도의 확장 저장소에서 제공
# 따라서 위와 같이 EPEL 저장소를 먼저 활성화해야만 패키지 설치 가능
sudo dnf install certbot python-certbot-nginx
sudo certbot --nginx -security.jmh-labs.com
# 이 경우 앞에 name이 있었지만, 루트(jmh-labs.com)의 경우는 -d www.your_domain.com 추가
# www를 추가 지정하지 않으면 인증서는 존재하지만 주의를 요하는 사이트로 판정된다.
# 따라서, 도메인 등록기관에 www 이름을 가지는 A 레코드로 EC2를 지정해줘야 발급이 가능하다.
[ec2-user@ip-172-31-40-233 www]$ sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: jmh-labs.com
Serial Number: 64022407a40a854f430d47d19bda24bfb43
Key Type: ECDSA
Domains: jmh-labs.com www.jmh-labs.com
Expiry Date: 2026-04-08 06:07:27+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/jmh-labs.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/jmh-labs.com/privkey.pem
Certificate Name: security.jmh-labs.com
Serial Number: 6316be76ded2b4273201ef6f2caf8f83777
Key Type: ECDSA
Domains: security.jmh-labs.com
Expiry Date: 2026-04-07 07:01:40+00:00 (VALID: 88 days)
Certificate Path: /etc/letsencrypt/live/security.jmh-labs.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/security.jmh-labs.com/privkey.pem
/var/www/quiz-web, /var/www/main-web에 대하여, chown nginx:nginx -R을 했음에도 nginx가 읽지 못하여 403 오류가 발생하였다.
<aside> ⚠️
RHEL 계열 리눅스는 SELinux(Security-Enhanced Linux)가 활성화되어 enforcing 모드로 실행되며, SELinux 정책은 Nginx가 특정 디렉터리의 외부 파일에 접근하는 것을 차단한다.
/home/ec2-user/에 업로드한 뒤 mv로 옮겼기 때문에, 보안라벨이 일치하지 않아 발생했다.
</aside>