Trang chủHướng dẫnCách chuyển hướng www sang non-www với Nginx đơn giản và hiệu quả
Chuyên gia

Cách chuyển hướng www sang non-www với Nginx đơn giản và hiệu quả

CyStack blog 7 phút để đọc
CyStack blog01/08/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 7 minutes

Bài viết này sẽ hướng dẫn bạn cách chuyển hướng www sang non-www với Nginx – một thao tác đơn giản nhưng cực kỳ cần thiết để thống nhất URL, tối ưu công cụ tìm kiếm và tạo trải nghiệm người dùng nhất quán.

chuyển hướng www sang non-www với Nginx

Nhiều nhà phát triển web muốn cho phép người dùng truy cập trang web hoặc ứng dụng của họ qua cả subdomain www và root domain (non-www). Nghĩa là, người dùng sẽ có trải nghiệm tương tự khi truy cập www.my-website.commy-website.com.

Mặc dù có nhiều cách để thiết lập điều này, giải pháp thân thiện với SEO nhất là chọn domain bạn muốn ưu tiên – subdomain hay root domain – và sau đó thiết lập web server chuyển hướng người dùng truy cập domain còn lại sang domain ưu tiên.

Có nhiều loại chuyển hướng HTTP, nhưng trong trường hợp này, tốt nhất bạn nên sử dụng chuyển hướng 301 (301 redirect), loại chuyển hướng này thông báo cho khách hàng rằng: “Trang web bạn yêu cầu đã được chuyển vĩnh viễn sang URL khác. Hãy truy cập URL đó thay thế.” Khi trình duyệt nhận được mã phản hồi HTTP 301 từ server, nó sẽ gửi yêu cầu thứ hai đến URL mới do server cung cấp và người dùng sẽ thấy trang web, có thể họ sẽ không bao giờ nhận ra mình đã được chuyển hướng.

Tại sao không cấu hình web server để phục vụ cùng một website cho cả hai tên miền? Điều đó nghe có vẻ đơn giản hơn, nhưng nó không mang lại lợi thế SEO như 301 redirect. Một chuyển hướng vĩnh viễn thông báo cho công cụ tìm kiếm rằng có một vị trí chính thức (canonical location) duy nhất cho trang web của bạn, và điều này giúp cải thiện thứ hạng tìm kiếm của URL đó.

Trong hướng dẫn này, bạn sẽ cấu hình 301 redirect bằng Nginx trên Ubuntu 14.04. 

Điều kiện tiên quyết

Để hoàn thành hướng dẫn này, trước tiên bạn cần:

  • Quyền superuser (một người dùng trong nhóm sudo) trên server đang chạy Nginx.
  • Nginx đã được cài đặt và cấu hình để phục vụ trang web của bạn. Làm theo hướng dẫn này để thực hiện: Cách cài đặt Nginx trên Ubuntu 14.04.
  • Một tên miền đã đăng ký. Nếu bạn chưa có, bạn có thể nhận một tên miền miễn phí từ Freenom. Bạn có thể sử dụng bất kỳ nhà cung cấp DNS nào bạn thích (bao gồm cả registrar của bạn) để lưu trữ bản ghi domain của mình – chỉ cần đảm bảo trỏ registrar của bạn đến máy chủ tên của nhà cung cấp.

Hãy bắt đầu bằng cách cấu hình bản ghi DNS của bạn.

Cách chuyển hướng www sang non-www với Nginx

Bước 1 – Cấu hình bản ghi DNS

Đầu tiên, bạn cần trỏ cả www.my-website.commy-website.com đến server đang chạy Nginx của bạn. (Phần còn lại của hướng dẫn giả định domain của bạn là my-website.com. Hãy thay thế bằng domain của riêng bạn ở bất cứ đâu bạn nhìn thấy nó bên dưới.) Bạn sẽ làm điều này bằng cách tạo một bản ghi DNS A cho mỗi tên trỏ đến địa chỉ IP của server Nginx của bạn.

Mở bảng điều khiển web của nhà cung cấp DNS của bạn. Hướng dẫn này sử dụng DigitalOcean DNS.

Trong biểu mẫu Add a domain, nhập tên miền đã đăng ký của bạn vào trường văn bản và nhấp vào Add Domain. Thao tác này sẽ đưa bạn đến trang domain mới, nơi bạn có thể xem, thêm và xóa các bản ghi cho domain.

Dưới mục Create new record, nhập “@” vào trường văn bản HOSTNAME. Đây là một ký tự đặc biệt cho biết bạn đang thêm một bản ghi cho root domain name, một bản ghi cho my-website.com thuần túy. Trong trường văn bản WILL DIRECT TO, nhập địa chỉ IPv4 công khai của server của bạn và nhấp vào Create Record. (Không cần thay đổi TTL.)

Đối với bản ghi DNS thứ hai của bạn, bạn có thể sử dụng bản ghi CNAME thay vì bản ghi A. Một bản ghi CNAME là một alias trỏ đến một tên khác thay vì một địa chỉ IP. Bạn có thể tạo một CNAME chuyển hướng www.my-website.com đến my-website.com, và bất kỳ yêu cầu HTTP nào cho subdomain www sẽ tìm đến server của bạn vì bạn vừa tạo bản ghi A cho root domain. Nhưng để giữ mọi thứ đơn giản, chỉ cần tạo một bản ghi A khác giống như bản ghi đầu tiên, nhập “www” vào trường HOSTNAME và địa chỉ IP công khai của server vào trường WILL DIRECT TO.

Khi bạn đã tạo cả hai bản ghi, nó sẽ trông giống như thế này:

my website recs trên Ubuntu 14.04

Với hai bản ghi đã được thiết lập, các yêu cầu web cho cả my-website.comwww.my-website.com sẽ đến server Nginx của bạn. Bây giờ chúng ta hãy cấu hình server.

Bước 2 – Cấu hình chuyển hướng trong Nginx

Như đã nêu trong Điều kiện tiên quyết, bạn nên có trang web của mình đã được cấu hình trong Nginx. Không quan trọng liệu server block của trang web nằm trong tệp chính /etc/nginx/sites-enabled/default hay trong tệp riêng của nó. Điều quan trọng là bạn có một server block được cấu hình với chỉ thị server_name được đặt thành my-website.com và/hoặc www.my-website.com. Dù server_name của bạn chứa một hoặc cả hai tên, bây giờ là lúc quyết định tên nào bạn muốn là tên duy nhất để lưu trữ trang web.

Mở tệp chứa cấu hình trang web của bạn (ví dụ: /etc/nginx/sites-available/my-website.com.conf) trong nano hoặc trình chỉnh sửa yêu thích của bạn và tìm chỉ thị server_name:

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

Nếu bạn muốn chuyển hướng www.my-website.com đến my-website.com, hãy xóa www.my-website.com khỏi dòng server_name, sau đó lưu và thoát tệp. (Nếu bạn muốn chuyển hướng my-website.com đến www.my-website.com, hãy xóa my-website.com thay thế.)

Sau đó, tạo một tệp cấu hình Nginx mới có tên /etc/nginx/sites-available/www.my-website.com.conf (hoặc /etc/nginx/sites-available/my-website.com.conf, nếu đó là tên bạn đang chuyển hướng). Đặt tên tệp theo ý bạn, nhưng như với tất cả các tệp cấu hình Nginx, tên tệp phải kết thúc bằng .conf:

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

Thêm server block sau vào tệp, thay thế my-website.com bằng domain name của riêng bạn:

/etc/nginx/sites-available/www.my-website.com.conf
server {
    server_name www.my-website.com;
    return 301 $scheme://my-website.com$request_uri;
}

Nếu bạn đang chuyển hướng my-website.com sang subdomain www thay thế, hãy đặt my-website.com chỉ trong server_name, và www.my-website.com trong URL ở dòng tiếp theo.

Lưu và thoát khi bạn hoàn tất. Sau đó tạo một liên kết tượng trưng trong /etc/nginx/sites-enabled đến tệp mới này để Nginx sẽ nhận nó sau khi khởi động lại:

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

Thao tác này cấu hình Nginx để gửi chuyển hướng 301 trở lại bất kỳ client nào yêu cầu www.my-website.com, và hướng họ truy cập my-website.com thay thế. Việc chuyển hướng bảo toàn request URI, để yêu cầu đến http://www.my-website.com/login.php sẽ được chuyển hướng đến http://my-website.com/login.php.

Lưu ý: Server block ở trên không chứa chỉ thị listen. Điều này OK, bởi vì như đã đề cập trong hướng dẫn này, bất kỳ server block nào không có chỉ thị listen sẽ lắng nghe trên 0.0.0.0:80 (cổng 80 trên tất cả các interface). Nhưng nếu server Nginx của bạn có nhiều địa chỉ IP, hoặc nếu trang web của bạn lắng nghe trên một cổng khác 80, bạn có thể cần thêm chỉ thị listen để chỉ rõ địa chỉ IP và cổng cụ thể. Sử dụng cùng một giá trị cho listenserver block chính của trang web của bạn sử dụng.

Trước khi áp dụng các thay đổi, hãy kiểm tra xem cấu hình Nginx của bạn có lỗi không:

$ sudo nginx -t

Trừ khi bạn mắc lỗi cú pháp (ví dụ: bạn quên dấu chấm phẩy), cấu hình sẽ OK.

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

Bây giờ hãy khởi động lại Nginx để áp dụng quy tắc chuyển hướng mới:

$ sudo service nginx restart

Trước khi truy cập www.my-website.com trong trình duyệt của bạn, hãy gửi một yêu cầu bằng curl trên server của bạn hoặc máy cục bộ của bạn (nếu curl được cài đặt cục bộ):

$ curl -IL <http://www.my-website.com>

Cờ -I yêu cầu curl chỉ hiển thị các header từ phản hồi của server. Cờ -L yêu cầu curl tuân theo bất kỳ chuyển hướng nào từ server bằng cách tự động thực hiện yêu cầu thứ hai, lần này đến URL được cung cấp trong Location header (giống như một trình duyệt web sẽ làm). Vì bạn đã cấu hình chuyển hướng 301, curl sẽ thực hiện hai yêu cầu, và bạn sẽ chỉ thấy các tiêu đề của hai phản hồi:

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

Trong phản hồi 301 (Moved Permanently) cho yêu cầu ban đầu đến http://www.my-website.com, hãy chú ý đến header cuối cùng: Location: <http://my-website.com>. Phản hồi thứ hai là từ yêu cầu tiếp theo của curl đến http://my-website.com, và nếu trang web của bạn hoạt động tốt, server sẽ phản hồi bằng 200 (OK).

Cuối cùng, hãy truy cập http://www.my-website.com trong trình duyệt web của bạn. Chỉ trong nháy mắt, bạn sẽ bỏ lỡ quá trình chuyển hướng. Trang web của bạn sẽ xuất hiện như bình thường, nhưng hãy nhìn lại thanh địa chỉ và nhận thấy rằng “www” đã biến mất khỏi URL. Hầu hết người dùng sẽ không bao giờ nhận ra điều này, và do đó họ sẽ có trải nghiệm tương tự như khi họ yêu cầu http://my-website.com.

Kết luận

Trong hướng dẫn này, bạn đã thêm hai bản ghi DNS cho trang web của mình và cấu hình Nginx để chuyển hướng một domain phụ sang domain ưu tiên của bạn. Bây giờ trang web của bạn có thể truy cập được qua cả hai domain.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất