웹사이트 검색

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에게 필요한 상위 디렉토리를 생성하도록 지시합니다.

  1. sudo mkdir -p /usr/share/nginx/example.com/html
  2. sudo mkdir -p /usr/share/nginx/test.com/html

이제 디렉터리가 있으므로 웹 디렉터리의 소유권을 일반 사용자 계정에 다시 할당할 수 있습니다. 이렇게 하면 sudo 권한 없이 쓸 수 있습니다.

$USER 환경 변수를 사용하여 현재 로그인한 계정에 소유권을 할당할 수 있습니다(루트로 로그인하지 않았는지 확인). 이 디렉토리의 그룹 권한을 nginx에 할당해야 합니다. 이 계정은 Rocky Linux에서 Nginx용으로 자동으로 생성되어 웹 응용 프로그램에서 필요한 경우 웹 서버 자체에서 새 파일을 만들 수 있습니다. chown 명령을 사용하면 두 가지를 동시에 수행할 수 있습니다.

  1. sudo chown -R $USER:nginx /usr/share/nginx/example.com/html
  2. sudo chown -R $USER:nginx /usr/share/nginx/test.com/html

마지막으로 chmod 명령을 사용하여 사용자와 nginx 그룹 모두 전체(7) 권한을 갖고 다른 사용자는 읽기 전용(5) 권한을 갖도록 합니다. Linux 권한에 대한 자세한 내용은 Linux 권한 기본 사항을 참조하십시오.

  1. sudo chmod -R 775 /usr/share/nginx

이제 디렉토리 구조가 구성되었으며 계속 진행할 수 있습니다.

2단계 - 각 사이트에 대한 샘플 페이지 만들기

이제 디렉토리 구조를 설정했으므로 표시할 항목이 있도록 각 사이트에 대한 기본 페이지를 만듭니다.

nano 또는 좋아하는 텍스트 편집기를 사용하여 첫 번째 도메인에 index.html 파일을 만듭니다.

  1. 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를 누릅니다.

두 번째 사이트의 파일은 데모용으로 동일하므로 다음과 같이 두 번째 문서 루트에 복사할 수 있습니다.

  1. cp /usr/share/nginx/example.com/html/index.html /usr/share/nginx/test.com/html/

이제 nano 또는 선호하는 텍스트 편집기에서 새 파일을 열 수 있습니다.

  1. 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 권한이 있는 선호하는 텍스트 편집기를 사용하여 첫 번째 도메인에 대한 구성 파일을 생성합니다.

  1. 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 옵션을 포함하여 사이트 중 하나를 "기본\으로 지정하도록 선택하거나 <에서 기본 서버 블록을 활성화된 상태로 둘 수 있습니다.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.comwww.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;
        }
}

이것이 구성에 필요한 전부입니다. 종료하려면 파일을 저장하고 닫습니다.

두 번째 서버 블록 파일 만들기

이제 초기 서버 블록 구성이 있으므로 이를 두 번째 파일의 기초로 사용할 수 있습니다. 복사하여 새 파일을 만듭니다.

  1. sudo cp /etc/nginx/conf.d/example.com.conf /etc/nginx/conf.d/test.com.conf

원하는 편집기에서 sudo 권한으로 새 파일을 엽니다.

  1. 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.comwww.example.com
  • 에 대한 요청에 응답합니다.\n
  • test.com: test.comwww.test.com
  • 에 대한 요청에 응답합니다.\n
  • default: 다른 두 블록과 일치하지 않는 포트 80의 모든 요청에 응답합니다.

완료되면 파일을 저장하고 닫습니다. 다음으로 Nginx 파일에 구문 오류가 없는지 테스트합니다.

  1. sudo nginx -t

문제가 발견되지 않으면 Nginx를 다시 시작하여 변경 사항을 활성화합니다.

  1. sudo systemctl restart nginx

Nginx는 이제 두 도메인 이름을 모두 제공해야 합니다.

5단계 - 테스트를 위해 로컬 호스트 파일 수정(선택 사항)

자신이 소유하고 실제로 이 서버의 IP 주소를 가리키는 도메인 이름을 사용하지 않고 자리 표시자 값을 대신 사용하고 있는 경우 로컬 컴퓨터의 hosts 파일을 수정하여 임시로 서버를 테스트할 수 있습니다. Nginx 서버 블록 구성.

이렇게 하면 다른 방문자가 사이트를 올바르게 볼 수 없지만 각 사이트에 독립적으로 접근하고 구성을 테스트할 수 있습니다. 이는 일반적으로 DNS로 이동하여 도메인 이름을 확인하는 요청을 가로채는 방식으로 작동합니다. 대신 특정 도메인을 특정 원격 주소에 자동으로 하드코딩하도록 호스트 파일을 설정할 수 있습니다.

참고: 이 단계를 수행하는 동안 원격 서버가 아닌 로컬 컴퓨터에서 작업하고 있는지 확인하십시오. 이렇게 하려면 루트 액세스 권한이 있거나 관리 그룹의 구성원이거나 시스템 파일을 편집할 수 있어야 합니다.

Mac 또는 Linux 환경에서 작업하는 경우 호스트 파일은 /etc/hosts에 있습니다.

  1. 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.comtest.com에 대한 모든 요청을 가로채서 서버로 보냅니다. 실제로 도메인을 소유하지 않은 경우 필요한 것입니다. 당신이 테스트하고 있습니다.

완료되면 파일을 저장하고 닫습니다.

6단계 - 결과 테스트

이제 모든 설정이 완료되었으므로 서버 블록이 올바르게 작동하는지 테스트해야 합니다. 웹 브라우저에서 도메인을 방문하면 됩니다.

http://example.com

다음과 같은 페이지가 표시됩니다.

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

http://test.com

이 두 사이트가 모두 작동하면 Nginx로 두 개의 독립적인 서버 블록을 성공적으로 구성한 것입니다.

이 시점에서 테스트를 위해 로컬 컴퓨터에서 hosts 파일을 조정했다면 추가한 줄을 제거하고 싶을 것입니다.

공개 사이트를 위해 서버에 대한 도메인 이름 액세스가 필요한 경우 각 사이트에 대한 도메인 이름을 구매하고 싶을 것입니다.

결론

이제 동일한 서버에서 호스트하려는 각 도메인에 대해 서버 블록을 생성할 수 있습니다. 하드웨어가 트래픽을 처리할 수 있는 한 생성할 수 있는 서버 블록 수에는 실제 제한이 없습니다.

다음으로 Nginx로 비밀번호 인증을 설정하는 방법을 배울 수 있습니다.