웹사이트 검색

Apache 및 Nginx로 임시 및 영구 리디렉션을 만드는 방법


소개

HTTP 리디렉션 또는 URL 리디렉션은 한 도메인이나 주소를 다른 도메인이나 주소로 지정하는 기술입니다. 리디렉션에는 많은 용도가 있으며 고려해야 할 몇 가지 다른 종류의 리디렉션이 있습니다. 사이트에서 한 주소를 다른 주소로 보내달라고 요청하는 사람이 필요할 때마다 리디렉션이 사용됩니다.

콘텐츠를 생성하고 서버를 관리할 때 한 위치에서 다른 위치로 트래픽을 리디렉션해야 하는 경우가 종종 있습니다. 이 가이드에서는 이러한 기술의 다양한 사용 사례와 가장 일반적인 두 웹 서버인 Apache 및 Nginx에서 이를 수행하는 방법에 대해 설명합니다.

전제 조건

  • 루트가 아닌 sudo 사용자 및 방화벽을 포함하여 Ubuntu 20.04 초기 서버 설정 가이드에 따라 Ubuntu 20.04 서버 설정.\n
  • Ubuntu 20.04에 Nginx를 설치하는 방법에 따라 서버에 Apache 또는 Nginx를 설치할 수 있습니다. Apache와 Nginx를 동시에 설치할 수 있고 많은 스택이 한 번에 두 서버를 모두 사용하지만 기본적으로 기본 HTTP/HTTPS 포트 80443에서 충돌합니다. 이므로 재고 서버 구성에서 이 자습서를 따르는 경우 한 번에 하나만 설치해야 합니다.\n

1단계 - 리디렉션 방법 검토

리디렉션에 대한 많은 사용 사례가 있습니다. 웹사이트를 구축했고 도메인을 변경하려는 경우 이전 도메인을 그냥 버리지 않는 것이 가장 좋습니다. 새 위치를 찾는 방법에 대한 브라우저에 대한 지침 없이 콘텐츠가 사라지면 인터넷의 다른 페이지에 있는 사이트에 대한 북마크 및 링크가 끊어집니다. 리디렉션하지 않고 도메인을 변경하면 사이트에서 이전 방문자의 트래픽을 잃고 구축한 모든 신뢰도를 잃게 됩니다.

사용자가 기본 도메인과 유사한 주소를 입력하는 이점을 얻기 위해 여러 변형 이름을 등록하는 것이 도움이 되는 경우가 많습니다. 예를 들어 myspiders.com이라는 도메인이 있는 경우 myspiders.netmyspiders.org의 도메인 이름을 구입하고 둘 다 myspiders.com 사이트로 리디렉션합니다. 이렇게 하면 잘못된 주소로 사이트에 접속하려는 사용자를 잡을 수 있습니다. 또한 다른 사이트가 유사한 도메인을 사용하여 귀하의 웹 존재로부터 이익을 얻는 것을 방지할 수 있습니다.

경우에 따라 이미 게시되어 사이트에서 트래픽을 받은 페이지의 이름을 변경해야 합니다. 일반적으로 이로 인해 404 Not Found 오류가 발생하거나 보안 설정에 따라 다른 오류가 발생할 수 있습니다. 방문자가 액세스하려고 했던 올바른 콘텐츠가 포함된 다른 페이지로 방문자를 유도하여 이를 방지할 수 있습니다. 몇 가지 다른 종류의 URL 리디렉션이 있으며 각각은 클라이언트 브라우저에 대해 다른 의미를 갖습니다. 가장 일반적인 두 가지 유형은 302 임시 리디렉션과 301 영구 리디렉션입니다.

임시 리디렉션

임시 리디렉션은 특정 URL에 대한 웹 콘텐츠를 일시적으로 다른 위치에서 제공해야 하는 경우에 유용합니다. 예를 들어, 사이트 유지 관리를 수행하는 경우 방문자에게 곧 돌아올 것임을 알리기 위해 설명 페이지로 도메인의 모든 페이지를 일시적으로 리디렉션해야 할 수 있습니다.

임시 리디렉션은 콘텐츠가 일시적으로 다른 위치에 있지만 원래 URL에 대한 액세스를 계속 시도해야 함을 브라우저에 알립니다.

영구 리디렉션

영구 리디렉션은 콘텐츠가 새 위치로 영원히 이동된 경우에 유용합니다.

이것은 도메인을 변경해야 하거나 다른 이유로 URL을 변경해야 하고 이전 위치가 더 이상 사용되지 않을 때 유용합니다. 이 리디렉션은 브라우저에 더 이상 이전 URL을 요청하지 않아야 하며 새 URL을 가리키도록 정보를 업데이트해야 함을 알립니다.

SSL 강제

리디렉션의 일반적인 용도는 모든 사이트 트래픽이 표준 HTTP 대신 SSL을 사용하도록 지시하는 것입니다.

리디렉션을 사용하면 http://www.mysite.com에 대한 모든 요청을 https:/로 리디렉션할 수 있습니다. /www.mysite.com. LetsEncrypt를 사용하여 HTTPS를 제공하면 이와 같은 리디렉션 구성이 자동으로 생성됩니다.

이 자습서의 다음 부분에서는 Apache 웹 서버를 사용하여 리디렉션에 대한 몇 가지 예제 구성을 배웁니다. 대신 Nginx를 사용 중이고 Apache를 사용할 계획이 없다면 3단계로 건너뛸 수 있습니다.

2단계 - Apache에서 리디렉션하는 방법

Apache는 몇 가지 다른 도구를 사용하여 리디렉션할 수 있습니다. mod_alias 모듈의 도구를 사용하여 간단한 리디렉션을 구현할 수 있으며 mod_rewrite를 사용하여 더 광범위한 리디렉션을 만들 수 있습니다.

리디렉션 지시문 사용

Apache에서는 기본적으로 활성화되는 mod_alias 모듈에 포함된 "리디렉션\ 지시어를 사용하여 단일 페이지 리디렉션을 구현할 수 있습니다. 이 지시어는 이전 URL과 새 URL.

Apache 서버 블록은 /etc/apache2/apache2.conf의 기본 Apache 설정 파일에 저장할 수 있지만 /etc/apache2/sites-에 새 파일을 생성하면 유지 관리가 더 쉽습니다. available/ 각 구성에 대해. Apache의 규칙은 sites-available/에 있는 파일에서 sites-available/이라는 다른 폴더로의 심볼릭 링크(바로 가기와 같은)를 생성하여 활성화 또는 비활성화하는 것입니다. 기본적으로 Apache는 /etc/apache2/sites-available/000-default.conf에 단일 사이트별 구성으로 설치되며 에 연결되어 활성화됩니다. >/etc/apache2/sites-enabled/000-default.conf.

nano 또는 선호하는 텍스트 편집기를 사용하여 해당 구성을 열 수 있습니다.

  1. sudo nano /etc/apache2/sites-available/000-default.conf

기본적으로 포트 80에서 수신하고 시스템의 /var/www/html에 있는 index.html 파일을 찾는 표준 웹 서버 구성이 포함되어 있습니다.

<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
</VirtualHost>

대신 domain1.com에 대한 요청을 domain2.com으로 리디렉션해야 하는 경우 이 서버 블록에서 기존 지시문을 제거하고 영구 리디렉션으로 바꿀 수 있습니다.

<VirtualHost *:80>
	ServerName www.domain1.com
	Redirect / http://www.domain2.com
</VirtualHost>

<VirtualHost *:80>
	ServerName www.domain2.com
	. . .
	. . .
</VirtualHost>

파일을 저장하고 닫습니다. nano를 사용하는 경우 "Ctrl+X\를 누른 다음 프롬프트가 표시되면 "Y\를 누른 다음 Enter를 누르십시오.

이 리디렉션은 www.domain1.com에 대한 모든 요청을 www.domain2.com으로 보내도록 브라우저에 지시합니다. 이것은 전체 사이트가 아닌 단일 페이지에만 적용됩니다.

기본적으로 Redirect 지시문은 302 또는 임시 리디렉션을 설정합니다. 영구 리디렉션을 생성하려면 다음 두 가지 방법 중 하나로 수행할 수 있습니다.

<VirtualHost *:80>
	ServerName www.domain1.com
Redirect 301 /oldlocation http://www.domain2.com/newlocation
</VirtualHost>
<VirtualHost *:80>
	ServerName www.domain1.com
Redirect permanent /oldlocation http://www.domain2.com/newlocation
</VirtualHost>

RedirectMatch 지시문 사용

단일 페이지 이상을 리디렉션하려면 RedirectMatch 지시문을 사용하면 정규식을 사용하여 디렉터리 일치 패턴을 지정할 수 있습니다.

이렇게 하면 단일 파일이 아닌 전체 디렉터리를 리디렉션할 수 있습니다.

RedirectMatch는 괄호 안의 패턴을 일치시킨 다음 "$1\을 사용하여 리디렉션에서 일치하는 텍스트를 참조합니다. 여기서 1은 첫 번째 텍스트 그룹입니다. 후속 그룹에는 순차적으로 번호가 부여됩니다.

예를 들어 /images 디렉토리 내의 모든 요청을 images.example.com이라는 하위 도메인과 일치시키려면 다음을 사용할 수 있습니다.

<VirtualHost *:80>
…
RedirectMatch ^/images/(.*)$ http://images.example.com/$1
…
</VirtualHost>

Redirect 지시문과 마찬가지로 URL 위치 규칙 앞에 리디렉션 코드를 추가하여 리디렉션 유형을 지정할 수 있습니다.

변경 사항을 적용하려면 Apache를 다시 시작해야 합니다. 최신 Ubuntu 서버에서는 systemctl을 사용하여 이 작업을 수행할 수 있습니다.

  1. sudo systemctl restart apache2

mod_rewrite를 사용하여 리디렉션

리디렉션 규칙을 만드는 가장 유연하지만 복잡한 방법은 mod_rewrite라는 모듈을 사용하는 것입니다. mod_rewrite 작업에 대한 자세한 내용은 Apache용 mod_rewrite로 URL을 다시 쓰는 방법을 참조하세요.

이 자습서의 다음 부분에서는 Nginx 웹 서버를 사용하여 리디렉션에 대한 몇 가지 예제 구성을 배웁니다. Apache를 이미 설치하고 구성한 경우 동일한 서버에서 Nginx에 대한 구성 단계를 수행하기 전에 포트 80을 비워야 합니다. apt remove를 사용하여 Apache를 일시적으로 제거하여 나중에 다시 설치하려는 경우 구성 파일을 유지하거나 80 이외의 포트에서 연결을 수신하도록 Apache의 구성을 변경하여 이를 수행할 수 있습니다. 기본적으로 Apache, Nginx 및 모든 HTTP 연결에서 사용됩니다.

3단계 – Nginx에서 리디렉션하는 방법

Nginx의 리디렉션은 핵심 기능이며 일반적인 Nginx 지시문을 사용합니다. 대부분의 경우 각 URL에 대해 새 서버 블록을 생성하여 리디렉션을 구현할 수 있습니다.

Nginx 서버 블록은 /etc/nginx/nginx.conf의 기본 Nginx 설정 파일에 저장할 수 있지만 /etc/nginx/sites-에 새 파일을 생성하면 유지 관리가 더 쉽습니다. available/ 각 구성에 대해. Nginx의 규칙은 활성화 또는 비활성화를 결정할 때 sites-available/에 있는 파일에서 sites-available/라는 다른 폴더로 바로 가기와 같은 심볼릭 링크를 생성하는 것입니다. 기본적으로 Nginx는 활성화되고 /etc/에 연결된 /etc/nginx/sites-available/default에 단일 사이트별 구성으로 설치됩니다. nginx/sites-enabled/default.

nano 또는 선호하는 텍스트 편집기를 사용하여 해당 구성을 열 수 있습니다.

  1. sudo nano /etc/nginx/sites-available/default

기본적으로 포트 80에서 수신하고 시스템의 /var/www/html에 있는 index.html 파일을 찾는 표준 웹 서버 구성이 포함되어 있습니다.

server {
        listen 80 default_server;
        listen [::]:80 default_server;
…
        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
…
}

대신 domain1.com에 대한 요청을 domain2.com으로 리디렉션해야 하는 경우 이 서버 블록에서 기존 지시문을 제거하고 영구 리디렉션으로 바꿀 수 있습니다.

server {
	listen 80;
	server_name domain1.com;
	return 301 $scheme://domain2.com$request_uri;
}

파일을 저장하고 닫습니다. nano를 사용하는 경우 "Ctrl+X\를 누른 다음 프롬프트가 표시되면 "Y\를 누른 다음 Enter를 누르십시오.

return 지시문은 URL 대체를 실행한 다음 지정된 상태 코드와 리디렉션 URL을 반환합니다.

이 경우 $scheme 변수를 사용하여 원래 요청(http 또는 https)에 사용된 체계를 사용합니다. 그런 다음 301 영구 리디렉션 코드와 새로 형성된 URL을 반환합니다.

별도의 하위 도메인으로 폴더 리디렉션을 처리하기 위해 rewrite 지시문을 사용하여 Apache 폴더 리디렉션과 유사한 작업을 수행할 수 있습니다. 이 지시문은 서버 블록에 있을 때 images 디렉토리 내부의 요청에 대해 하위 도메인 images.example.com으로 임시 리디렉션을 발행합니다.

server {
…
rewrite ^/images/(.*)$ http://images.example.com/$1 redirect;
…
}

영구 리디렉션의 경우 문 끝에서 redirectpermanent로 변경할 수 있습니다.

변경 사항을 적용하려면 Nginx를 다시 시작해야 합니다. 최신 Ubuntu 서버에서는 systemctl을 사용하여 이 작업을 수행할 수 있습니다.

  1. sudo systemctl restart nginx

다른 많은 방법으로 이 구성을 확장할 수 있습니다. 원하는 서버 구성을 생성하기 위해 이러한 Nginx의 기본 사항을 사용하면 스택을 매우 간결하게 유지할 수 있을 뿐만 아니라 서버 트래픽과 관련된 잠재적인 엣지 케이스를 간결하게 문서화하고 처리할 수 있습니다.

결론

이 자습서에서는 널리 사용되는 웹 서버에 대한 임시 및 영구 리디렉션을 모두 구성하는 방법을 배웠습니다. 임시 리디렉션을 부적절하게 사용하면 검색 순위가 손상될 수 있으므로 올바른 리디렉션 유형을 사용해야 합니다.

리디렉션을 올바르게 사용하면 필요에 따라 사이트 구조를 수정하면서 현재 웹 존재를 활용할 수 있습니다. Nginx에서 리디렉션 구성에 대해 자세히 알아보려면 Nginx로 임시 및 영구 리디렉션을 만드는 방법을 참조하세요.