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

SSL/TLS 인증서 생성

--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

403 Forbidden

/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>