Rocky Linux 9에서 Nginx 서버 블록(가상 호스트)을 설정하는 방법
소개
Nginx 웹 서버를 사용할 때 서버 블록(Apache의 가상 호스트와 유사)을 사용하여 구성 세부 정보를 캡슐화하고 단일 서버에서 둘 이상의 도메인을 호스팅할 수 있습니다.
이 가이드에서는 Rocky Linux 9 서버의 Nginx에서 서버 블록을 구성하는 방법을 배웁니다.
전제 조건
이 자습서 전체에서 sudo
권한이 있는 루트가 아닌 사용자를 사용해야 합니다. 이와 같은 사용자가 구성되어 있지 않은 경우 Rocky Linux 9 초기 서버 설정 가이드에 따라 사용자를 만들 수 있습니다.
또한 서버에 Nginx가 설치되어 있어야 합니다. Rocky Linux 9에 Nginx를 설치하는 방법에 따라 설치할 수 있습니다.
1단계 - 새 문서 루트 디렉토리 설정
데모 목적으로 이 튜토리얼에서는 Nginx 서버로 두 개의 도메인을 설정하는 방법을 다룹니다. 이 가이드에 사용된 도메인 이름은 test.com입니다. 이미 자체 도메인이 있는 경우 해당 도메인을 대신 사용할 수 있습니다.
참고: DigitalOcean에 새 도메인을 등록하는 방법에 대한 자세한 내용은 도메인 및 DNS 제품 설명서를 참조하십시오.
구성할 두 개의 도메인 이름이 없는 경우 지금은 자리 표시자 이름을 사용할 수 있습니다. 여전히 구성을 테스트할 수 있습니다.
기본적으로 Rocky Linux 9의 Nginx에는 하나의 서버 블록이 활성화되어 있습니다. /usr/share/nginx/html
의 디렉토리에서 문서를 제공하도록 구성되었습니다. 이 방법은 단일 사이트에서 잘 작동하지만 여러 사이트에 서비스를 제공하려면 추가 디렉토리가 필요합니다. /usr/share/nginx/html
디렉토리를 클라이언트 요청이 다른 사이트와 일치하지 않는 경우 제공되는 기본 디렉토리로 간주할 수 있습니다.
각 사이트에 대해 /usr/share/nginx
내에 디렉토리 구조를 생성할 수 있습니다. 실제 웹 콘텐츠는 이러한 사이트별 디렉터리 내의 html
디렉터리에 배치됩니다. 이렇게 하면 필요에 따라 사이트와 연결된 다른 디렉터리를 만들 수 있는 추가 유연성이 제공됩니다.
각 사이트에 대해 이러한 디렉터리를 만듭니다. -p
플래그는 mkdir
에게 필요한 상위 디렉토리를 생성하도록 지시합니다.
- sudo mkdir -p /usr/share/nginx/example.com/html
- sudo mkdir -p /usr/share/nginx/test.com/html
이제 디렉터리가 있으므로 웹 디렉터리의 소유권을 일반 사용자 계정에 다시 할당할 수 있습니다. 이렇게 하면 sudo
권한 없이 쓸 수 있습니다.
$USER
환경 변수를 사용하여 현재 로그인한 계정에 소유권을 할당할 수 있습니다(루트로 로그인하지 않았는지 확인). 이 디렉토리의 그룹 권한을 nginx
에 할당해야 합니다. 이 계정은 Rocky Linux에서 Nginx용으로 자동으로 생성되어 웹 응용 프로그램에서 필요한 경우 웹 서버 자체에서 새 파일을 만들 수 있습니다. chown
명령을 사용하면 두 가지를 동시에 수행할 수 있습니다.
- sudo chown -R $USER:nginx /usr/share/nginx/example.com/html
- sudo chown -R $USER:nginx /usr/share/nginx/test.com/html
마지막으로 chmod
명령을 사용하여 사용자와 nginx
그룹 모두 전체(7) 권한을 갖고 다른 사용자는 읽기 전용(5) 권한을 갖도록 합니다. Linux 권한에 대한 자세한 내용은 Linux 권한 기본 사항을 참조하십시오.
- sudo chmod -R 775 /usr/share/nginx
이제 디렉토리 구조가 구성되었으며 계속 진행할 수 있습니다.
2단계 - 각 사이트에 대한 샘플 페이지 만들기
이제 디렉토리 구조를 설정했으므로 표시할 항목이 있도록 각 사이트에 대한 기본 페이지를 만듭니다.
nano
또는 좋아하는 텍스트 편집기를 사용하여 첫 번째 도메인에 index.html
파일을 만듭니다.
- nano /usr/share/nginx/example.com/html/index.html
파일 내에서 현재 액세스 중인 사이트를 나타내는 베어본 웹 랜딩 페이지를 만듭니다. 다음과 같이 표시됩니다.
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
완료되면 파일을 저장하고 닫습니다. nano
를 사용하는 경우 Ctrl+X
를 누른 다음 메시지가 표시되면 Y
를 누르고 Enter를 누릅니다.
두 번째 사이트의 파일은 데모용으로 동일하므로 다음과 같이 두 번째 문서 루트에 복사할 수 있습니다.
- cp /usr/share/nginx/example.com/html/index.html /usr/share/nginx/test.com/html/
이제 nano
또는 선호하는 텍스트 편집기에서 새 파일을 열 수 있습니다.
- nano /usr/share/nginx/test.com/html/index.html
두 번째 도메인을 참조하도록 수정합니다.
<html>
<head>
<title>Welcome to Test.com!</title>
</head>
<body>
<h1>Success! The test.com server block is working!</h1>
</body>
</html>
완료되면 이 파일을 저장하고 닫습니다. 이제 두 도메인의 방문자에게 표시할 페이지가 생겼습니다.
3단계 - 각 도메인에 대한 서버 블록 파일 생성
이제 제공할 콘텐츠가 있으므로 Nginx에 이를 수행하는 방법을 알려줄 서버 블록을 생성해야 합니다.
기본적으로 Rocky Linux의 Nginx는 주 구성 파일인 nginx.conf
내에 하나의 "기본\ 서버 블록을 포함합니다. 해당 파일 내부의 해당 블록은 다음과 같습니다.
…
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
…
별도의 파일에서 생성할 수 있는 고유한 구성을 위한 템플릿으로 사용할 수 있습니다. 첫 번째 도메인의 서버 블록을 설계하여 시작한 다음 두 번째 도메인에 복사하고 필요한 수정을 할 수 있습니다.
첫 번째 서버 블록 파일 만들기
/etc/nginx/conf.d
디렉토리 안에 첫 번째 서버 블록 구성 파일을 만듭니다. 기본 Nginx 구성 파일에는 기본적으로 include /etc/nginx/conf.d/*.conf;
줄이 포함되어 있으며, 이는 추가 서버 블록에 대해 해당 패턴과 일치하는 파일을 확인한다는 의미입니다.
sudo
권한이 있는 선호하는 텍스트 편집기를 사용하여 첫 번째 도메인에 대한 구성 파일을 생성합니다.
- sudo nano /etc/nginx/conf.d/example.com.conf
이 베어본 서버 블록을 붙여넣기 시작합니다.
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
그 후 먼저 listen
지시문을 검토해야 합니다. 서버의 서버 블록 중 하나만 default_server
옵션을 활성화할 수 있습니다. 이것은 요청된 server_name
이 사용 가능한 서버 블록과 일치하지 않는 경우 요청을 처리해야 하는 블록을 지정합니다. 방문자는 도메인 이름을 통해 사이트에 액세스하므로 실제 시나리오에서는 자주 발생하지 않아야 합니다.
listen
지시문에 default_server
옵션을 포함하여 사이트 중 하나를 "기본\으로 지정하도록 선택하거나 <에서 기본 서버 블록을 활성화된 상태로 둘 수 있습니다. code>nginx.conf, 요청된 호스트를 찾을 수 없는 경우 /usr/share/nginx/html
디렉토리의 콘텐츠를 제공합니다.
이 가이드에서는 일치하지 않는 요청을 처리하기 위해 "기본\ 서버 블록을 그대로 두므로 새 example.com
구성에 default_server
가 포함되지 않습니다.
server {
listen 80;
listen [::]:80;
. . .
}
다음으로 조정할 것은 root
지시문에 의해 지정된 문서 루트입니다. 만든 사이트의 문서 루트를 가리킵니다.
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/example.com/html;
}
다음으로 첫 번째 도메인에 대한 요청과 일치하도록 server_name
을 수정해야 합니다. 일치해야 하는 별칭을 추가로 추가할 수 있습니다. 이 자습서에서는 시연을 위해 example.com
및 www.example.com
별칭을 추가합니다.
완료되면 파일은 다음과 같이 표시됩니다.
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
이것이 구성에 필요한 전부입니다. 종료하려면 파일을 저장하고 닫습니다.
두 번째 서버 블록 파일 만들기
이제 초기 서버 블록 구성이 있으므로 이를 두 번째 파일의 기초로 사용할 수 있습니다. 복사하여 새 파일을 만듭니다.
- sudo cp /etc/nginx/conf.d/example.com.conf /etc/nginx/conf.d/test.com.conf
원하는 편집기에서 sudo
권한으로 새 파일을 엽니다.
- sudo nano /etc/nginx/conf.d/test.com.conf
다시 말하지만, 이미 다른 곳에서 사용한 경우 이 파일의 listen
지시문에 대한 default_server
옵션을 사용하지 않도록 합니다. 두 번째 도메인의 문서 루트를 가리키도록 root
지시문을 조정하고 두 번째 사이트의 도메인 이름과 일치하도록 server_name
을 조정합니다(별칭을 포함해야 함).
완료되면 파일은 다음과 같이 표시됩니다.
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/test.com/html;
index index.html index.htm index.nginx-debian.html;
server_name test.com www.test.com;
location / {
try_files $uri $uri/ =404;
}
}
파일을 저장하고 닫습니다. 다음 단계에서는 Nginx를 다시 로드하여 변경 사항을 반영합니다.
4단계 - 서버 차단 활성화 및 Nginx 재시작
이제 listen
지시문과 server_name
에 따라 응답하도록 구성된 세 개의 서버 블록이 활성화되었습니다(Nginx가 이러한 지시문을 처리하는 방법에 대한 자세한 내용은 여기를 참조하세요).
example.com
:example.com
및www.example.com
에 대한 요청에 응답합니다.\ntest.com
:test.com
및www.test.com
에 대한 요청에 응답합니다.\ndefault
: 다른 두 블록과 일치하지 않는 포트 80의 모든 요청에 응답합니다.
완료되면 파일을 저장하고 닫습니다. 다음으로 Nginx 파일에 구문 오류가 없는지 테스트합니다.
- sudo nginx -t
문제가 발견되지 않으면 Nginx를 다시 시작하여 변경 사항을 활성화합니다.
- sudo systemctl restart nginx
Nginx는 이제 두 도메인 이름을 모두 제공해야 합니다.
5단계 - 테스트를 위해 로컬 호스트 파일 수정(선택 사항)
자신이 소유하고 실제로 이 서버의 IP 주소를 가리키는 도메인 이름을 사용하지 않고 자리 표시자 값을 대신 사용하고 있는 경우 로컬 컴퓨터의 hosts 파일을 수정하여 임시로 서버를 테스트할 수 있습니다. Nginx 서버 블록 구성.
이렇게 하면 다른 방문자가 사이트를 올바르게 볼 수 없지만 각 사이트에 독립적으로 접근하고 구성을 테스트할 수 있습니다. 이는 일반적으로 DNS로 이동하여 도메인 이름을 확인하는 요청을 가로채는 방식으로 작동합니다. 대신 특정 도메인을 특정 원격 주소에 자동으로 하드코딩하도록 호스트 파일을 설정할 수 있습니다.
참고: 이 단계를 수행하는 동안 원격 서버가 아닌 로컬 컴퓨터에서 작업하고 있는지 확인하십시오. 이렇게 하려면 루트 액세스 권한이 있거나 관리 그룹의 구성원이거나 시스템 파일을 편집할 수 있어야 합니다.
Mac 또는 Linux 환경에서 작업하는 경우 호스트 파일은 /etc/hosts
에 있습니다.
- sudo nano /etc/hosts
Windows를 사용하는 경우 호스트 파일은 C:\\Windows\\System32\\drivers tc\\hosts
에 있습니다.
서버의 공용 IP 주소와 서버로 라우팅하려는 도메인을 알아야 합니다. 서버의 공용 IP 주소가 203.0.113.5
라고 가정하면 파일에 추가하는 행은 다음과 같습니다.
127.0.0.1 localhost
. . .
203.0.113.5 example.com www.example.com
203.0.113.5 test.com www.test.com
이렇게 하면 example.com
및 test.com
에 대한 모든 요청을 가로채서 서버로 보냅니다. 실제로 도메인을 소유하지 않은 경우 필요한 것입니다. 당신이 테스트하고 있습니다.
완료되면 파일을 저장하고 닫습니다.
6단계 - 결과 테스트
이제 모든 설정이 완료되었으므로 서버 블록이 올바르게 작동하는지 테스트해야 합니다. 웹 브라우저에서 도메인을 방문하면 됩니다.
http://example.com
다음과 같은 페이지가 표시됩니다.

두 번째 도메인 이름을 방문하면 약간 다른 사이트가 표시됩니다.
http://test.com

이 두 사이트가 모두 작동하면 Nginx로 두 개의 독립적인 서버 블록을 성공적으로 구성한 것입니다.
이 시점에서 테스트를 위해 로컬 컴퓨터에서 hosts
파일을 조정했다면 추가한 줄을 제거하고 싶을 것입니다.
공개 사이트를 위해 서버에 대한 도메인 이름 액세스가 필요한 경우 각 사이트에 대한 도메인 이름을 구매하고 싶을 것입니다.
결론
이제 동일한 서버에서 호스트하려는 각 도메인에 대해 서버 블록을 생성할 수 있습니다. 하드웨어가 트래픽을 처리할 수 있는 한 생성할 수 있는 서버 블록 수에는 실제 제한이 없습니다.
다음으로 Nginx로 비밀번호 인증을 설정하는 방법을 배울 수 있습니다.