웹사이트 검색

Ubuntu 14.04에서 Nginx를 사용하여 www를 www가 아닌 것으로 리디렉션하는 방법


소개

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

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

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

이 자습서에서는 Ubuntu 14.04에서 Nginx를 사용하여 301 리디렉션을 구성합니다. Nginx 대신 Apache를 실행 중인 경우 Ubuntu 14.04에서 Apache를 사용하여 www를 Non-www로 리디렉션하는 방법 자습서를 대신 참조하세요.

전제 조건

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

  • Nginx를 실행하는 서버의 수퍼유저 권한(sudo 그룹의 사용자). 해당 설정이 아직 없는 경우 Ubuntu 14.04를 사용한 초기 서버 설정 자습서를 따르십시오.
  • 웹사이트를 제공하도록 Nginx가 설치 및 구성되었습니다. 이를 수행하려면 Ubuntu 14.04 LTS에서 Nginx 서버 블록(가상 호스트)을 설정하는 방법 튜토리얼을 따르십시오.
  • 등록된 도메인 이름. 아직 없는 경우 이 문서에서 방법을 보여주는 문서에서 무료로 얻을 수 있습니다.

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

1단계 - DNS 레코드 구성

먼저 www.my-website.commy-website.com 모두 Nginx를 실행하는 서버를 가리켜야 합니다. (튜토리얼의 나머지 부분에서는 귀하의 도메인이 my-website.com이라고 가정합니다. 아래에 표시되는 모든 도메인을 귀하의 도메인으로 교체하십시오.) Nginx 서버의 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에 대한 웹 요청이 Nginx 서버에 도달해야 합니다. 이제 서버를 구성해 보겠습니다.

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

전제 조건에 설명된 대로 Nginx에서 웹 사이트를 이미 구성해야 합니다. 사이트의 server 블록이 기본 /etc/nginx/sites-enabled/default 파일 또는 자체 파일에 나타나는지는 중요하지 않습니다. 중요한 것은 server_name 지시문이 my-website.com 및/또는 www로 설정된 일부 server 블록이 구성되어 있다는 것입니다. .my-website.com. server_name에 하나 또는 두 개의 이름이 포함되어 있든 이제 사이트를 호스팅하는 유일한 이름으로 사용할 이름을 결정할 때입니다.

웹사이트 구성이 포함된 파일(예: /etc/nginx/sites-available/my-website.com.conf)을 nano 또는 선호하는 편집기에서 열고 찾기 server_name 지시문:

  1. sudo nano /etc/nginx/sites-available/my-website.com.conf
server {
    . . .
    server_name my-website.com www.my-website.com
    . . .
}

www.my-website.commy-website.com으로 리디렉션하려면 다음에서 www.my-website.com을 제거하십시오. server_name 줄을 입력하고 파일을 저장하고 종료합니다. (my-website.comwww.my-website.com으로 리디렉션하려면 대신 my-website.com을 제거하세요.)

그런 다음 /etc/nginx/sites-available/www.my-website.com.conf(또는 /etc/nginx/sites-available/my- website.com.conf(리디렉션하는 이름인 경우). 원하는 대로 파일 이름을 지정하지만 모든 Nginx 구성 파일과 마찬가지로 파일 이름은 .conf로 끝나야 합니다.

  1. sudo nano /etc/nginx/sites-available/www.my-website.com.conf

다음 server 블록을 파일에 추가하고 my-website.com을 자신의 도메인 이름으로 바꿉니다.

server {
    server_name www.my-website.com;
    return 301 $scheme://my-website.com$request_uri;
}

대신 my-website.com을 www 하위 도메인으로 리디렉션하는 경우 my-website.comserver_name에만 입력하고 >www.my-website.com을 다음 줄의 URL에 입력합니다.

완료되면 저장하고 종료하십시오. 그런 다음 /etc/nginx/sites-enabled에서 이 새 파일에 대한 심볼릭 링크를 만들어 Nginx가 다시 시작한 후 선택하도록 합니다.

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

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

참고: 위의 server 블록에는 listen 지시문이 포함되어 있지 않습니다. 이 자습서에서 언급한 것처럼 listen 지시문이 없는 모든 server 블록은 0.0.0.0:80(모든 인터페이스의 포트 80)에서 수신 대기하므로 괜찮습니다. 그러나 Nginx 서버에 여러 IP 주소가 있거나 사이트가 80 이외의 포트에서 수신하는 경우 특정 IP 주소와 포트를 철자하는 listen 지시문을 추가해야 할 수 있습니다. 사이트의 기본 server 블록이 사용하는 것과 동일한 listen 값을 사용하세요.

변경 사항을 적용하기 전에 Nginx 구성에 오류가 없는지 확인하십시오.

  1. sudo nginx -t

구문 오류를 범하지 않는 한(예: 세미콜론을 잊어버린 경우) 구성은 정상이어야 합니다.

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

이제 Nginx를 다시 시작하여 새 리디렉션 규칙을 적용합니다.

  1. sudo service nginx restart

브라우저에서 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 Server: nginx/1.20.1 Date: Thu, 08 Dec 2022 19:24:44 GMT Content-Type: text/html Content-Length: 169 Connection: keep-alive Location: http://my-website.com HTTP/1.1 200 OK Server: nginx/1.20.1 Date: Thu, 08 Dec 2022 19:24:44 GMT Content-Type: text/html Content-Length: 57 Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT Connection: keep-alive ETag: "63892671-39" Accept-Ranges: bytes

http://www.my-website.com에 대한 원래 요청에 대한 301(영구 이동) 응답에서 마지막 헤더인 Location: http://my-website를 확인하십시오. com. 두 번째 응답은 curlhttp://my-website.com에 대한 후속 요청에서 나온 것이며 웹사이트가 정상이면 서버가 200( 좋아요).

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

결론

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

Nginx가 주어진 요청을 처리할 server 블록을 결정하는 방법에 대해 더 알고 싶으십니까? Nginx 서버 및 위치 블록 선택 알고리즘 이해 가이드를 확인하세요.