소개
Nginx는 세계에서 가장 인기 있는 웹 서버 중 하나로, 인터넷에서 가장 크고 고트래픽인 사이트 중 일부를 호스팅하고 있습니다. 이것은 가벼운 선택으로 웹 서버 또는 리버스 프록시로 사용할 수 있습니다.
이 안내서에서는 Rocky Linux 9 서버에 Nginx를 설치하고 방화벽을 조정하며 Nginx 프로세스를 관리하고 단일 서버에서 여러 도메인을 호스팅하기 위한 서버 블록을 설정하는 방법을 검토합니다.
전제 조건
이 안내서를 시작하기 전에 서버에 sudo 권한이 있는 일반 사용자 계정이 설정되어 있어야 합니다. 일반 사용자 계정을 구성하는 방법은 Rocky Linux 9에 대한 초기 서버 설정 안내서를 따르면 됩니다.
또한 본 자습서의 마지막 단계를 완료하기 전에 도메인 이름을 등록하는 것이 좋습니다. DigitalOcean에서 도메인 이름을 설정하는 자세한 내용은 DigitalOcean DNS 소개를 참조하십시오.
계정이 준비되었으면 비 관리자 사용자로 로그인하여 시작하십시오.
단계 1 – Nginx 설치
Rocky의 기본 저장소에 Nginx가 있으므로 dnf
패키지 관리자를 사용하여 단일 명령으로 설치할 수 있습니다.
dnf install
을 사용하여 nginx
패키지를 설치하세요:
- sudo dnf install nginx
프롬프트가 나타나면 nginx
를 설치하려는 것을 확인하기 위해 y
를 입력하세요. 그 후에 dnf
는 Nginx와 필요한 종속성을 서버에 설치합니다.
설치가 완료되면 다음 명령을 실행하여 웹 서버를 활성화하고 시작하세요:
- sudo systemctl enable nginx
- sudo systemctl start nginx
이렇게 하면 서버가 다시 부팅될 때마다 Nginx가 자동으로 다시 시작됩니다. 새 웹 서버가 지금 실행 중이어야 하지만 테스트하기 전에 방화벽 구성을 변경해야 할 것입니다.
단계 2 – 방화벽 조정
Rocky Linux 9의 초기 서버 설정 가이드의 일부로 firewalld
방화벽을 활성화했다면 Nginx 웹 서버에서 외부 연결을 허용하도록 방화벽 설정을 조정해야 합니다. 기본적으로 포트 80
에서 실행됩니다.
다음 명령을 실행하여 포트 80
에서 HTTP 연결을 영구적으로 활성화합니다:
- sudo firewall-cmd --permanent --add-service=http
추가된 http
방화벽 서비스가 올바르게 추가되었는지 확인하려면 다음 명령을 실행할 수 있습니다:
- sudo firewall-cmd --permanent --list-all
다음과 같은 출력이 표시됩니다:
Outputpublic
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
변경 사항을 적용하려면 방화벽 서비스를 다시로드해야 합니다:
- sudo firewall-cmd --reload
웹 서버는 이제 외부 방문자가 접근할 수 있어야 합니다.
단계 3 – 웹 서버 확인
이 시점에서 웹 서버가 실행 중이어야 합니다.
systemctl status
명령을 사용하여 서비스가 실행 중인지 확인할 수 있습니다:
- systemctl status nginx
Output● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-09-14 21:03:46 UTC; 7min ago
Process: 18384 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 18385 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 18386 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 18387 (nginx)
Tasks: 3 (limit: 10938)
Memory: 2.8M
CPU: 43ms
CGroup: /system.slice/nginx.service
├─18387 "nginx: master process /usr/sbin/nginx"
├─18388 "nginx: worker process"
└─18389 "nginx: worker process"
이 출력에 따르면 서비스가 성공적으로 시작되었습니다. 그러나 이를 테스트하는 가장 좋은 방법은 실제로 Nginx에서 페이지를 요청하는 것입니다.
소프트웨어가 올바르게 실행되고 있는지 확인하려면 서버의 IP 주소로 이동하여 기본 Nginx 랜딩 페이지에 액세스할 수 있습니다. 서버의 IP 주소를 모르는 경우 인터넷의 다른 위치에서 수신한 공용 IP 주소를 제공하는 icanhazip.com 도구를 사용하여 찾을 수 있습니다:
- curl -4 icanhazip.com
서버의 IP 주소를 가지고 있으면 브라우저의 주소 표시줄에 입력하십시오:
http://your_server_ip
기본 Nginx 랜딩 페이지를 받아야 합니다:
이 페이지에 있으면 서버가 올바르게 실행되고 관리 준비가 된 것입니다.
단계 4 – Nginx 프로세스 관리
웹 서버를 실행한 상태에서 서비스 관리 명령 몇 가지를 살펴보겠습니다.
웹 서버를 중지하려면 systemctl stop
을 사용하세요:
- sudo systemctl stop nginx
중지된 웹 서버를 시작하려면 systemctl start
을 사용하세요:
- sudo systemctl start nginx
서비스를 다시 중지한 다음 시작하려면 systemctl restart
을 사용하세요:
- sudo systemctl restart nginx
구성 변경만 하는 경우 Nginx는 종종 연결을 끊지 않고 다시로드할 수 있습니다. 이를 위해 systemctl reload
을 사용하세요:
- sudo systemctl reload nginx
이 튜토리얼에서 이전에 Nginx를 서버 부팅시 자동으로 시작하도록 구성했습니다. 이 동작을 비활성화하려면 systemctl disable
을 사용하세요:
- sudo systemctl disable nginx
부팅 시 서비스를 다시 활성화하려면 다음을 입력하세요:
- sudo systemctl enable nginx
단계 5 – 중요한 Nginx 파일 및 디렉터리 익히기
Nginx 서비스를 관리하는 방법을 알았으므로 몇 분 동안 몇 가지 중요한 디렉터리와 파일에 익숙해지는 것이 좋습니다.
내용
/usr/share/nginx/html
: 실제 웹 콘텐츠는 기본적으로 이전에 본 기본 Nginx 페이지만 포함됩니다. 이 콘텐츠는/usr/share/nginx/html
디렉터리에서 제공됩니다. 이는 Nginx 구성 파일을 변경하여 변경할 수 있습니다.
서버 구성
/etc/nginx
: Nginx 구성 디렉터리입니다. 여기에는 모든 Nginx 구성 파일이 있습니다./etc/nginx/nginx.conf
: 주요 Nginx 구성 파일입니다. 이를 수정하여 Nginx 전역 구성을 변경할 수 있습니다./etc/nginx/conf.d/
: 이 디렉터리에는 서버 블록 구성 파일이 포함되어 있습니다. 여기에서 Nginx 내에서 호스팅되는 웹 사이트를 정의할 수 있습니다. 일반적인 접근 방식은 각 웹 사이트를 해당 도메인 이름으로 명명된 별도의 파일에 두는 것입니다.your_domain.conf
와 같습니다.
서버 로그
/var/log/nginx/access.log
: 웹 서버로의 모든 요청은 Nginx가 그렇게 구성되지 않은 한이 로그 파일에 기록됩니다./var/log/nginx/error.log
: 모든 Nginx 오류는 이 로그에 기록됩니다.
이제 사이트를 구성하여 하나 이상의 도메인을 호스팅할 준비가 되었습니다.
단계 6 – 서버 블록 설정 (옵션)
Nginx 웹 서버를 사용할 때 서버 블록 (Apache의 가상 호스트와 유사함)을 사용하여 구성 세부 정보를 정리하고 단일 서버에서 여러 도메인을 호스팅할 수 있습니다. Rocky Linux 9에서 서버 블록은 /etc/nginx/conf.d
에 위치한 .conf
파일에서 정의됩니다. 우리는 your_domain
이라는 도메인을 설정할 것입니다. 그러나 이것을 자신의 도메인 이름으로 바꿔야 합니다.
기본적으로 Rocky Linux 9의 Nginx는 문서를 /usr/share/nginx/html
디렉토리에서 제공하도록 구성되어 있습니다. 이는 단일 사이트에 대해 잘 작동하지만 여러 사이트를 호스팅하는 경우 관리하기 어려워질 수 있습니다. /usr/share/nginx/html
을 수정하는 대신 /var/www
내에 your_domain 웹사이트를 위한 디렉토리 구조를 생성합니다. 이로써 /usr/share/nginx/html
은 다른 사이트와 일치하지 않는 경우에 제공되는 기본 디렉토리로 남습니다.
your_domain 디렉토리를 다음과 같이 만듭니다. 부모 디렉토리가 필요한 경우 -p
플래그를 사용하여:
- sudo mkdir -p /var/www/your_domain/html
다음으로, 디렉토리 소유권을 $USER
환경 변수에 할당하십시오. 이는 현재 시스템 사용자를 참조해야 합니다:
- sudo chown -R $USER:$USER /var/www/your_domain/html
이제 서버 블록 구성을 테스트하기 위해 샘플 index.html
페이지를 생성하겠습니다. Rocky Linux 9에 기본으로 제공되는 텍스트 편집기는 vi
입니다. vi
는 매우 강력한 텍스트 편집기이지만, 사용 경험이 부족한 사용자에게는 다소 난해할 수 있습니다. Rocky Linux 9 서버에서 구성 파일을 편집하기 위해 더 사용자 친화적인 편집기인 nano
와 같은 편집기를 설치할 수 있습니다:
- sudo dnf install nano
다음으로, nano
또는 선호하는 편집기를 사용하여 샘플 index.html
페이지를 생성하십시오:
- nano /var/www/your_domain/html/index.html
내부에 다음과 같은 샘플 HTML을 추가하십시오:
<html>
<head>
<title>Welcome to your_domain</title>
</head>
<body>
<h1>Success! Your Nginx server is successfully configured for <em>your_domain</em>. </h1>
<p>This is a sample page.</p>
</body>
</html>
작업을 마쳤을 때 파일을 저장하고 닫으십시오. nano
를 사용하는 경우, CTRL + X
를 누르고, 나올 때 Y
를 누르고 Enter를 눌러 저장하고 종료할 수 있습니다:
이 내용을 제공하기 위해 Nginx가 필요한 대로 콘텐츠를 제공하려면 사용자 지정 웹 루트를 가리키는 지시문이 포함된 서버 블록을 생성해야 합니다. /etc/nginx/conf.d/your_domain.conf
에 새로운 서버 블록을 생성하십시오:
- sudo nano /etc/nginx/conf.d/your_domain.conf
다음 구성 블록을 붙여 넣으십시오:
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
을 도메인 이름으로 업데이트했음을 주목하십시오. 파일을 저장하고 닫으십시오.
두 개의 서버 블록이 현재 활성화되어 있고, listen
및 server_name
지시문을 기반으로 요청에 응답하도록 구성되어 있습니다(Nginx가 이러한 지시문을 처리하는 방법에 대해 자세히 알아보려면 여기를 읽어보세요):
your_domain
:your_domain
및www.your_domain
에 대한 요청에 응답합니다.default
: 다른 두 블록과 일치하지 않는 80번 포트의 모든 요청에 응답합니다.
다음으로, 모든 Nginx 파일에서 구문 오류가 없는지 확인하기 위해 nginx -t
를 사용하여 테스트하세요:
- sudo nginx -t
문제가 없다면, 변경 사항을 활성화하기 위해 Nginx를 다시 시작하세요:
- sudo systemctl restart nginx
브라우저에서 변경 사항을 테스트하기 전에 서버의 SELinux 보안 컨텍스트를 업데이트하여 Nginx가 /var/www/your_domain
디렉토리에서 내용을 제공할 수 있도록 해야 합니다.
이 chcon
컨텍스트 업데이트는 사용자 정의 문서 루트가 HTTP 콘텐츠로 제공되도록 합니다:
- chcon -vR system_u:object_r:httpd_sys_content_t:s0 /var/www/your_domain/
Nginx는 이제 도메인 이름을 제공해야 합니다. 이를 확인하려면 http://your_domain
으로 이동하여 다음과 같은 내용을 볼 수 있어야 합니다:
결론
웹 서버를 설치한 이제, 제공할 콘텐츠 종류와 더 풍부한 경험을 위해 사용할 기술에 대한 여러 가지 옵션이 있습니다.
무료 SSL 인증서를 사용하여 도메인 이름에 HTTPS를 설정하려면 Let’s Encrypt을 사용하여 Rocky Linux 9에서 Nginx를 안전하게 설정하는 방법으로 진행해야 합니다.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-rocky-linux-9