Ubuntu 18.04에 Nginx를 설치하는 방법
소개
Nginx는 세계에서 가장 인기 있는 웹 서버 중 하나이며 인터넷에서 가장 크고 가장 트래픽이 많은 사이트를 호스팅하는 역할을 합니다. 대부분의 경우 Apache보다 리소스 친화적이며 웹 서버 또는 리버스 프록시로 사용할 수 있습니다.
이 가이드에서는 Ubuntu 18.04 서버에 Nginx를 설치하는 방법과 중요한 Nginx 파일 및 디렉터리에 대해 알아봅니다.
전제 조건
이 가이드를 시작하기 전에 sudo 권한이 있는 루트가 아닌 일반 사용자와 서버에 구성된 기본 방화벽이 있어야 합니다. Ubuntu 18.04용 초기 서버 설정 가이드에 따라 일반 사용자 계정을 구성하는 방법을 배울 수 있습니다.
사용 가능한 계정이 있으면 루트가 아닌 사용자로 로그인하여 시작하십시오.
1단계 – Nginx 설치
Nginx는 Ubuntu의 기본 리포지토리에서 사용할 수 있으므로 apt
패키징 시스템을 사용하여 이러한 리포지토리에서 Nginx를 설치할 수 있습니다.
이 세션에서 apt
패키징 시스템과의 첫 번째 상호 작용일 수 있으므로 가장 최근 패키지 목록에 액세스할 수 있도록 로컬 패키지 인덱스를 업데이트합니다. 그런 다음 nginx
를 설치할 수 있습니다.
- sudo apt update
- sudo apt install nginx
절차를 수락하면 apt
가 Nginx와 필요한 모든 종속성을 서버에 설치합니다.
2단계 – 방화벽 조정
Nginx를 테스트하기 전에 서비스에 대한 액세스를 허용하도록 방화벽 소프트웨어를 조정해야 합니다. Nginx는 설치 시 ufw
를 사용하여 자신을 서비스로 등록하므로 Nginx 액세스를 쉽게 허용할 수 있습니다.
다음을 입력하여 ufw
가 작업 방법을 알고 있는 애플리케이션 구성을 나열합니다.
- sudo ufw app list
출력은 애플리케이션 프로필 목록이어야 합니다.
OutputAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
이 목록에는 Nginx에 사용할 수 있는 세 가지 프로필이 표시됩니다.
- Nginx Full: 이 프로필은 포트
80
(일반, 암호화되지 않은 웹 트래픽)과 포트443
(TLS/SSL 암호화된 트래픽)을 모두 엽니다. - Nginx HTTP: 이 프로필은 포트
80
만 엽니다(일반, 암호화되지 않은 웹 트래픽) - Nginx HTTPS: 이 프로필은 포트
443
(TLS/SSL 암호화 트래픽)만 엽니다.
구성한 트래픽을 계속 허용하는 가장 제한적인 프로필을 활성화하는 것이 좋습니다. 이 가이드에서는 아직 서버에 대한 SSL을 구성하지 않았으므로 포트 80
의 트래픽만 허용하면 됩니다.
다음을 입력하여 이를 활성화할 수 있습니다.
- sudo ufw allow 'Nginx HTTP'
그런 다음 변경 사항을 확인합니다.
- sudo ufw status
출력에서 허용된 HTTP 트래픽 목록을 받아야 합니다.
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
이제 적절한 방화벽 규칙을 추가했으므로 웹 서버가 실행 중이고 콘텐츠를 올바르게 제공할 수 있는지 확인할 수 있습니다.
3단계 – 웹 서버 확인
설치 프로세스가 끝나면 Ubuntu 18.04가 Nginx를 시작합니다. 웹 서버는 이미 실행 중이어야 합니다.
서비스가 실행 중인지 확인하려면 systemd
init 시스템을 확인하십시오.
- 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: en
Active: active (running) since Fri 2021-10-01 21:36:15 UTC; 35s ago
Docs: man:nginx(8)
Main PID: 9039 (nginx)
Tasks: 2 (limit: 1151)
CGroup: /system.slice/nginx.service
├─9039 nginx: master process /usr/sbin/nginx -g daemon on; master_pro
└─9041 nginx: worker process
이 출력은 서비스가 성공적으로 시작되었음을 보여줍니다. 그러나 이를 테스트하는 가장 좋은 방법은 실제로 Nginx에서 페이지를 요청하는 것입니다.
기본 Nginx 랜딩 페이지에 액세스하여 서버의 IP 주소로 이동하여 소프트웨어가 제대로 실행되고 있는지 확인할 수 있습니다. 서버의 IP 주소를 모르는 경우 몇 가지 다른 방법으로 가져올 수 있습니다.
서버의 명령 프롬프트에 다음을 입력해 보십시오.
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
몇 줄을 받게 됩니다. 웹 브라우저에서 각각 시도하여 작동하는지 확인할 수 있습니다.
대안은 인터넷의 다른 위치에서 식별된 공용 IP 주소를 생성해야 하는 다음 명령을 실행하는 것입니다.
- curl -4 icanhazip.com
서버의 IP 주소가 있으면 브라우저의 주소 표시줄에 입력하십시오.
http://your_server_ip
기본 Nginx 랜딩 페이지를 받아야 합니다.
이 페이지는 서버가 올바르게 실행되고 있는지 확인하기 위해 Nginx에 포함되어 있습니다.
4단계 – Nginx 프로세스 관리
이제 웹 서버를 가동하고 실행했으므로 몇 가지 기본 관리 명령을 검토해 보겠습니다.
웹 서버를 중지하려면 다음을 입력하십시오.
- sudo systemctl stop nginx
중지된 웹 서버를 시작하려면 다음을 입력하십시오.
- sudo systemctl start nginx
서비스를 중지했다가 다시 시작하려면 다음을 입력합니다.
- sudo systemctl restart nginx
단순히 구성을 변경하는 경우 Nginx를 다시 시작하는 대신 연결을 끊지 않고 다시 로드할 수 있습니다. 이렇게 하려면 다음을 입력합니다.
- sudo systemctl reload nginx
기본적으로 Nginx는 서버 부팅 시 자동으로 시작되도록 구성되어 있습니다. 이것이 원하는 것이 아닌 경우 다음을 입력하여 이 동작을 비활성화할 수 있습니다.
- sudo systemctl disable nginx
서비스가 부팅 시 시작되도록 다시 활성화하려면 다음을 입력하십시오.
- sudo systemctl enable nginx
Nginx는 이제 서버가 다시 부팅될 때 자동으로 시작됩니다.
5단계 – 서버 블록 설정(권장)
Nginx 웹 서버를 사용하는 경우 서버 블록(Apache의 가상 호스트와 유사)을 사용하여 구성 세부 정보를 캡슐화하고 단일 서버에서 둘 이상의 도메인을 호스팅할 수 있습니다. your_domain이라는 도메인을 설정하지만 이를 자신의 도메인 이름으로 바꿔야 합니다. DigitalOcean으로 도메인 이름을 설정하는 방법에 대해 자세히 알아보려면 DigitalOcean DNS 소개를 참조하십시오.
Ubuntu 18.04의 Nginx에는 기본적으로 /var/www/html
의 디렉터리 외부에서 문서를 제공하도록 구성된 하나의 서버 블록이 활성화되어 있습니다. 이 방법은 단일 사이트에서 잘 작동하지만 여러 사이트를 호스팅하는 경우 다루기 어려울 수 있습니다. /var/www/html
을 수정하는 대신 your_domain 사이트의 /var/www
내에 디렉토리 구조를 만들고 /var/www/html
을 남겨둡니다. 는 클라이언트 요청이 다른 사이트와 일치하지 않는 경우 제공될 기본 디렉토리입니다.
-p
플래그를 사용하여 다음과 같이 your_domain에 대한 디렉토리를 생성하여 필요한 상위 디렉토리를 생성합니다.
- sudo mkdir -p /var/www/your_domain/html
다음으로 $USER
환경 변수를 사용하여 디렉터리 소유권을 할당합니다.
- sudo chown -R $USER:$USER /var/www/your_domain/html
umask
값을 수정하지 않은 경우 웹 루트의 권한이 정확해야 하지만 다음을 입력하여 확인할 수 있습니다.
- sudo chmod -R 755 /var/www/your_domain
다음으로 nano
또는 좋아하는 편집기를 사용하여 샘플 index.html
페이지를 만듭니다.
- 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>
완료되면 파일을 저장하고 닫습니다. nano
를 사용한 경우 CTRL + X
를 누른 다음 Y
및 ENTER
를 눌러 종료할 수 있습니다.
Nginx가 이 콘텐츠를 제공하려면 올바른 지시어로 서버 블록을 생성해야 합니다. 기본 구성 파일을 직접 수정하는 대신 /etc/nginx/sites-available/your_domain
에서 새 구성 파일을 만듭니다.
- 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.com www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}
root
구성을 새 디렉터리로 업데이트하고 server_name
을 도메인 이름으로 업데이트했습니다. 완료되면 파일을 저장하고 닫습니다.
다음으로 Nginx가 시작하는 동안 읽는 sites-enabled
디렉터리에 대한 링크를 생성하여 파일을 활성화합니다.
- sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
이제 두 개의 서버 블록이 활성화되고 listen
및 server_name
지시문을 기반으로 요청에 응답하도록 구성됩니다(Nginx가 이러한 지시문을 처리하는 방법에 대한 자세한 내용은 여기를 참조하세요).
your_domain
:your_domain
및www.your_domain
에 대한 요청에 응답합니다.default
: 포트80
에서 다른 두 블록과 일치하지 않는 모든 요청에 응답합니다.
추가 서버 이름 추가로 인해 발생할 수 있는 해시 버킷 메모리 문제를 방지하려면 /etc/nginx/nginx.conf
파일에서 단일 값을 조정해야 합니다. 파일 열기:
- sudo nano /etc/nginx/nginx.conf
server_names_hash_bucket_size
지시문을 찾아 #
기호를 제거하여 줄의 주석을 제거합니다.
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
완료되면 파일을 저장하고 닫습니다.
다음으로 Nginx 파일에 구문 오류가 없는지 테스트합니다.
- sudo nginx -t
문제가 없으면 Nginx를 다시 시작하여 변경 사항을 적용합니다.
- 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 18.04에서 LEMP 스택을 구성하는 방법에 대한 이 문서를 확인하세요.