Hướng dẫn Redirect HTTP sang HTTPS với Nginx Web Server
Một trong những tác vụ phổ biến để vận hành Web Server Nginx là chuyển luồng dữ liệu từ giao thức HTTP qua HTTPS (phiên bản bảo mật hơn) của website.
Không giống HTTP, tất cả request và response đều được chuyển dưới dạng plain text không mã hóa. HTTPS sử dụng TLS/SSL để mã hóa đường truyền giữa client và server.
Bài viết này sẽ hướng dẫn các bạn cấu hình chuyển hướng HTTP sang HTTPS sử dụng Nginx.
Lưu ý
Để cấu hình chuyển hướng, bạn phải chỉnh file cấu hình Nginx thường nằm trong đường dẫn /etc/nginx/nginx.conf hay /etc/nginx/sites-available, /usr/local/nginx/conf và /usr/local/etc/nginx.
Một khi chỉnh sửa file cấu hình xong bạn phải lưu chỉnh sửa và thoát ra. Sau đó, bạn tải lại dịch vụ Nginx.
systemctl reload nginx
Chuyển hướng một trang cụ thể
Bạn có nhiều trang web và chỉ muốn một số trang web chuyển hướng sang HTTPS. Mở file cấu hình Nginx và chèn đoạn mã sau:
server {
listen 80 default_server;
server_name domain.com www.domain.com;
return 301 https://$host$request_uri;
}
Ý nghĩa từng dòng:
- listen 80 – block server sẽ nhận dữ liệu tới ở Port 80
- server_name domain.com www.domain.com – tên miền của server (bạn thay đổi thông tin này đúng với tên miền của bạn)
- return 301 https://$host$request_uri – chuyển traffic tới phiên bản HTTPS của trang
Chuyển hướng tất cả các trang
Nếu tất cả trang web được host trên server đều sử dụng HTTPS và bạn không muốn tạo riêng các block server cho mỗi trang, bạn có thể tạo một block server chính để chuyển hướng toàn bộ HTTP request sang HTTPS.
Tạo block server chính trong file cấu hình Nginx:
server { listen 80 default_server; server_name _; return 301 https://$host$request_uri; }
Thông số server_name _; sẽ lấy bất cứ hostname của trang web nào.
Chỉ nhận kết nối SSL
Thêm đoạn mã sau để server chỉ chấp nhận mỗi kết nối SSL ở Port 443:
server {
listen 443 ssl default_server;
server_name my_website.com;
}
Bạn có thể thêm một block server mới cho trang web khác.
Chuyển hướng tên miền
Trường hợp này xảy ra khi bạn muốn đổi phần mở rộng tên miền (như .net hay .biz) thành .com cũng như chuyển hướng từ tên miền cũ sang tên miền mới.
server {
listen 80;
listen 443 ssl;
server_name www.old_domain.com;
return 301 $scheme://www.new_domain.com$request_uri;
}
Chuyển hướng từ www sang non-www
Khi bạn muốn đường dẫn trang web không xuất hiện www thì nhập đoạn mã sau:
server {
server_name www.domain.com;
return 301 $scheme://domain.com$request_uri;
}
Cách thức hoạt động cũng như chuyển hướng trang tiêu chuẩn
Kiểm tra kết quả
Khi cấu hình xong, toàn bộ traffic từ HTTP sẽ tự động chuyển sang HTTPS. Việc kiểm tra trang web sẽ trả về kết quả là HTTP status code “301 redirect”. Bạn sử dụng công cụ curl để kiểm tra, gõ lệnh:
curl -I http://domain.com/
Nếu bạn thấy “HTTP/1.1 301 Moved Permanently” và “Location: https://domain.com” tức là bạn thành công rồi nhé.
Kết luận
Tóm lại, cách chuyển hướng trong Nginx là tạo ra một block server riêng biệt và cấu hình trả mã status code “HTTP 301“. Điều này giúp bạn quản lý các thay đổi trên trang web của mình một cách an toàn mà không làm gián đoạn trải nghiệm người dùng.