웹사이트 검색

Ubuntu 20.04에 Nginx를 설치하는 방법


소개

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

이 가이드에서는 Ubuntu 20.04 서버에 Nginx를 설치하고, 방화벽을 조정하고, Nginx 프로세스를 관리하고, 단일 서버에서 둘 이상의 도메인을 호스팅하기 위한 서버 블록을 설정하는 방법에 대해 설명합니다.

전제 조건

이 가이드를 시작하기 전에 서버에 sudo 권한이 구성된 루트가 아닌 일반 사용자가 있어야 합니다. Ubuntu 20.04용 초기 서버 설정 가이드에 따라 일반 사용자 계정을 구성하는 방법을 배울 수 있습니다.

선택적으로 이 자습서의 마지막 단계를 완료하기 전에 도메인 이름을 등록할 수도 있습니다. DigitalOcean으로 도메인 이름을 설정하는 방법에 대해 자세히 알아보려면 DigitalOcean DNS 소개를 참조하십시오.

사용 가능한 계정이 있으면 루트가 아닌 사용자로 로그인하여 시작하십시오.

1단계 – Nginx 설치

Nginx는 Ubuntu의 기본 리포지토리에서 사용할 수 있으므로 apt 패키징 시스템을 사용하여 이러한 리포지토리에서 Nginx를 설치할 수 있습니다.

이 세션에서 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 init 시스템으로 다음을 입력하여 서비스가 실행 중인지 확인할 수 있습니다.

  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에서 페이지를 요청하는 것입니다.

기본 Nginx 랜딩 페이지에 액세스하여 서버의 IP 주소로 이동하여 소프트웨어가 제대로 실행되고 있는지 확인할 수 있습니다. 서버의 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

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

5단계 – 서버 블록 설정(권장)

Nginx 웹 서버를 사용하는 경우 서버 블록(Apache의 가상 호스트와 유사)을 사용하여 구성 세부 정보를 캡슐화하고 단일 서버에서 둘 이상의 도메인을 호스팅할 수 있습니다. your_domain이라는 도메인을 설정하지만 이를 자신의 도메인 이름으로 바꿔야 합니다.

Ubuntu 20.04의 Nginx에는 기본적으로 /var/www/html의 디렉터리 외부에서 문서를 제공하도록 구성된 하나의 서버 블록이 활성화되어 있습니다. 이 방법은 단일 사이트에서 잘 작동하지만 여러 사이트를 호스팅하는 경우 다루기 어려울 수 있습니다. /var/www/html을 수정하는 대신 your_domain 사이트의 /var/www 내에 디렉토리 구조를 만들고 /var/www/html 을 남겨둡니다. 는 클라이언트 요청이 다른 사이트와 일치하지 않는 경우 제공될 기본 디렉토리입니다.

-p 플래그를 사용하여 다음과 같이 your_domain에 대한 디렉토리를 생성하여 필요한 상위 디렉토리를 생성합니다.

  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을 추가합니다.

<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

기본값과 유사하지만 새 디렉터리 및 도메인 이름에 대해 업데이트된 다음 구성 블록을 붙여넣습니다.

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을 도메인 이름으로 업데이트했습니다.

다음으로 Nginx가 시작하는 동안 읽는 sites-enabled 디렉토리에 대한 링크를 생성하여 파일을 활성화하겠습니다.

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

참고: Nginx는 심볼릭 링크 또는 심볼릭 링크라는 일반적인 방법을 사용하여 활성화된 서버 블록을 추적합니다. 심볼릭 링크를 생성하는 것은 디스크에 바로 가기를 만드는 것과 같으므로 나중에 서버 블록을 sites-available에 유지하면서 sites-enabled 디렉토리에서 바로 가기를 삭제할 수 있습니다. 가능하게 하고 싶었습니다.

이제 두 개의 서버 블록이 활성화되고 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를 눌러 파일에서 단어를 빠르게 검색할 수 있습니다.

참고: 일반적으로 줄 시작 부분에 #를 넣어 코드 줄을 주석 처리하는 것은 실제로 삭제할 필요 없이 비활성화하는 또 다른 방법입니다. 많은 구성 파일에는 활성 코드와 문서 사이를 전환하여 활성화하거나 비활성화할 수 있도록 주석 처리된 여러 옵션이 포함되어 있습니다.

...
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: 기본적으로 이전에 본 기본 Nginx 페이지로만 구성된 실제 웹 콘텐츠는 /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/: 활성화된 사이트별 서버 블록이 저장되는 디렉토리입니다. 일반적으로 sites-available 디렉토리에 있는 구성 파일에 연결하여 생성됩니다.
  • /etc/nginx/snippets: 이 디렉토리에는 Nginx 구성의 다른 위치에 포함될 수 있는 구성 조각이 포함되어 있습니다. 잠재적으로 반복 가능한 구성 세그먼트는 스니펫으로 리팩터링하기에 좋은 후보입니다.

서버 로그

  • /var/log/nginx/access.log: 웹 서버에 대한 모든 요청은 Nginx가 다르게 구성되지 않는 한 이 로그 파일에 기록됩니다.
  • /var/log/nginx/error.log: 모든 Nginx 오류가 이 로그에 기록됩니다.

결론

이제 웹 서버를 설치했으므로 제공할 콘텐츠 유형과 보다 풍부한 경험을 만드는 데 사용할 기술에 대한 많은 옵션이 있습니다.

보다 완벽한 애플리케이션 스택을 구축하려면 Ubuntu 20.04에 Linux, Nginx, MySQL, PHP(LEMP 스택)를 설치하는 방법 문서를 확인하세요.

Let’s Encrypt를 사용하여 무료 SSL 인증서로 도메인 이름에 HTTPS를 설정하려면 Ubuntu 20.04에서 Let’s Encrypt로 Nginx를 보호하는 방법으로 이동해야 합니다.