이번 포스팅에서는 네이버 클라우드에서 서버를 생성하고 NGINX 설치를 진행해보겠다. CentOS로 NGINX를 설치했을 때에는 수월하게 진행되었는데, ubuntu로 설치할 때에는 오류가 떠서 당황스러웠다. 때문에 ubuntu에 nginx 설치하는 방법에 대해 참고했던 문서를 정리해보겠다.

 

서버 생성

서버 생성은 네이버클라우드 공식문서를 보고 진행하였다.

네이버클라우드 서버 생성 가이드: https://www.ncloud.com/guideCenter/guide/1

서버 : ubuntu-18.04 (bionic)

 

아래와 같이 생성하였다.

네이버는 조금 독특하게 인스턴스가 한 겹 감싸져 있다. 위에서 말하는 포트 포워딩 정보가 뜻하는 바는, 내가 생성한 인스턴스와 네이버에서 제공하는 내 계정의 사설IP+PORT를 몇 번 포트로 연결할 것이냐고 묻는 것이다. 말이 좀 이상한가...ㅎ

 

서버 설정 및 telnet 접속하기

  1. 관리자 비밀번호 확인 (서버 선택 후 우클릭하면 확인 가능함)
  1. 포트 포워딩 설정

    네이버클라우드 외부에서 서버에 접속하기 위한 포트 번호 설정. 포트 범위는 1,024 ~ 65,534이며, 서버 접속을 위한 기능 외에 서비스 용도로는 사용할 수 없다고 안내되어있다. 나는 1024로 설정하였다.

  1. ACG 설정 (22, 80번 포트는 꼭 열어두자)

     

    • 22 (ssh) 포트는 putty, terminus 등을 이용해 SSH 접속 시 사용됨
    • 80 (http) 포트는 기본 웹 포트로 사용됨
  1. 공인IP 발급(Public IP)
  2. 서버 telnet 접속

    포트포워딩 이용 가이드(putty 사용자) : https://docs.ncloud.com/ko/compute/compute-2-2-v2.html#포트포워딩-설정

    putty 이용자는 위 가이드를 참고하고, terminus 이용자는 아래 내용을 참고하자.

    아래와 같이 Host를 추가한다. (네이버클라우드에서 생성한 서버 정보를 확인하면 알 수 있다)

    • Label : 자유
    • Address : 포트포워딩 서버 접속용 IP 입력
    • ssh Port : 포트포워딩 외부포트 입력
    • ssh username : root
    • ssh pw : 관리자 비밀번호

 

NGINX 설치

centOS에 NGINX 설치는 네이버클라우드의 가이드에 잘 정리되어 있다. 그대로 따라해보았는데 정상적으로 설치되었다.

네이버가이드 : https://www.ncloud.com/guideCenter/guide/36

 

ubuntu로 설치할 때에는 NGINX install 단계에서 오류가 발생해서 몇 시간 구글링을 했다. NGINX 공식 가이드 내용을 정리해보겠다. 

NGINX 설치 가이드 : https://www.nginx.com/resources/wiki/start/topics/tutorials/install/

NGINX Linux 설치 가이드 : https://nginx.org/en/linux_packages.html

 

이제 terminus나 putty로 서버에 접속해서 NGINX를 설치해보자.

  1. Install the prerequisite
apt install curl gnupg2 ca-certificates lsb-release

 

2. NGINX 저장소 설정

/etc/apt/sources.list.d/ 위치에 nginx.list 파일을 생성 후 내용을 입력해야한다. 아래 둘 중 하나를 선택하여 명령어를 입력한다. 둘 다 같은 내용이다.

lsb release -cs 는 리눅스 배포판을 확인하는 명령어이다. 내가 사용중인 우분투의 이름으로 치환된다.

echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

 

혹은 아래와 같이 입력해도 된다.

내가 생성한 서버는 ubuntu 18.04이기 때문에 bionic을 명시해주었다.

vi /etc/apt/sources.list.d/nginx.list
deb https://nginx.org/packages/ubuntu/ bionic nginx
deb-src https://nginx.org/packages/ubuntu/ bionic nginx

참고 : ubuntu 18.04 (bionic), ubuntu 16.04 (xenial)

참고 : vi 편집 저장 시 esc(편집모드 종료), :wq! (저장하고 빠져나가기)

 

작성된 파일은 아래 명령어를 통해 확인이 가능하다.

vi /etc/apt/sources.list.d/nginx.list

 

3. NGINX 공개키 추가

curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

 

4. Verify that you now have the proper key

sudo apt-key fingerprint ABF5BD827BD9BF62

결과가 아래와 같이 출력되면 된다.

573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62

pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573B FD6B 3D8F BC64 1079  A6AB ABF5 BD82 7BD9 BF62
uid   [ unknown] nginx signing key <signing-key@nginx.com>

 

5. NGINX 설치

sudo apt update
sudo apt install nginx

 

혹시 설치 중 아래와 같은 에러가 발생할 경우 아래 명령어로 nginx가 정상 설치되었는 지 확인해보자.

nginx -t: nginx 테스트

[결과]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

결과가 정상이라면 서버 재부팅 + NGINX restart를 해보자. 몇 시간 구글링하였으나 키워드 검색이 잘못되었는 지, 나의 증상과 일치하는 글을 찾지 못하였다. 혹시나하여 서버를 재부팅해보았는데 NGINX 테스트 페이지에 접속이 되었다ㅠㅠ 왜 되는건지.. 아직도 원인은 찾지 못하였지만 발견하게 되면 내용을 추가하도록 하겠다.

  • 에러 내용
    이 에러 계속 발생한다.
    root@test-nginx:~# apt install nginx
    
    
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following package was automatically installed and is no longer required:
      libdumbnet1
    Use 'apt autoremove' to remove it.
    The following NEW packages will be installed:
      nginx
    0 upgraded, 1 newly installed, 0 to remove and 110 not upgraded.
    Need to get 857 kB of archives.
    After this operation, 3,015 kB of additional disk space will be used.
    Get:1 http://nginx.org/packages/ubuntu bionic/nginx amd64 nginx amd64 1.18.0-1~bionic [857 kB]
    Fetched 857 kB in 2s (429 kB/s)
    Selecting previously unselected package nginx.
    (Reading database ... 71885 files and directories currently installed.)
    Preparing to unpack .../nginx_1.18.0-1~bionic_amd64.deb ...
    ----------------------------------------------------------------------
    
    Thanks for using nginx!
    
    Please find the official documentation for nginx here:
    * http://nginx.org/en/docs/
    
    Please subscribe to nginx-announce mailing list to get
    the most important news about nginx:
    * http://nginx.org/en/support.html
    
    Commercial subscriptions for nginx are available on:
    * http://nginx.com/products/
    
    ----------------------------------------------------------------------
    Unpacking nginx (1.18.0-1~bionic) ...
    Setting up nginx (1.18.0-1~bionic) ...
    chown: invalid group: ‘nginx:adm’
    dpkg: error processing package nginx (--configure):
     installed nginx package post-installation script subprocess returned error exit status 1
    Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
    Processing triggers for ureadahead (0.100.0-21) ...
    Processing triggers for systemd (237-3ubuntu10.39) ...
    Errors were encountered while processing:
     nginx
    E: Sub-process /usr/bin/dpkg returned an error code (1)

 

6. 확인 및 실행

service nginx -v : 버전 확인

[결과]
nginx version: nginx/1.19.0

 

service nginx status : 엔진엑스 상태보기

service nginx start : 서버 시작

service nginx restart : 재시작

service nginx stop : 서버 중단

 

7. NGINX 설치 확인

웹 브라우저에 공인IP로 접속해서 NGINX 테스트 페이지 확인해보자. Welcom to nginx! 페이지가 뜬다면 NGINX가 정상적으로 설치된 것이다.

nginx 정상 설치 시 접속되는 페이지

 

8. NGINX 포트포워딩

NGINX 환경설정 전에 간단히 포트포워딩을 적용해보겠다. 

vi /etc/nginx/nginx.conf 명령어로 nginx.conf 파일에 접속해보자.

## 파일명 : /etc/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    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;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

각 블럭들이 뜻하는 바는 다음 포스팅에서 다루겠다. 지금은 http 블럭 내에 include /etc/nginx/conf.d/*.conf; 라는 부분을 살펴보자. 해당 위치에 conf 확장자를 가진 파일을 모두 include 한다는 뜻이다.

해당 위치로 이동해서 어떤 파일이 있는 지 살펴보자.

cd /etc/nginx/conf.d

nginx.conf 파일은 default.conf 파일을 include하고 있음을 알 수 있다. 파일을 열어 포트포워딩을 설정해본다.

vi default.conf

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://localhost:8080;
    }
}

 

서버 공인 IP에 웹 브라우저(80번 포트)를 사용하여 접속 시, 내부 8080 포트로 포트포워딩하라는 내용이다. (위와 같이 수정하고, 나머지 부분은 주석처리해두었다)

아직 도메인을 발급하지 않아 localhost를 사용했으며, 도메인 발급 후에는 도메인마다 server 블럭을 가진 파일을 만들어 관리할 것이다.

다음 포스팅에서는 NGINX 환경설정과 도메인별 NGINX 로그 관리에 대해 알아보겠다.