Cách tạo chuyển hướng tạm thời và vĩnh viễn với Nginx
Chuyển hướng HTTP là cách để trỏ domain hoặc địa chỉ này sang domain hoặc địa chỉ khác. Có một số loại chuyển hướng khác nhau, mỗi loại có ý nghĩa khác nhau đối với trình duyệt của khách hàng. Hai loại phổ biến nhất là chuyển hướng tạm thời và chuyển hướng vĩnh viễn.Chuyển hướng tạm thời ( tìm thấy mã trạng thái phản hồi 302 ) rất hữu ích nếu một URL tạm thời cần được phân phát từ một vị trí khác. Ví dụ: nếu bạn đang thực hiện bảo trì trang web, bạn có thể cần sử dụng chuyển hướng tạm thời từ domain của bạn đến trang giải thích để thông báo cho khách truy cập của bạn rằng bạn sẽ sớm quay lại.
Mặt khác, chuyển hướng vĩnh viễn (mã trạng thái phản hồi là 301 Moved Permanently ), thông báo cho trình duyệt rằng nó sẽ quên hoàn toàn địa chỉ cũ và không cố gắng truy cập vào nó nữa. Những điều này hữu ích khi nội dung của bạn đã được chuyển vĩnh viễn đến một vị trí mới, chẳng hạn như khi bạn thay đổi domain .
Bạn có thể tạo chuyển hướng tạm thời trong Nginx bằng cách thêm một dòng như thế này vào mục nhập khối server trong file cấu hình server :
rewrite ^/oldlocation$ http://www.newdomain.com/newlocation redirect;
Tương tự, sử dụng một dòng như thế này để chuyển hướng vĩnh viễn:
rewrite ^/oldlocation$ http://www.newdomain.com/newlocation permanent;
Hướng dẫn này sẽ giải thích sâu hơn về cách triển khai từng loại chuyển hướng trong Nginx và đi qua một số ví dụ cho các trường hợp sử dụng cụ thể.
Yêu cầu
Để làm theo hướng dẫn này, bạn cần :
- Một server có cài đặt và cài đặt Nginx để phục vụ (các) trang web với các khối server . Bạn có thể thực hiện theo Cách cài đặt khối server Nginx ( Server ảo) trên Ubuntu 16.04 , Debian hoặc CentOS .
Giải pháp trong nháy mắt
Trong Nginx, bạn có thể thực hiện hầu hết các chuyển hướng với chỉ thị rewrite
được tích hợp sẵn. Chỉ thị này có sẵn theo mặc định trên bản cài đặt Nginx mới và được dùng để tạo chuyển hướng tạm thời và vĩnh viễn. Ở dạng đơn giản nhất, nó cần ít nhất hai đối số: URL cũ và URL mới.
Bạn có thể triển khai chuyển hướng tạm thời với các dòng sau trong cấu hình server của bạn :
server { . . . server_name www.domain1.com; rewrite ^/$ http://www.domain2.com redirect; . . . }
Chuyển hướng này hướng dẫn trình duyệt chuyển hướng tất cả các yêu cầu cho www.domain1.com
đến www.domain2.com
. Tuy nhiên, giải pháp này chỉ hoạt động cho một trang, không cho toàn bộ trang. Để chuyển hướng nhiều trang, bạn có thể sử dụng lệnh rewrite
bằng các biểu thức chính quy để chỉ định toàn bộ folder thay vì chỉ các file đơn lẻ.
redirect
trùng với các mẫu biểu thức chính quy trong dấu ngoặc đơn. Sau đó, nó tham chiếu đến văn bản phù hợp trong đích chuyển hướng bằng cách sử dụng biểu thức $1
, trong đó 1
là group văn bản phù hợp đầu tiên. Trong các ví dụ phức tạp hơn, các group đối sánh tiếp theo được đưa ra các số theo thứ tự.
Ví dụ: nếu bạn muốn tạm thời chuyển hướng mọi trang trong www.domain1.com
đến www.domain2.com
, bạn có thể sử dụng như sau:
server { . . . server_name www.domain1.com; rewrite ^/(.*)$ http://www.domain2.com/$1 redirect; . . . } server { . . . server_name www.domain2.com; . . . }
Theo mặc định, chỉ thị rewrite
cài đặt một chuyển hướng tạm thời. Nếu bạn muốn tạo một chuyển hướng vĩnh viễn, bạn có thể thực hiện bằng cách thay thế redirect
bằng permanent
ở cuối chỉ thị, như sau:
rewrite ^/$ http://www.domain2.com permanent; rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;
Hãy chuyển sang một số ví dụ cụ thể.
Ví dụ 1 - Chuyển sang một domain khác
Nếu bạn đã cài đặt sự hiện diện trên web và muốn thay đổi domain của bạn thành một địa chỉ mới, tốt nhất là bạn không nên từ bỏ domain cũ của bạn . Dấu trang đến trang web và các liên kết đến trang web nằm trên các trang khác trên internet sẽ bị hỏng nếu nội dung của bạn biến mất mà không có bất kỳ hướng dẫn nào cho trình duyệt về cách tìm vị trí mới của nó. Thay đổi domain mà không chuyển hướng sẽ khiến trang web mất lưu lượng truy cập từ những khách truy cập trước đó.
Trong ví dụ này, ta sẽ cấu hình chuyển hướng từ domain cũ có tên là domain1.com
sang domain mới có tên là domain2.com
. Ta sẽ sử dụng chuyển hướng vĩnh viễn ở đây vì domain cũ sẽ bị gỡ xuống và tất cả lưu lượng truy cập sẽ chuyển sang domain mới từ bây giờ.
Giả sử bạn đã cấu hình trang web của bạn để được phân phát từ một domain duy nhất có tên domain1.com
đã được cấu hình trong Nginx như sau:
server { . . . server_name domain1.com; . . . }
Ta cũng sẽ giả sử rằng bạn đang cung cấp version trang web trong tương lai của bạn tại domain2.com
:
server { . . . server_name domain2.com; . . . }
Hãy thay đổi file cấu hình khối server domain1.com
để thêm chuyển hướng vĩnh viễn đến domain2.com
:
server { . . . server_name domain1.com; rewrite ^/(.*)$ http://domain2.com/$1 permanent; . . . }
Ta đã thêm chuyển hướng nói trên bằng cách sử dụng chỉ thị rewrite
. Biểu thức chính quy ^/(.*)$
Trùng với mọi thứ sau dấu /
trong URL. Ví dụ: http://domain1.com/ index.html
sẽ được chuyển hướng đến http://domain2.com/ index.html
. Để đạt được chuyển hướng vĩnh viễn, ta chỉ cần thêm permanent
sau chỉ thị rewrite
.
Lưu ý: Hãy nhớ khởi động lại Nginx sau khi thay đổi cấu hình bằng cách sử dụng systemctl restart nginx
.
Ví dụ 2 - Tạo trải nghiệm ổn định bất chấp thay đổi tên trang
Đôi khi, cần phải thay đổi tên của các trang riêng lẻ đã được xuất bản và nhận được lưu lượng truy cập trên trang web . Chỉ riêng việc thay đổi tên sẽ gây ra lỗi 404 Not Found cho những khách truy cập đang cố gắng truy cập vào URL root , nhưng bạn có thể tránh điều này bằng cách sử dụng chuyển hướng. Điều này đảm bảo những người đã đánh dấu trang cũ của bạn hoặc tìm thấy chúng thông qua các liên kết lỗi thời trên công cụ tìm kiếm, vẫn sẽ đến đúng trang.
Hãy tưởng tượng trang web có hai trang riêng biệt cho các sản phẩm và dịch vụ được gọi là products.html
và services.html
tương ứng. Bây giờ, bạn đã quyết định thay thế hai trang đó bằng một trang ưu đãi duy nhất có tên là offers.html
. Ta sẽ cấu hình một chuyển hướng đơn giản cho products.html
và services.html
đến offers.html
.
Ta giả sử bạn đã cấu hình trang web của bạn như sau:
server { . . . server_name example.com www.example.com; . . . }
Việc cấu hình các chuyển hướng cũng đơn giản như sử dụng hai chỉ thị Redirect
.
server { . . . server_name example.com www.example.com; rewrite ^/products.html$ /offer.html permanent; rewrite ^/services.html$ /offer.html permanent; . . . }
Chỉ thị rewrite
chấp nhận địa chỉ ban đầu phải được chuyển hướng cũng như địa chỉ đích của một trang mới. Vì thay đổi ở đây không phải là thay đổi tạm thời, ta cũng đã sử dụng permanent
trong chỉ thị. Bạn có thể sử dụng nhiều chuyển hướng như vậy nếu muốn đảm bảo khách truy cập của bạn sẽ không gặp lỗi Không tìm thấy không cần thiết khi di chuyển nội dung trang web.
Kết luận
Đến đây bạn có kiến thức để chuyển hướng yêu cầu đến các vị trí mới. Đảm bảo sử dụng đúng loại chuyển hướng, vì việc sử dụng chuyển hướng tạm thời không đúng cách có thể ảnh hưởng đến xếp hạng tìm kiếm của bạn.
Có nhiều cách sử dụng khác của chuyển hướng HTTP, bao gồm việc buộc kết nối SSL an toàn (nghĩa là sử dụng https
thay vì http
) và đảm bảo tất cả khách truy cập sẽ chỉ truy cập vào www.
địa chỉ tiền tố của trang web.
Sử dụng chuyển hướng một cách chính xác sẽ cho phép bạn tận dụng sự hiện diện trên web hiện tại của bạn đồng thời cho phép bạn sửa đổi cấu trúc trang web của bạn nếu cần. Nếu bạn muốn tìm hiểu thêm về các cách bạn có thể chuyển hướng khách truy cập của bạn , Nginx có tài liệu tuyệt vời về chủ đề này trong việc viết lại các phần mô-đun của tài liệu chính thức và bài đăng blog chính thức về cách tạo chuyển hướng .
Các tin liên quan
Cách bảo mật Nginx bằng Let's Encrypt trên Debian 82016-12-19
Cách cung cấp các ứng dụng Django với uWSGI và Nginx trên Debian 8
2016-12-19
Cách thêm module gzip vào Nginx trên Ubuntu 16.04
2016-12-02
Cơ sở hạ tầng SaltStack: Tạo Salt State cho web server Nginx
2016-11-07
Cách thêm module log vào Nginx trên Ubuntu 16.04
2016-10-31
Cách thêm module log vào Nginx trên CentOS 7
2016-10-31
Cách di chuyển web root Nginx đến vị trí mới trên Ubuntu 16.04
2016-07-29
Cách cấu hình Nginx làm web server và reverse-proxy (reverse proxy) cho Apache trên một server Ubuntu 16.04
2016-07-06
Cách thiết lập server block Nginx (server ảo) trên Ubuntu 16.04
2016-05-19
Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên Ubuntu 16.04
2016-05-19