웹사이트 검색

CentOS 7에서 Apache를 사용하여 www를 www가 아닌 것으로 리디렉션하는 방법


소개

많은 웹 개발자는 사용자가 www 하위 도메인과 루트(www가 아닌) 도메인을 통해 웹 사이트나 애플리케이션에 액세스할 수 있도록 허용해야 합니다. 즉, 사용자는 www.my-website.commy-website.com을 방문할 때 동일한 경험을 해야 합니다. 이를 설정하는 방법에는 여러 가지가 있지만 가장 SEO 친화적인 솔루션은 선호하는 도메인(하위 도메인 또는 루트 도메인)을 선택하고 웹 서버가 다른 도메인을 방문하는 사용자를 선호하는 도메인으로 리디렉션하도록 하는 것입니다.

많은 종류의 HTTP 리디렉션이 있지만 이 시나리오에서는 클라이언트에게 \요청한 웹 사이트가 다른 URL로 영구적으로 이동했습니다. 대신 이동하십시오.\라고 알리는 301 리디렉션을 사용하는 것이 가장 좋습니다. 브라우저가 서버에서 HTTP 301 응답 코드를 수신하면 서버에서 제공한 새 URL로 두 번째 요청을 보내고 사용자는 웹 사이트가 표시되며 아마도 리디렉션되었음을 알지 못할 것입니다.

두 도메인 이름에 대한 요청에 대해 동일한 웹 사이트를 제공하도록 웹 서버를 구성하지 않는 이유는 무엇입니까? 더 쉬워 보일 수 있지만 301 리디렉션의 SEO 이점을 제공하지는 않습니다. 영구 리디렉션은 검색 엔진 크롤러에게 귀하의 웹사이트에 대한 하나의 표준 위치가 있음을 알려주고 이는 해당 URL의 검색 순위를 향상시킵니다.

이 자습서에서는 CentOS 7에서 Apache를 사용하여 301 리디렉션을 구성합니다. Apache 대신 Nginx를 실행하는 경우 대신 이 자습서를 참조하십시오. CentOS 7에서 Nginx를 사용하여 www를 Non-www로 리디렉션하는 방법

전제 조건

이 자습서를 완료하려면 먼저 다음이 필요합니다.

  • Apache를 실행하는 서버에 대한 수퍼유저 권한. 해당 설정이 아직 없는 경우 CentOS 7 가이드로 초기 서버 설정을 따르세요.
  • 웹사이트를 제공하도록 Apache가 설치 및 구성되었습니다. 이를 수행하려면 CentOS 7에 Apache 웹 서버를 설치하는 방법 튜토리얼을 따르십시오.
  • 등록된 도메인 이름. 아직 없는 경우 이 문서에서 방법을 보여주는 문서에서 무료로 얻을 수 있습니다.

DNS 레코드를 구성하여 시작하겠습니다.

1단계 - DNS 레코드 구성

먼저 www.my-website.commy-website.com이 모두 Apache를 실행하는 서버를 가리키도록 해야 합니다. (튜토리얼의 나머지 부분에서는 귀하의 도메인이 my-website.com이라고 가정합니다. 아래에 표시되는 모든 도메인을 귀하의 도메인으로 교체하십시오.) Apache 서버의 IP 주소를 가리킵니다.

DNS 공급자의 웹 콘솔을 엽니다. 이 튜토리얼은 DigitalOcean DNS를 사용합니다.

도메인 추가 양식에서 텍스트 필드에 등록된 도메인 이름을 입력하고 도메인 추가를 클릭합니다. 그러면 도메인에 대한 레코드를 보고, 추가하고, 삭제할 수 있는 새 도메인의 페이지가 나타납니다.

Create new record에서 HOSTNAME 텍스트 필드에 "@”를 입력합니다. 이것은 일반 my-website.com에 대한 레코드인 루트 도메인 이름에 대한 레코드를 추가하고 있음을 나타내는 특수 문자입니다 WILL DIRECT TO 텍스트 필드에 서버의 공개 IPv4 주소를 입력하고 레코드 생성을 클릭합니다.(TTL을 변경할 필요가 없습니다.)

두 번째 DNS 레코드의 경우 A 레코드 대신 CNAME 레코드를 사용할 수 있습니다. CNAME 레코드는 IP 주소 대신 다른 이름을 가리키는 별칭입니다. www.my-website.commy-website.com으로 안내하는 CNAME을 만들 수 있으며 www 하위 도메인에 대한 모든 HTTP 요청이 서버로 가는 길을 찾을 것입니다. 루트 도메인에 대한 A 레코드를 방금 만들었기 때문입니다. 하지만 간단하게 하려면 HOSTNAME 필드에 "www\를 입력하고 WILL DIRECT TO 필드에 서버의 공용 IP 주소를 입력하여 첫 번째 레코드와 같은 또 다른 A 레코드를 만드십시오.

두 레코드를 모두 만들었으면 다음과 같아야 합니다.

두 개의 레코드가 있으면 my-website.comwww.my-website.com에 대한 웹 요청이 Apache 서버에 도달해야 합니다. 이제 서버를 구성해 보겠습니다.

2단계 - Apache에서 리디렉션 구성

Apache 웹 서버는 리디렉션을 구성하는 데 도움이 되는 두 가지 모듈인 mod_aliasmod_rewrite를 제공합니다. mod_rewrite가 더 강력하지만 mod_alias는 이해하고 사용하기가 더 간단합니다. 예를 들어 특정 쿼리 문자열 또는 HTTP 헤더가 포함된 요청을 리디렉션해야 하는 경우 mod_rewrite를 사용해야 합니다. 많은 사람들이 mod_alias에는 없는 정규식 일치 기능을 위해 mod_rewrite를 선택합니다. 그러나 www.my-website.com에 대한 모든 요청을 my-website.com으로 리디렉션하는 간단한 경우에는 mod_alias가 적합합니다. (Apache 자체는 가능하면 mod_alias를 선택할 것을 권장합니다. 불필요할 때 mod_rewrite를 선택하면 "혼란스럽고 깨지기 쉬우며 유지 관리하기 어려운 구성이 생깁니다\라고 말합니다.)

이 모듈은 CentOS 7에서 기본적으로 활성화되어야 하지만 다시 확인하려면 다음 명령을 실행하십시오.

  1. httpd -M | grep alias_module

alias_module (shared)이 출력에 나타나면 모듈이 이미 활성화된 것입니다. 그렇지 않은 경우 다음 줄을 /etc/httpd/conf.modules.d/00-base.conf에 추가하여 활성화합니다.

  1. echo “LoadModule alias_module modules/mod_alias.so” | sudo tee -a /etc/httpd/conf.modules.d/00-base.conf

mod_alias를 활성화하면 Redirect, RedirectMatchmod_alias 문서에 나열된 다른 지시어를 사용할 수 있습니다. 아파치 구성.

이제 VirtualHost를 구성하겠습니다.

사전 요구 사항에 설명된 대로 Apache에서 웹 사이트를 이미 구성해야 합니다. 기본 Apache 구성 파일(/etc/httpd/conf/httpd.conf) 또는 자체 파일(예: /etc/httpd/conf.d/)에서 구성할 수 있습니다. my-website.com.conf). 전제 조건에 링크된 Apache 설치 안내서를 사용하여 VirtualHost를 구성한 경우 /etc/httpd/sites-available/my-website와 같은 파일에 있을 수 있습니다. com.conf. 기본 사이트가 구성되어 있는 곳마다 vi 또는 선호하는 편집기(원하는 경우 yum install nano)에서 해당 파일을 엽니다.

  1. sudo vi /etc/httpd/conf/httpd.conf

VirtualHost에 설정된 ServerAlias 지시문을 찾습니다. ServerAliaswww.my-website.com으로 설정된 줄을 찾으면 해당 줄을 제거합니다. (또는 해당 줄에 쉼표로 구분된 목록에 많은 별칭이 포함되어 있는 경우 목록에서 www.my-website.com만 제거하십시오.) 이 별칭을 제거해야 합니다. ServerNameRedirect만 포함하는 하위 도메인에 대해 별도의 VirtualHost를 생성할 것이기 때문입니다. 사이트의 기본 VirtualHost는 더 이상 www.my-website.com에 대한 요청을 처리하지 않습니다.

이제 별도의 파일(예: /etc/httpd/conf.d/www.my-website.com.conf)에 VirtualHost를 만듭니다. :

  1. sudo vi /etc/httpd/conf.d/www.my-website.com.conf

다음 콘텐츠를 파일에 붙여넣고 my-website.com을 자신의 도메인 이름으로 바꿉니다.

<VirtualHost *:80>
    ServerName www.my-website.com
    Redirect permanent / http://my-website.com/
</VirtualHost>

완료되면 저장하고 종료하십시오. 이 파일을 /etc/httpd/sites-available에 만든 경우 Apache 설치 가이드에 따라 /etc/httpd/sites-enabled/에 파일에 대한 심볼릭 링크를 만듭니다:

  1. sudo ln -s /etc/httpd/sites-available/www.my-website.com.conf /etc/httpd/sites-enabled/

이 새로운 VirtualHostwww.my-website.com을 요청하는 모든 클라이언트에게 301 리디렉션을 다시 보내도록 Apache를 구성하고 my-website.com을 방문하도록 지시합니다. 대신. 리디렉션은 요청 URI를 유지하므로 http://www.my-website.com/login.php에 대한 요청이 http://my-website.com으로 리디렉션됩니다. /login.php.

참고: 사이트의 기본 VirtualHost에 와일드카드 하위 도메인(*.my-website.com)이 있는 ServerAlias가 포함된 경우 이를 제거하고 리디렉션하려는 모든 하위 도메인에 대해 방금 만든 것과 같은 새 VirtualHost를 만듭니다. 모든 하위 도메인을 리디렉션하지 않고 기본 VirtualHost에서 일부를 계속 제공해야 하는 경우 각 하위 도메인을 별칭으로 명시적으로 지정하는 것이 가장 좋습니다. 특히 지금은 하나의 하위 도메인이 있습니다. 그 요청이 주 VirtualHost에 부주의하게 일치되는 것을 원하지 않습니다. (각 하위 도메인의 이름을 자체 ServerAlias 줄에 지정하거나 하나의 ServerAlias 줄에 쉼표로 구분된 목록으로 모두 이름을 지정할 수 있습니다.)

*.my-website.com에 대한 ServerAlias를 유지해야 하는 경우 Apache가 기본 호스트 전에 새 www VirtualHost를 로드하는지 확인해야 합니다. 하나는 기본 항목이 먼저 로드되면 해당 이름이 와일드카드 별칭과 일치하므로 Apache가 이를 사용하여 www.my-website.com에 대한 요청을 처리하기 때문입니다. 다음 명령을 실행하여 Apache를 다시 시작한 후 어떤 VirtualHost가 먼저 로드되는지 확인합니다.

  1. httpd -S

namevhost my-website.comnamevhost www.my-website.com이 포함된 줄을 찾습니다. www 라인이 먼저 나타나면 모든 준비가 완료된 것입니다. 그러나 루트 도메인에 대한 VirtualHost가 먼저 나타나면 Apache가 www를 먼저 로드하도록 하는 몇 가지 방법이 있습니다.

  1. 기본 VirtualHostInclude를 사용하는 파일(예: /etc/httpd/conf/httpd.conf)에 포함된 경우 또는 IncludeOptional 지시문을 사용하여 새 www VirtualHost가 포함된 디렉토리를 포함하고 해당 Include 행을 기본 VirtualHost 위로 이동하십시오. 파일 내에서.
  2. 기본 VirtualHost 및 새 www VirtualHost 파일이 동일한 디렉토리(예: /etc/httpd/conf.d/), 파일 이름을 바꾸고 파일 이름 앞에 숫자를 추가하여 Apache가 www를 먼저 로드하도록 할 수 있습니다. www VirtualHost의 파일 이름 앞에 01-를 추가합니다(예: /etc/httpd/conf.d/01-www.my-website.com. conf) 및 02-를 기본 VirtualHost의 파일 이름(예: /etc/httpd/conf.d/02-my- website.com.conf).

httpd -S를 다시 실행하여 www VirtualHost가 먼저 나타나도록 합니다.

준비가 되면 Apache를 다시 시작합니다.

  1. sudo systemctl restart httpd

브라우저에서 www.my-website.com을 방문하기 전에 서버 또는 로컬 시스템에서 curl을 사용하여 요청하십시오(curl인 경우). 로컬에 설치됨):

  1. curl -IL http://www.my-website.com

-I 플래그는 서버 응답의 헤더만 표시하도록 curl에 지시합니다. -L 플래그는 이번에는 Location에 제공된 URL에 대한 두 번째 요청을 자동으로 만들어 서버의 모든 리디렉션을 준수하도록 curl에 지시합니다. 헤더(웹 브라우저가 하는 것처럼). 301 리디렉션을 구성했으므로 curl은 두 개의 요청을 만들어야 하며 두 응답의 헤더만 표시되어야 합니다.

Output
HTTP/1.1 301 Moved Permanently Date: Tue, 03 Jan 2023 19:24:44 GMT Server: Apache/2.4.53 Location: http://my-website.com/ Content-Type: text/html; charset=iso-8859-1 HTTP/1.1 200 OK Date: Tue, 03 Jan 2023 19:24:44 GMT Server: Apache/2.4.53 Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT ETag: "39-5eecb7ed6bfc9" Accept-Ranges: bytes Content-Length: 57 Content-Type: text/html; charset=UTF-8

http://www.my-website.com에 대한 원래 요청에 대한 301(영구 이동) 응답에서 마지막에서 두 번째 헤더인 Location: http://my-에 주목하십시오. website.com. 두 번째 응답은 해당 Location 헤더에 제공된 URL에 대한 curl의 후속 요청에서 발생하며 웹사이트가 정상이면 서버가 200(OK)으로 응답해야 합니다. .

마지막으로 웹 브라우저에서 http://www.my-website.com을 방문하십시오. 깜박이면 리디렉션을 놓치게 됩니다. 귀하의 웹사이트는 평소와 같이 나타나야 하지만 주소 표시줄을 다시 살펴보고 URL에서 "www\가 누락된 것을 확인하십시오. 대부분의 사용자는 이를 인지하지 못하므로 http://my-website.com.

결론

이 자습서에서는 웹 사이트에 대해 두 개의 DNS 레코드를 추가하고 보조 도메인을 기본 도메인으로 리디렉션하도록 Apache를 구성했습니다. 이제 두 도메인을 통해 웹사이트에 연결할 수 있습니다. 이 튜토리얼을 읽기 전에 이미 그랬을 수도 있습니다. 아마도 두 도메인 이름에서 직접 서비스를 제공했을 것입니다. 그러나 Apache 구성의 네 줄만 더 추가하면 검색 엔진의 눈에 웹 사이트의 위상이 향상되어 인터넷을 통해 더 많은 사용자에게 웹 사이트를 노출할 수 있습니다.

더 강력한 mod_rewrite 모듈이 궁금하십니까? Ubuntu 22.04에서 Apache용 mod_rewrite로 URL을 재작성하는 방법 튜토리얼을 확인하세요.