Ubuntu 20.04에 Nginx 설치하는 방법

소개

Nginx는 전 세계에서 가장 인기 있는 웹 서버 중 하나로, 인터넷에서 가장 크고 많은 트래픽을 처리하는 사이트 중 일부를 호스팅하고 있습니다. 이것은 가벼운 선택으로 웹 서버 또는 리버스 프록시로 사용할 수 있습니다.

이 안내서에서는 Ubuntu 20.04 서버에 Nginx를 설치하는 방법, 방화벽을 조정하는 방법, Nginx 프로세스를 관리하는 방법, 그리고 단일 서버에서 두 개 이상의 도메인을 호스팅하기 위해 서버 블록을 설정하는 방법에 대해 논의하겠습니다.

DigitalOcean 앱 플랫폼을 사용하여 응용 프로그램을 간단하게 배포하세요. 몇 분 만에 GitHub에서 직접 배포하세요.

전제 조건

이 안내서를 시작하기 전에 서버에 구성된 일반적이고 루트 권한이 없는 사용자가 있어야 합니다. Ubuntu 20.04용 초기 서버 설정 안내서를 따라 일반 사용자 계정을 구성하는 방법을 알아볼 수 있습니다.

이 자습서의 마지막 단계를 완료하기 전에 도메인 이름을 등록해 두는 것이 좋습니다. DigitalOcean에서 도메인 이름을 설정하는 방법에 대해 자세히 알아보려면 디지털오션 DNS 소개를 참조하십시오.

계정이 준비되면 비루트 사용자로 로그인하여 시작하십시오.

단계 1 – Nginx 설치

우분투의 기본 저장소에 Nginx가 포함되어 있으므로 apt 패키지 시스템을 사용하여 이 저장소에서 설치할 수 있습니다.

이 세션에서 apt 패키지 시스템과 처음 상호 작용하기 때문에 로컬 패키지 인덱스를 업데이트하여 가장 최신의 패키지 목록에 액세스할 수 있도록 합니다. 그런 다음 nginx를 설치할 수 있습니다:

  1. sudo apt update
  2. sudo apt install nginx

절차를 수락한 후 apt는 Nginx와 서버에 필요한 종속성을 설치합니다.

단계 2 – 방화벽 조정

Nginx를 테스트하기 전에 방화벽 소프트웨어를 조정하여 서비스에 액세스할 수 있도록 설정해야 합니다. Nginx는 설치 시 ufw에 자체 서비스로 등록되므로 Nginx 액세스를 허용하기 쉽습니다.

ufw가 작업할 수 있는 응용 프로그램 구성을 나열하려면 다음을 입력하세요:

  1. sudo ufw app list

응용 프로그램 프로필 목록을 받아야 합니다:

Output
Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

출력에 표시된대로 Nginx에 대해 세 가지 프로필이 있습니다:

  • Nginx Full: 이 프로필은 포트 80(일반, 암호화되지 않은 웹 트래픽)과 포트 443(TLS/SSL 암호화된 트래픽)를 엽니다.
  • Nginx HTTP: 이 프로필은 포트 80(일반, 암호화되지 않은 웹 트래픽)만 엽니다.
  • Nginx HTTPS: 이 프로필은 포트 443(TLS/SSL 암호화된 트래픽)만 엽니다.

구성한 트래픽을 허용하는 가장 제한적인 프로필을 활성화하는 것이 좋습니다. 지금은 포트 80에서만 트래픽을 허용해야 합니다.

다음을 입력하여 이를 활성화할 수 있습니다:

  1. sudo ufw allow 'Nginx HTTP'

변경 사항을 확인하려면 다음을 입력하세요:

  1. sudo ufw status

출력에서 허용된 HTTP 트래픽을 확인할 수 있습니다:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

단계 3 – 웹 서버 확인

Ubuntu 20.04 설치 프로세스의 끝에 Nginx가 시작됩니다. 웹 서버는 이미 가동 중이어야 합니다.

우리는 systemd 이닛 시스템을 사용하여 서비스가 실행 중인지 확인할 수 있습니다. 다음을 입력하여 확인할 수 있습니다:

  1. systemctl status nginx
Output
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago Docs: man:nginx(8) Main PID: 2369 (nginx) Tasks: 2 (limit: 1153) Memory: 3.5M CGroup: /system.slice/nginx.service ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2380 nginx: worker process

이 출력으로 확인되었듯이, 서비스가 성공적으로 시작되었습니다. 그러나 이를 테스트하는 가장 좋은 방법은 실제로 Nginx에서 페이지를 요청하는 것입니다.

소프트웨어가 올바르게 실행되고 있는지 확인하려면 서버의 IP 주소로 이동하여 기본 Nginx 랜딩 페이지에 액세스할 수 있습니다. 서버의 IP 주소를 모르는 경우 인터넷의 다른 위치에서 받은 공용 IP 주소를 제공하는 icanhazip.com 도구를 사용하여 찾을 수 있습니다:

  1. curl -4 icanhazip.com

서버의 IP 주소를 알고 있으면 브라우저의 주소 표시줄에 입력하십시오:

http://your_server_ip

기본 Nginx 랜딩 페이지를 수신해야합니다:

이 페이지에 있으면 서버가 올바르게 실행되고 관리 준비가 된 것입니다.

단계 4 – Nginx 프로세스 관리

이제 웹 서버를 실행하고 있으므로 몇 가지 기본 관리 명령을 검토해 보겠습니다.

웹 서버를 중지하려면 다음을 입력하십시오:

  1. sudo systemctl stop nginx

중지된 웹 서버를 시작하려면 다음을 입력하십시오:

  1. sudo systemctl start nginx

서비스를 중지한 다음 다시 시작하려면 다음을 입력하십시오:

  1. sudo systemctl restart nginx

구성 변경만 하는 경우 Nginx는 종종 연결을 끊지 않고 다시로드될 수 있습니다. 이를 위해 다음을 입력하십시오:

  1. sudo systemctl reload nginx

기본적으로 Nginx는 서버 부팅 시 자동으로 시작하도록 구성됩니다. 이를 원하지 않는 경우 다음을 입력하여이 동작을 비활성화 할 수 있습니다:

  1. sudo systemctl disable nginx

부팅시 서비스를 다시 시작하도록 설정하려면 다음을 입력할 수 있습니다:

  1. sudo systemctl enable nginx

이제 기본 관리 명령을 배웠으므로 사이트를 하나 이상의 도메인으로 호스팅하도록 구성할 준비가되었습니다.

Nginx 웹 서버를 사용할 때 서버 블록 (Apache의 가상 호스트와 유사)을 사용하여 구성 세부 정보를 캡슐화하고 단일 서버에서 둘 이상의 도메인을 호스팅 할 수 있습니다. your_domain이라는 도메인을 설정할 것입니다. 그러나 이것을 자체 도메인 이름으로 교체해야합니다.

Ubuntu 20.04의 Nginx에는 기본적으로 하나의 서버 블록이 활성화되어 있으며 /var/www/html 디렉토리에서 문서를 제공하도록 구성됩니다. 단일 사이트에 대해 잘 작동하지만 여러 사이트를 호스팅하는 경우 복잡해질 수 있습니다. /var/www/html을 수정하는 대신 /var/www 내에서 your_domain 사이트에 대한 디렉토리 구조를 만들어보겠습니다. 클라이언트 요청이 다른 사이트와 일치하지 않을 경우 기본 디렉토리로 제공될 /var/www/html을 그대로 두겠습니다.

your_domain 디렉토리를 만들려면 다음과 같이 입력하십시오. 필요한 경우 부모 디렉토리를 만들기 위해 -p 플래그를 사용하십시오:

  1. sudo mkdir -p /var/www/your_domain/html

다음으로, 디렉토리의 소유권을 $USER 환경 변수에 할당하십시오:

  1. sudo chown -R $USER:$USER /var/www/your_domain/html

웹 루트의 권한은 umask 값을 수정하지 않았다면 올바를 것입니다. 이 값은 기본 파일 권한을 설정합니다. 소유자가 파일을 읽고 쓰고 실행할 수 있도록 하고, 그룹 및 다른 사용자에게는 읽기 및 실행 권한만 부여하려면 다음 명령을 입력할 수 있습니다:

  1. sudo chmod -R 755 /var/www/your_domain

다음으로, nano이나 선호하는 편집기를 사용하여 샘플 index.html 페이지를 만드십시오:

  1. sudo nano /var/www/your_domain/html/index.html

내부에 다음과 같은 샘플 HTML을 추가하십시오:

/var/www/your_domain/html/index.html
<html>
    <head>
        <title>Welcome to your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain server block is working!</h1>
    </body>
</html>

파일을 저장하고 닫으려면 Ctrl+X를 눌러 종료한 다음, 저장하라는 메시지가 나오면 Y를 누르고 Enter를 누르십시오.

Nginx가 이 콘텐츠를 제공하려면 올바른 지시문이 포함된 서버 블록을 만들어야 합니다. 기본 구성 파일을 직접 수정하는 대신에, 새로운 파일을 /etc/nginx/sites-available/your_domain에 만들어 보겠습니다:

  1. sudo nano /etc/nginx/sites-available/your_domain

다음 구성 블록을 붙여넣으십시오. 이는 기본 구성과 유사하지만 새 디렉토리와 도메인 이름에 맞게 업데이트되었습니다:

/etc/nginx/sites-available/your_domain
server {
        listen 80;
        listen [::]:80;

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

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

root 구성이 새 디렉토리로 업데이트되고, server_name이 도메인 이름으로 업데이트된 것에 유의하십시오.

다음으로, 이 파일을 sites-enabled 디렉토리에 링크하여 활성화하십시오. 이 디렉토리는 Nginx가 시작될 때 읽는 디렉토리입니다:

  1. sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

참고: Nginx는 서버 블록이 활성화되었는지 추적하기 위해 심볼릭 링크 또는 심링크라는 일반적인 관행을 사용합니다. 심링크를 만들면 디스크에 바로 가기를 만드는 것과 같으므로 나중에 원한다면 sites-enabled 디렉토리에서 바로 가기를 삭제할 수 있지만 sites-available에 있는 서버 블록을 유지할 수 있습니다.

지금 두 개의 서버 블록이 활성화되어 있으며 그들의 listenserver_name 지시문에 기반하여 요청에 응답하도록 구성되어 있습니다 (Nginx가 이러한 지시문을 처리하는 방법에 대해 더 읽을 수 있습니다. 여기):

  • your_domain: your_domainwww.your_domain에 대한 요청에 응답합니다.
  • default: 다른 두 블록과 일치하지 않는 경우 포트 80의 모든 요청에 응답합니다.

추가적인 서버 이름을 추가함으로써 발생할 수 있는 해시 버킷 메모리 문제를 피하려면 /etc/nginx/nginx.conf 파일에서 하나의 값을 조정해야 합니다. 파일을 엽니다:

  1. sudo nano /etc/nginx/nginx.conf

server_names_hash_bucket_size 지시문을 찾아서 라인의 주석을 제거하려면 # 기호를 제거하십시오. nano를 사용하는 경우 파일에서 단어를 빠르게 찾으려면 CTRLw를 누르십시오.

참고: 코드 줄을 주석 처리하는 것은 실제로 삭제하지 않고도 그들을 비활성화하는 또 다른 방법입니다. 많은 구성 파일에는 활성 코드와 설명서 사이를 전환하여 활성화 또는 비활성화할 수 있는 여러 옵션이 주석 처리되어 있습니다.

/etc/nginx/nginx.conf
...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

작업을 마치면 파일을 저장하고 닫으세요.

다음으로 Nginx 파일 중 어떤 것에도 구문 오류가 없는지 확인해보세요:

  1. sudo nginx -t

문제가 없다면 변경 사항을 활성화하기 위해 Nginx를 다시 시작하세요:

  1. sudo systemctl restart nginx

Nginx는 이제 도메인 이름을 제공해야 합니다. 이를 확인하기 위해 http://your_domain으로 이동하여 이와 유사한 내용을 확인할 수 있어야 합니다:

단계 6 – 중요한 Nginx 파일 및 디렉터리에 익숙해지기

이제 Nginx 서비스 자체를 관리하는 방법을 알았으니 몇 분 동안 몇 가지 중요한 디렉터리와 파일에 익숙해질 필요가 있습니다.

내용

  • /var/www/html: 실제 웹 콘텐츠는 기본적으로 /var/www/html 디렉토리에서 제공됩니다. 이는 Nginx 구성 파일을 변경하여 변경할 수 있습니다.

서버 구성

  • /etc/nginx: Nginx 구성 디렉토리입니다. 모든 Nginx 구성 파일은 여기에 위치합니다.
  • /etc/nginx/nginx.conf: 주요 Nginx 구성 파일입니다. 이를 수정하여 Nginx 전역 구성을 변경할 수 있습니다.
  • /etc/nginx/sites-available/: 사이트별 서버 블록을 저장할 수 있는 디렉토리입니다. Nginx는 이 디렉토리에 있는 구성 파일을 sites-enabled 디렉토리에 연결하지 않는 한 사용하지 않습니다. 일반적으로 모든 서버 블록 구성은 이 디렉토리에서 수행한 다음 다른 디렉토리로 링크하여 활성화됩니다.
  • /etc/nginx/sites-enabled/: 활성화된 사이트별 서버 블록이 저장된 디렉토리입니다. 일반적으로 이 디렉토리에 있는 구성 파일로 링크하여 생성됩니다.
  • /etc/nginx/snippets: 이 디렉토리에는 Nginx 구성에 다른 곳에서 포함할 수 있는 구성 조각이 포함되어 있습니다. 반복 가능한 구성 세그먼트는 구성을 재구성하기에 좋은 후보입니다.

서버 로그

  • /var/log/nginx/access.log: Nginx가 설정되어 있지 않은 한, 웹 서버로의 모든 요청이 이 로그 파일에 기록됩니다.
  • /var/log/nginx/error.log: Nginx의 모든 오류가 이 로그에 기록됩니다.

결론

웹 서버를 설치했으므로, 제공할 콘텐츠 유형 및 사용할 기술을 선택할 수 있습니다.

더 완전한 응용 프로그램 스택을 구축하려면, Ubuntu 20.04에 Linux, Nginx, MySQL, PHP(LEMP 스택) 설치 방법을 확인하세요.

도메인 이름에 무료 SSL 인증서를 사용하여 HTTPS를 설정하려면, Let’s Encrypt를 사용하여 Ubuntu 20.04에 Let’s Encrypt로 Nginx 보안 설정하는 방법을 참조하십시오.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04