Thứ hai, 10/08/2015 | 00:00 GMT+7

Cách thiết lập xác thực mật khẩu với Nginx trên Ubuntu 14.04

Khi cài đặt web server , thường có các phần của trang web mà bạn muốn hạn chế quyền truy cập. Các ứng dụng web thường cung cấp các phương pháp xác thực và ủy quyền của riêng chúng, nhưng bản thân web server được dùng để hạn chế quyền truy cập nếu các phương thức này không đủ hoặc không khả dụng.

Trong hướng dẫn này, ta sẽ trình bày cách bảo vệ nội dung bằng password trên web server Nginx chạy trên Ubuntu 14.04.

Yêu cầu

Để bắt đầu, bạn cần truy cập vào môi trường server Ubuntu 14.04. Bạn cần một user không phải root có quyền sudo để thực hiện các việc quản trị. Để tìm hiểu cách tạo user như vậy, hãy làm theo hướng dẫn cài đặt server ban đầu Ubuntu 14.04 của ta .

Nếu bạn chưa làm như vậy, hãy cài đặt Nginx trên máy của bạn bằng lệnh :

  • sudo apt-get update
  • sudo apt-get install nginx

Tạo file password

Để bắt đầu, ta cần tạo file chứa các tổ hợp tên user và password của ta . Bạn có thể làm điều này bằng cách sử dụng các tiện ích OpenSSL có thể đã có sẵn trên server của bạn. Ngoài ra, bạn có thể sử dụng trình htpasswd có mục đích có trong gói apache2-utils (các file password Nginx sử dụng cùng định dạng với Apache). Chọn phương pháp bên dưới bạn muốn nhất.

Tạo file password bằng OpenSSL Utilities

Nếu bạn đã cài đặt OpenSSL trên server của bạn , bạn có thể tạo file password mà không cần gói bổ sung. Ta sẽ tạo một file ẩn có tên .htpasswd trong folder cấu hình /etc/nginx để lưu trữ kết hợp tên user và password của ta .

Bạn có thể thêm tên user vào file bằng lệnh này. Ta đang sử dụng sammy làm tên user của bạn , nhưng bạn có thể sử dụng bất kỳ tên nào bạn muốn:

  • sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"

Tiếp theo, thêm mục nhập password được mã hóa cho tên user bằng lệnh :

  • sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

Bạn có thể lặp lại quá trình này để biết thêm tên user . Bạn có thể xem cách tên user và password được mã hóa được lưu trữ trong file bằng lệnh :

  • cat /etc/nginx/.htpasswd
Output
sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

Tạo file password bằng Apache Utilities

Mặc dù OpenSSL có thể mã hóa password để xác thực Nginx, nhưng nhiều user cảm thấy dễ dàng hơn khi sử dụng một tiện ích dành riêng cho mục đích. Tiện ích htpasswd , có trong gói apache2-utils , phục vụ tốt chức năng này.

Cài đặt gói apache2-utils trên server của bạn bằng lệnh :

  • sudo apt-get update
  • sudo apt-get install apache2-utils

Bây giờ, bạn có quyền truy cập vào lệnh htpasswd . Ta có thể sử dụng điều này để tạo file password mà Nginx có thể sử dụng để xác thực user . Ta sẽ tạo một file ẩn cho mục đích này được gọi là .htpasswd trong folder cấu hình /etc/nginx của ta .

Lần đầu tiên sử dụng trình này, ta cần thêm tùy chọn -c để tạo file được chỉ định. Ta chỉ định tên user ( sammy trong ví dụ này) ở cuối lệnh để tạo mục nhập mới trong file :

  • sudo htpasswd -c /etc/nginx/.htpasswd sammy

Bạn cần cung cấp và xác nhận password cho user .

Bỏ qua đối số -c cho bất kỳ user bổ sung nào bạn muốn thêm:

  • sudo htpasswd /etc/nginx/.htpasswd another_user

Nếu ta xem nội dung của file , ta có thể thấy tên user và password được mã hóa cho mỗi bản ghi:

  • cat /etc/nginx/.htpasswd
Output
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz. another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Cấu hình xác thực password Nginx

Bây giờ ta có một file với user và password của bạn ở định dạng mà Nginx có thể đọc, ta cần cấu hình Nginx để kiểm tra file này trước khi phân phát nội dung được bảo vệ của ta .

Bắt đầu bằng cách mở file cấu hình khối server mà bạn muốn thêm hạn chế vào. Đối với ví dụ của ta , ta sẽ sử dụng file khối server default được cài đặt thông qua gói Nginx của Ubuntu:

  • sudo nano /etc/nginx/sites-enabled/default

Bên trong, với các comment bị loại bỏ, file sẽ trông giống như sau:

/ etc / nginx / sites-enable / default
server {     listen 80 default_server;     listen [::]:80 default_server ipv6only=on;      root /usr/share/nginx/html;     index index.html index.htm;      server_name localhost;      location / {         try_files $uri $uri/ =404;     } } 

Để cài đặt xác thực, bạn cần quyết định ngữ cảnh để hạn chế. Trong số các lựa chọn khác, Nginx cho phép bạn đặt các hạn chế ở cấp server hoặc bên trong một vị trí cụ thể. Trong ví dụ của ta , ta sẽ hạn chế toàn bộ root tài liệu bằng một khối vị trí, nhưng bạn có thể sửa đổi danh sách này để chỉ nhắm đến một folder cụ thể trong không gian web:

Trong khối vị trí này, hãy sử dụng chỉ thị auth_basic để cài đặt xác thực và chọn tên vùng được hiển thị cho user khi nhắc nhập thông tin đăng nhập. Ta sẽ sử dụng chỉ thị auth_basic_user_file để trỏ Nginx đến file password mà ta đã tạo:

/ etc / nginx / sites-enable / default
server {     listen 80 default_server;     listen [::]:80 default_server ipv6only=on;      root /usr/share/nginx/html;     index index.html index.htm;      server_name localhost;      location / {         try_files $uri $uri/ =404;         auth_basic "Restricted Content";         auth_basic_user_file /etc/nginx/.htpasswd;     } } 

Lưu file khi bạn hoàn tất. Khởi động lại Nginx để triển khai policy password của bạn:

  • sudo service nginx restart

Thư mục bạn chỉ định bây giờ phải được bảo vệ bằng password

Xác nhận xác thực password

Để xác nhận nội dung của bạn được bảo vệ, hãy cố gắng truy cập nội dung bị hạn chế của bạn trong trình duyệt web. Bạn sẽ được hiển thị với dấu nhắc tên user và password giống như sau:

Mật khẩu Nginx nhắc nhở

Nếu bạn nhập thông tin đăng nhập chính xác, bạn sẽ được phép truy cập nội dung. Nếu bạn nhập sai thông tin đăng nhập hoặc nhấn "Hủy", bạn sẽ thấy trang lỗi "Yêu cầu ủy quyền":

Nginx lỗi trái phép

Kết luận

Đến đây bạn sẽ có mọi thứ bạn cần để cài đặt xác thực cơ bản cho trang web của bạn . Lưu ý bảo vệ bằng password phải được kết hợp với mã hóa SSL để thông tin đăng nhập của bạn không được gửi đến server ở dạng văn bản thuần túy. Để tìm hiểu cách tạo certificate SSL tự ký để sử dụng với Nginx, hãy làm theo hướng dẫn này . Để tìm hiểu cách cài đặt certificate thương mại, hãy làm theo hướng dẫn này .


Tags:

Các tin liên quan

Cách cài đặt Nginx trên Debian 8
2015-07-09
Cách lưu trữ nhiều trang web một cách an toàn với Nginx và Php-fpm trên Ubuntu 14.04
2015-07-01
Cách tạo blog bằng Ghost và Nginx trên Ubuntu 14.04
2015-06-28
Cách tạo chứng chỉ ECC trên Nginx cho Debian 8
2015-06-23
Cách nâng cấp Nginx tại chỗ mà không làm rớt kết nối client
2015-06-15
Cách cấu hình Nginx để sử dụng các trang lỗi tùy chỉnh trên Ubuntu 14.04
2015-06-05
Cách cấu hình Nginx để sử dụng các trang lỗi tùy chỉnh trên CentOS 7
2015-06-05
Cách chuyển hướng www sang không có www với Nginx trên CentOS 7
2015-05-04
Cách chuyển hướng www thành không có www với Nginx trên Ubuntu 14.04
2015-05-04
Cách triển khai ứng dụng Rails với Puma và Nginx trên Ubuntu 14.04
2015-04-01