Nginx를 사용하여 임시 및 영구 리디렉션 만드는 방법

소개

HTTP 리디렉션은 하나의 도메인이나 주소를 다른 곳으로 지정하는 방법입니다. 리디렉션에는 몇 가지 다른 종류가 있으며, 각각은 클라이언트 브라우저에게 다른 의미를 가집니다. 가장 일반적인 두 가지 유형은 일시적인 리디렉션과 영구적인 리디렉션입니다.

일시적인 리디렉션 (응답 상태 코드 302 Found)은 URL이 일시적으로 다른 위치에서 제공되어야 할 때 유용합니다. 예를 들어, 사이트 유지보수를 수행하는 경우 도메인에서 방문자에게 잠시 후에 다시 돌아올 것이라는 설명 페이지로 일시적인 리디렉션을 사용하고자 할 수 있습니다.

영구적인 리디렉션 (응답 상태 코드 301 Moved Permanently)은 반면에 브라우저에게 이전 주소를 완전히 잊고 더 이상 액세스하지 말아야 한다고 알려줍니다. 이것들은 콘텐츠가 영구적으로 새 위치로 이동된 경우와 같이 도메인 이름을 변경할 때 유용합니다.

이 안내서에서는 Nginx에서 각 종류의 리디렉션을 어떻게 구현하는지에 대한 보다 심층적인 설명과 구체적인 사용 사례에 대한 몇 가지 예제를 살펴볼 것입니다.

필수 준비 사항

이 튜토리얼을 따르려면 다음이 필요합니다:

  • A server with Nginx installed and set up to serve your website(s). You can find some examples and instructions on the tutorials for Ubuntu 22.04, Debian, or CentOS.

한눈에 보는 솔루션

Nginx에서 대부분의 리디렉션은 내장 rewrite 지시문을 사용하여 수행할 수 있습니다. 이 지시문은 기본적으로 새로운 Nginx 설치에서 사용할 수 있으며 임시 리디렉션 및 영구적인 리디렉션을 생성하는 데 사용될 수 있습니다. 가장 간단한 형태로는 적어도 두 개의 인수를 취합니다: 이전 URL 및 새 URL입니다.

다음과 같은 서버 구성에서 임시 리디렉션을 구현할 수 있습니다:

Temporary redirect with rewrite
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/$ http://www.domain2.com redirect;
    . . .
}

이 리디렉션은 브라우저에게 모든 www.domain1.com 요청을 www.domain2.com으로 보내도록 지시합니다. 그러나 이 솔루션은 단일 페이지에만 작동하며 전체 사이트에는 적용되지 않습니다. 단일 파일이 아니라 디렉터리 전체를 지정하려면 rewrite 지시문과 함께 정규 표현식을 사용할 수 있습니다.

redirect는 괄호 안의 정규 표현식 패턴과 일치합니다. 그런 다음 일치하는 텍스트를 리디렉션 대상에서 $1 표현식을 사용하여 참조합니다. 여기서 1은 일치하는 텍스트의 첫 번째 그룹입니다. 더 복잡한 예에서는 연속적인 일치 그룹에 번호를 순차적으로 지정합니다.

예를 들어, www.domain1.com의 모든 페이지를 임시로 리디렉션하려면 다음을 사용할 수 있습니다:

Temporary redirect with rewrite
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
    . . .
}

server {
    . . .
    server_name www.domain2.com;
    . . .
}

기본적으로 rewrite 지시문은 임시 리디렉션을 설정합니다. 영구적인 리디렉션을 만들고 싶다면, 지시문의 끝에 redirectpermanent로 바꿔야 합니다. 다음과 같이:

Permanent redirects
rewrite ^/$ http://www.domain2.com permanent;
rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;

이제 몇 가지 구체적인 예시로 넘어가 봅시다.

예시 1 — 다른 도메인으로 이동

웹 프레젠스를 구축했고 새로운 주소로 도메인을 변경하려는 경우, 이전 도메인을 그냥 버리지 않는 것이 좋습니다. 콘텐츠가 새 위치를 찾는 방법에 대한 브라우저 지침 없이 사이트가 사라지면, 인터넷의 다른 페이지에 있는 사이트로의 책갈피 및 링크가 깨집니다. 리디렉트 없이 도메인을 변경하면 사이트가 이전 방문자 및 이전 링크에서의 트래픽을 잃게 됩니다.

이 예에서는 기존 도메인인 domain1.com에서 새 도메인인 domain2.com으로의 리디렉트를 구성합니다. 여기서 우리는 예전 도메인이 폐기될 것이고 이제 모든 트래픽이 새 도메인으로 이동해야 하므로 영구적인 리디렉트를 사용할 것입니다.

당신이 이미 Nginx에서 다음과 같이 구성된 단일 도메인 domain1.com으로 웹 사이트를 구성했다고 가정합시다:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    . . .
}

또한 이미 domain2.com에서 웹 사이트의 미래 버전을 제공하고 있다고 가정합니다:

/etc/nginx/sites-available/domain2.com
server {
    . . .
    server_name domain2.com;
    . . .
}

domain1.com 서버 블록 구성 파일을 변경하여 domain2.com로 영구 리디렉션을 추가합시다:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    rewrite ^/(.*)$ http://domain2.com/$1 permanent;
    . . .
}

우리는 rewrite 지시문을 사용하여 위에서 언급한 리디렉션을 추가했습니다. ^/(.*)$ 정규 표현식은 URL에서 / 이후의 모든 것과 일치합니다. 예를 들어, http://domain1.com/index.htmlhttp://domain2.com/index.html로 리디렉션됩니다. 영구 리디렉션을 달성하기 위해 rewrite 지시문 뒤에 간단히 permanent를 추가하면 됩니다.

참고: 변경 사항을 적용하기 전에 nginx -t를 사용하여 구성을 테스트하고, Nginx를 다시 시작하세요.

예시 2 — 단일 페이지 이름 변경에도 불구하고 지속적인 경험 생성

가끔은 이미 게시되고 사이트에서 트래픽을 받은 개별 페이지의 이름을 변경해야 할 필요가 있습니다. 이름만 변경하면 방문자가 원래 URL에 액세스하려고 시도할 때 404 Not Found 오류가 발생하지만 리디렉션을 사용하여 이를 피할 수 있습니다. 이렇게 하면 이전 페이지에 책갈피를 추가한 사람들이나 검색 엔진에서 오래된 링크를 통해 찾은 사람들도 올바른 페이지에 도달할 수 있습니다.

웹사이트에 제품과 서비스에 대한 두 개의 별도 페이지인 products.htmlservices.html이 있다고 가정해 보겠습니다. 이제 이 두 페이지를 대신하는 단일 제공 페이지인 offers.html로 대체하기로 결정했습니다. 우리는 products.htmlservices.htmloffers.html로 간단한 리디렉션하겠습니다.

우리는 웹사이트가 다음과 같이 구성되어 있다고 가정합니다:

Original server block configuration
server {
    . . .
    server_name example.com www.example.com;
    . . .
}

리디렉션 구성은 두 개의 리디렉션 지시문을 사용하는 것만큼 간단합니다.

Redirects added to the original configuration
server {
    . . .
    server_name example.com www.example.com;
    
    rewrite ^/products.html$ /offer.html permanent;
    rewrite ^/services.html$ /offer.html permanent;
    . . .
}

rewrite 지시문은 리디렉션해야 하는 원래 주소와 새 페이지의 대상 주소를 모두 허용합니다. 여기서 변경 사항이 일시적인 것이 아니므로 지시문에 permanent를 사용했습니다. 사이트 콘텐츠를 이동할 때 방문자가 불필요한 404 Not Found 오류를 보지 않도록 하기 위해 원하는 만큼 많은 리디렉션을 사용할 수 있습니다.

결론

이제 새 위치로의 요청을 리디렉션하는 지식을 갖추셨습니다. 잘못된 임시 리디렉션의 사용은 검색 순위에 영향을 미칠 수 있으므로 올바른 리디렉션 유형을 사용하십시오.

HTTP 리디렉션의 다른 여러 사용 사례에는 안전한 SSL 연결을 강제하는 것(즉, http 대신 https 사용)과 모든 방문자가 웹사이트의 www. 접두사 주소로만 이동하도록 하는 것이 있습니다.

리디렉션을 올바르게 사용하면 현재 웹 존재를 활용할 수 있으면서 필요에 따라 사이트 구조를 수정할 수 있습니다. 방문자를 리디렉션하는 방법에 대해 자세히 알고 싶다면 Nginx의 공식 문서의 리라이트 모듈 섹션과 리디렉션 생성에 관한 공식 블로그 포스트를 참조하십시오.

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-temporary-and-permanent-redirects-with-nginx