EC2 인스턴스 생성

먼저 간단하게 EC2 인스턴스를 생성해주고 아래와 같이 nginx를 설치한다

sudo su
yum install nginx
vim /etc/nginx/nginx.conf

이후 nginx.conf에 접근하여 아래와 같이 nginx conf를 수정한다

...
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

이후 html파일이 저장되는 /usr/share/nginx/html 해당 경로에 index.html을 아래와 같이 생성하여 간단한 웹서버를 배포한다

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Welcome Page</title>
    <style>
        body {
            background-color: #1e1e1e;
            color: #ffffff;
            font-family: 'Arial', sans-serif;
            text-align: center;
            margin: 20% auto;
        }

        h1 {
            font-size: 2em;
        }

        p {
            font-size: 1.2em;
        }
    </style>
</head>
<body>
    <h1>Welcome to Nginx Website in AWS EC2</h1>
    <p>This page is exposed by AWS ELB</p>
</body>
</html>

이후 테스트를 위해 해당 인스턴스 보안 그룹의 인바운드 규칙을 편집하고
아래와 같이 브라우저에서 EC2 퍼블릭 IPv4 주소로 접속이 가능한 것을 확인하였다


ALB 생성

docs.aws.amazon.com
위 공식 문서를 참고하여 ALB를 생성하였다

대상 그룹 생성

공식문서를 바탕으로 ec2의 대상 그룹을 생성하고 이후 HTTP:80 포트로의 규칙을 추가하고 대상을 방금 만든 인스턴스로 등록하였다

ALB 생성

ALB를 생성할 때 리스너를 80번 포트로 대상 그룹으로 추가하였으나
여전히 대상 그룹의 인스턴스 상태가 unused임을 확인하였다
서브넷을 확인하여 ec2 인스턴스의 서브넷과 ALB의 서브넷을 동일하게 조정하여

대상 인스턴스가 healthy하고 ALB 또한 활성화 되어 있는 것을 확인했다


Trouble Shooting

하지만 브라우저로 ALB의 DNS에 접속했을 때 접속을 할 수 없었다

EC2 NACL 설정 확인

혹여나 발생할 수 있는 NACL 문제를 방지하기 위해 HTTP:80을 허용하였다

Nginx access.log 확인

nginx의 문제와 개방 IP로 접근되는 것을 확인하기 위해
아래 명령어를 통해 access log를 확인하였다

tail -f /var/log/nginx/access.log

아래와 같이 ELB의 Health Checker와 개방 IP에서의 접근을 확인할 수 있었다

[17/Nov/2023:05:36:38 +0000] "GET / HTTP/1.1" 200 628 "-" "ELB-HealthChecker/2.0" "-"
[17/Nov/2023:05:36:49 +0000] "GET / HTTP/1.1" 200 628 "-" "ELB-HealthChecker/2.0" "-"
[17/Nov/2023:05:37:08 +0000] "GET / HTTP/1.1" 200 628 "-" "ELB-HealthChecker/2.0" "-"
[17/Nov/2023:05:37:19 +0000] "GET / HTTP/1.1" 200 628 "-" "ELB-HealthChecker/2.0" "-"
[17/Nov/2023:05:39:40 +0000] "GET / HTTP/1.1" 304 0 "http://.../" "Mozilla/5.0

ALB 보안 그룹 확인

HTTP:80포트가 보안 그룹에서 허용이 되어있지 않을 경우를 대비하여
아래와 같이 ALB의 보안 그룹을 확인한 결과 default 보안 그룹으로 설정되어보안 그룹에 HTTP:80 0.0.0.0/0 인바운드 규칙을 추가하여 문제를 해결하였다

0개의 댓글

Powered by GraphCDN, the GraphQL CDN