Cách chuyển hướng HTTP sang HTTPS trong Nginx

Tác giả Network Engineer, T.M.Hai 31, 2021, 11:09:06 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách chuyển hướng HTTP sang HTTPS trong Nginx


Nginx, được phát âm là "Engine x", là một trang web hiệu suất cao dựa trên Linux miễn phí, mã nguồn mở và là một máy chủ proxy ngược chịu trách nhiệm quản lý và xử lý tải của lưu lượng truy cập trang web lớn nhất trên internet. Nginx là một công cụ chuyển hướng mạnh mẽ có thể được cấu hình dễ dàng trên hệ thống của bạn để chuyển hướng lưu lượng truy cập web HTTP kém an toàn hoặc không được mã hóa đến máy chủ web HTTPS được mã hóa và bảo mật. Nếu bạn là quản trị viên hệ thống hoặc nhà phát triển, thì bạn đang sử dụng máy chủ Nginx thường xuyên.

Trong bài viết này, mình sẽ hướng dẫn bạn cách chuyển hướng lưu lượng truy cập web từ HTTP sang HTTPS an toàn trong Nginx.

Các phản hồi và yêu cầu được trả về dưới dạng văn bản rõ ràng trong HTTP, trong khi HTTPS sử dụng SSL/TLS để mã hóa giao tiếp giữa hệ thống máy khách và máy chủ. Do đó, do nhiều lý do HTTPS được sử dụng qua HTTP, được liệt kê dưới đây.

  • Tất cả dữ liệu giữa máy khách và máy chủ theo cả hai hướng đều được mã hóa. Tuy nhiên, bất kỳ ai cũng không thể truy cập thông tin nhạy cảm nếu bị chặn.
  • Khi bạn đang sử dụng HTTPS, Google Chrome và các trình duyệt khác sẽ coi miền trang web của bạn là an toàn.
  • Phiên bản HTTPS cải thiện hiệu suất trang web được chỉ định của bạn bằng giao thức HTTP/2.
  • Nếu bạn phân phối tên miền trang web của mình qua HTTPS, thì trang web đó sẽ xếp hạng tốt hơn trên Google, vì nó ưu tiên cho tất cả các trang web được bảo mật HTTPS.

Ưu tiên chuyển hướng lưu lượng truy cập HTTP sang HTTPS trong Nginx trong một khối máy chủ riêng biệt cho từng phiên bản trang web. Bạn cũng nên tránh chuyển hướng lưu lượng truy cập bằng hướng nếu có thể gây ra hành vi bất thường của máy chủ.

1. Chuyển hướng tất cả lưu lượng truy cập từ HTTP sang HTTPS

Thêm các thay đổi sau vào tập tin cấu hình Nginx để chuyển hướng tất cả lưu lượng truy cập từ HTTP sang phiên bản HTTPS.

Mã nguồn [Chọn]
server {
    listen 80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

Dưới đây, mình đã trình bày chi tiết từng thuật ngữ được đề cập ở trên.

  • Listen 80 default_server - điều này sẽ báo hiệu hệ thống của bạn bắt tất cả lưu lượng HTTP trên cổng 80.
  • Server_name _ - đó là tên miền sẽ khớp với bất kỳ tên máy chủ nào.
  • Return 301 https://$host$request_uri - điều này cho các công cụ tìm kiếm của bạn biết rằng nó sẽ chuyển hướng nó vĩnh viễn. Nó chỉ định rằng biến $host giữ các tên miền.

Sau khi thay đổi cài đặt cấu hình, bạn cần tải lại các dịch vụ Nginx trên hệ thống của mình. Vì vậy, hãy tải lại các dịch vụ Nginx của bạn bằng cách sử dụng lệnh sau:

Mã nguồn [Chọn]
$ sudo systemctl reload nginx
2. Chuyển hướng HTTP sang phiên bản HTTPS cho tên miền được chỉ định trong Nginx

Sau khi cài đặt chứng chỉ SSL trên tên miền của bạn, bạn sẽ có hai tùy chọn khối máy chủ cho tên miền này. Một khối dành cho phiên bản HTTP đang lắng nghe trên cổng 80 và phiên bản thứ hai là HTTPS trên cổng 443. Tuy nhiên, để chuyển hướng một tên miền trang web từ HTTP sang HTTPS, bạn cần mở cấu hình Nginx.

Bạn có thể tìm tập tin cấu hình này trong thư mục /etc/nginx/sites-available. Trong mọi trường hợp, nếu bạn không tìm thấy tập tin này, bạn có thể tìm kiếm nó bằng /etc/nginx/nginx.conf, /usr/local/nginx/conf hoặc /usr/local/etc/ngin, sau đó thực hiện sau những thay đổi trong tập tin này:

Mã nguồn [Chọn]
server {
    listen 80;
    server_name domain-name.com www.domain-name.com;
    return 301 https://domain-name.com$request_uri;
}

Hãy hiểu từng dòng mã ở trên như sau:

  • Listen 80 - sử dụng cổng 80, máy chủ sẽ lắng nghe tất cả các kết nối đến tên miền được chỉ định.
  • Server_name   Đăng nhập để xem liên kết   Đăng nhập để xem liên kết - nó chỉ định các tên miền. Vì vậy, hãy thay thế nó bằng tên miền trang web của bạn mà bạn muốn chuyển hướng.
  • Return 301   Đăng nhập để xem liên kết$request_uri - nó chuyển lưu lượng truy cập sang phiên bản HTTPS của trang web. Biến $request_uri được sử dụng cho URI yêu cầu ban đầu đầy đủ, trong đó các đối số cũng được bao gồm.

Sử dụng phương pháp sau, bạn có thể chuyển hướng lưu lượng truy cập đến phiên bản HTTPS www sang phiên bản không có www của trang web. Bạn nên tạo chuyển hướng trong một khối máy chủ riêng biệt cho cả phiên bản không có www và www.

Hãy giải thích bằng một ví dụ. Nếu bạn muốn chuyển hướng các yêu cầu www HTTPS sang phiên bản không có www, thì bạn thực hiện theo cấu hình sau:

Mã nguồn [Chọn]
server {
    listen 80;
    server_name domain-name.com www.domain-name.com;
    return 301 https://domain-name.com$request_uri;
}
server {
    listen 443 ssl http2;
    server_name www.domain-name.com;
    # . . . other code
    return 301 https://domain-name.com$request_uri;
}
server {
    listen 443 ssl http2;
    server_name domain-name.com;
 
    # . . . other code
}

Thay thế tên miền bằng miền của bạn, chẳng hạn như   Đăng nhập để xem liên kết

Chúng ta đã thảo luận về cách chuyển hướng lưu lượng truy cập từ phiên bản HTTP sang HTTPS trên máy chủ Nginx. Bằng cách thay đổi cài đặt tập tin cấu hình Nginx, bạn có thể dễ dàng chuyển hướng lưu lượng truy cập sang HTTPS cho một miền cụ thể hoặc chuyển hướng tất cả. Phương pháp mà mình đã đề cập trong bài viết này, có thể giúp bạn làm cho trang web của mình an toàn hơn bằng cách thực hiện bất kỳ thay đổi nào trong trải nghiệm người dùng.