[Nginx] Nginx에서 가상서버 환경 설정하기

Nginx에서 sites-available 폴더에 .conf 파일을 추가해서 가상서버를 만들어보자.


환경 및 선수조건

  • Nginx(nginx/1.10.0 (Ubuntu))
  • Nginx의 기본 사용법 및 서버 블록에 대한 이해


Nginx의 기본 파일과 폴더들

Ubuntu에서 apt-get을 통해 nginx 설치하기 및 간단한 정리에서 간단하게 정리를 해두긴 했지만 설정을 하기에 앞서서 간단하게 몇가지 기본 폴더들과 파일들을 보고 가겠습니다.

  • sites-available: 가상 서버 환경들에 대한 설정 파일들이 위치하는 부분입니다. 가상 서버를 사용하거나 사용하지 않던간에 그에 대한 설정 파일들이 위치하는 곳입니다.
  • sites-enabled: sites-available에 있는 가상 서버 파일들중에서 실행시키고 싶은 파일을 symlink로 연결한 폴더입니다. 실제로 이 폴더에 위치한 가상서버 환경 파일들을 읽어서 서버를 세팅합니다.
  • nginx.conf: Nginx에 관한 설정파일로 Nginx 설정에 관한 블록들이 작성되어 있으며 이 파일에서 sites-enabled 폴더에 있는 파일들을 가져옵니다.


nginx 가성서버 파일 생성

위에서 말씀드린대로 sites-available에 가상 서버 환경 파일을 작성하시면 됩니다.

가상 서버 환경 파일을 만들고 vim으로 열어줍니다.

$ cd /etc/nginx/sites-available
$ sudo touch [virtual_server_conf_file_name]
$ sudo vim [virtual_server_conf_file_name]


Nginx 가상서버 파일 작성

열어둔 설정 파일에 아래처럼 기본적인 블록들을 작성합니다.

[domain name], [upstream name] 그리고 [web root directory path]는 원하는 서버 환경에 따라서 넣어주시면 됩니다.

간단하게 server block만 추가하면 아래와 같습니다.

virtual_server_conf_file_name(no SSL)

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;

        server_name [domain name];

        location / {
            try_files $uri $uri/ =404;
        }
}


아래는 SSL을 적용한 저희 서비스의 모습입니다.

virtual_server_conf_file_name(SSL)

upstream [upstream name] {
    server unix://[unix socket file path];
}

server {
    listen 443 ssl;

    root [web root directory path];
    index index.html index.htm;

    server_name [domain name];

    # SSL Setting below
    ...
    # SSL Setting above

    location / {
        try_files $uri $uri/ =404;
    }

    location /api {
        ...
    }

    # SSL Setting (Let's Encrypt)
    location ~ /.well-known {
            allow all;
    }
}

server {
    listen 80;
    listen [::]:80;

    server_name [domain name]];
    return 301 https://$host$request_uri;
}


이제 sites-available에 있는 파일들에 대해서 sites-enabled에 symlink를 추가합시다.

$ cd /etc/nginx/sites-enabled
$ sudo ln -s /etc/nginx/sites-available/[config file name] /etc/nginx/sites-enabled/
$ sudo ln -s /etc/nginx/sites-available/[config file name] /etc/nginx/sites-enabled/


Nginx 재시작하기

이제 Nginx에 문법이 제대로 되어있는지 확인하고 재시작을 합니다.

제대로 재시작이 완료가 되면 OK라고 나와야 합니다.

$ sudo nginx -t

// 재시작은 아래에 있는 명령어 중 하나로 실행하시면 됩니다.
$ sudo service nginx restart
$ sudo systemctl restart nginx
$ sudo /etc/init.d/nginx restart