Ubuntu 14.04에서 Nginx를 사용하여 www를 www가 아닌 것으로 리디렉션하는 방법
소개
많은 웹 개발자는 사용자가 www 하위 도메인과 루트(www가 아닌) 도메인을 통해 웹 사이트나 애플리케이션에 액세스할 수 있도록 허용해야 합니다. 즉, 사용자는 www.my-website.com
및 my-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.com
과 my-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.com
을 my-website.com
으로 안내하는 CNAME을 만들 수 있으며 www 하위 도메인에 대한 모든 HTTP 요청이 서버로 가는 길을 찾을 것입니다. 루트 도메인에 대한 A 레코드를 방금 만들었기 때문입니다. 하지만 간단하게 하려면 HOSTNAME 필드에 "www\를 입력하고 WILL DIRECT TO 필드에 서버의 공용 IP 주소를 입력하여 첫 번째 레코드와 같은 또 다른 A 레코드를 만드십시오.
두 레코드를 모두 만들었으면 다음과 같아야 합니다.

두 개의 레코드가 있으면 my-website.com
및 www.my-website.com
에 대한 웹 요청이 Nginx 서버에 도달해야 합니다. 이제 서버를 구성해 보겠습니다.
2단계 - Nginx에서 리디렉션 구성
전제 조건에 설명된 대로 Nginx에서 웹 사이트를 이미 구성해야 합니다. 사이트의 server
블록이 기본 /etc/nginx/sites-enabled/default
파일 또는 자체 파일에 나타나는지는 중요하지 않습니다. 중요한 것은 server_name
지시문이 my-website.com
및/또는 www로 설정된 일부
. server
블록이 구성되어 있다는 것입니다. .my-website.comserver_name
에 하나 또는 두 개의 이름이 포함되어 있든 이제 사이트를 호스팅하는 유일한 이름으로 사용할 이름을 결정할 때입니다.
웹사이트 구성이 포함된 파일(예: /etc/nginx/sites-available/my-website.com.conf
)을 nano
또는 선호하는 편집기에서 열고 찾기 server_name
지시문:
- sudo nano /etc/nginx/sites-available/my-website.com.conf
server {
. . .
server_name my-website.com www.my-website.com
. . .
}
www.my-website.com
을 my-website.com
으로 리디렉션하려면 다음에서 www.my-website.com
을 제거하십시오. server_name
줄을 입력하고 파일을 저장하고 종료합니다. (my-website.com
을 www.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
로 끝나야 합니다.
- 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.com
을 server_name
에만 입력하고 >www.my-website.com
을 다음 줄의 URL에 입력합니다.
완료되면 저장하고 종료하십시오. 그런 다음 /etc/nginx/sites-enabled
에서 이 새 파일에 대한 심볼릭 링크를 만들어 Nginx가 다시 시작한 후 선택하도록 합니다.
- 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 구성에 오류가 없는지 확인하십시오.
- sudo nginx -t
구문 오류를 범하지 않는 한(예: 세미콜론을 잊어버린 경우) 구성은 정상이어야 합니다.
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
이제 Nginx를 다시 시작하여 새 리디렉션 규칙을 적용합니다.
- sudo service nginx restart
브라우저에서 www.my-website.com
을 방문하기 전에 서버 또는 로컬 시스템에서 curl
을 사용하여 요청하십시오(curl
인 경우). 로컬에 설치됨):
- curl -IL http://www.my-website.com
-I
플래그는 서버 응답의 헤더만 표시하도록 curl
에 지시합니다. -L
플래그는 이번에는 Location
에 제공된 URL에 대한 두 번째 요청을 자동으로 만들어 서버의 모든 리디렉션을 준수하도록 curl
에 지시합니다. 헤더(웹 브라우저가 하는 것처럼). 301 리디렉션을 구성했으므로 curl
은 두 개의 요청을 만들어야 하며 두 응답의 헤더만 표시되어야 합니다.
OutputHTTP/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
. 두 번째 응답은 curl
의 http://my-website.com
에 대한 후속 요청에서 나온 것이며 웹사이트가 정상이면 서버가 200( 좋아요).
마지막으로 웹 브라우저에서 http://www.my-website.com
을 방문하십시오. 깜박이면 리디렉션을 놓치게 됩니다. 귀하의 웹사이트는 평소와 같이 나타나야 하지만 주소 표시줄을 다시 살펴보고 URL에서 "www\가 누락된 것을 확인하십시오. 대부분의 사용자는 이를 인지하지 못하므로 http://my-website.com
.
결론
이 자습서에서는 웹 사이트에 대해 두 개의 DNS 레코드를 추가하고 보조 도메인을 기본 도메인으로 리디렉션하도록 Nginx를 구성했습니다. 이제 두 도메인을 통해 웹사이트에 연결할 수 있습니다. 이 튜토리얼을 읽기 전에 이미 그랬을 수도 있습니다. 아마도 두 도메인 이름에서 직접 서비스를 제공했을 것입니다. 그러나 Nginx 구성의 네 줄만 추가하면 검색 엔진의 눈에 웹 사이트의 위상이 향상되어 인터넷에서 더 많은 사용자에게 노출됩니다.
Nginx가 주어진 요청을 처리할 server
블록을 결정하는 방법에 대해 더 알고 싶으십니까? Nginx 서버 및 위치 블록 선택 알고리즘 이해 가이드를 확인하세요.