본문 바로가기
공부/프로그래밍

[nginx] aws에 nginx설치 및 멀티도메인 설정(reverse-proxy)

by demonic_ 2021. 1. 6.
반응형

AWS에 설치하기 전에 yum 버전을 최신으로 업데이트 해준다

sudo yum update -y

nginx 를 설치하려고 하면 다음과 같은 메세지가 나온다.

Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                              | 3.7 kB  00:00:00     
No package nginx available.
Error: Nothing to do


nginx is available in Amazon Linux Extra topic "nginx1"

To use, run
# sudo amazon-linux-extras install nginx1

Learn more at
https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras

설명대로 amazon-linux-extras 를 우선 설치한다.

sudo amazon-linux-extras install nginx1

설치가 완료되면 다음 명령어로 nginx 를 설치한다.

sudo yum install nginx

nginx 를 구동한다

sudo systemctl start nginx

 

 

# 멀티도메인 설정

기본설정에 있는 server를 주석처리하고, 특정폴더에 도메인 이름의 파일을 생성하고 upstream으로 연결한다. 우선 설정파일이 있는 곳으로 이동한다.

cd /etc/nginx/

추후 멀티도메인 관련 설정은 site-enable 폴더 안에 넣으려 한다. 폴더를 생성한다.

sudo mkdir site-enable/

 

 

기본 설정파일인 site-enable 을 수정한다.

파일을 다음과 같이 수정한다.

 

sudo vi 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;
    tcp_nodelay         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 = /40x.html {
        }

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

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2;
#        listen       [::]:443 ssl http2;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

수정 후

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;
    tcp_nodelay         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;
    include site-enable/*;
}

사이트 설정을 위해 site-enable 폴더 내 파일을 만든다

mkdir /etc/nginx/site-enable
cd /etc/nginx/site-enable

도메인 이름을 같게하는게 추후 유지보수 하는데 편하다

sudo vim [도메인명]

 

파일 내 수정.

SSL은 우선 주석해두었다.

    upstream [도메인명] {
        least_conn;

        # 실제 IP 서버
        server [서버IP]:[포트번호];
    }


    server {
        # nginx 서버가 8080 을 감지하도록 설정
        listen          80;
        server_name     [도메인명];

        # 8080 포트로 들어오는 모든 요청을 '[도메인명]' 로 보냄
        location / {
            proxy_pass http://[도메인명];
        }

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

        location ~* \.(jpg|jpeg|gif|png)$ {
            root   /ediya/files;
        }
    }

#    server {
#      listen 443 ssl;
#      server_name     [도메인명];
#
#      ssl_certificate /etc/nginx/https/www.spinormedia.com_cert.crt;
#      ssl_certificate_key /etc/nginx/https/www.spinormedia.com_key.key;
#
#      location / {
#        proxy_pass http://[도메인명];
#      }
#    }

이제 nginx를 재시작한다

sudo systemctl restart nginx

 

 

# ssl 인증 적용

ssl 관련 인증키는 /etc/nginx/https 라는 폴더내에 넣기로 했다.

우선 폴더를 생성한다.

cd /etc/nginx

sudo mkdir https

 

인증서 파일을 /etc/nginx/https 안에 넣는다.

그리고 site-enable 파일 내 ssl 관련 설정 주석을 푼다

    server {
      listen 443 ssl;
      server_name     [도메인명];

      ssl_certificate /etc/nginx/https/[cert 파일명];
      ssl_certificate_key /etc/nginx/https/[key 파일명];

      location / {
        proxy_pass http://[도메인명];
      }
    }

 

참고로 cert 파일은 파일내 다음 문구가 포함되어 있다.

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

그리고 key 파일은 다음 문구가 포함되어 있다.

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

 

서버를 다시 재시작 한다

sudo systemctl restart nginx

 

 

이제 도메인 관리 사이트에 들어가서 도메인을 연결해본다.

https 로 접속되면 성공.

 

 

끝.

 

반응형

댓글