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 
Outputsammy:$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 
Outputsammy:$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:
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:
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:
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":
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 .
Các tin liên quan
Cách cài đặt Nginx trên Debian 82015-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 thành không có www với Nginx trên Ubuntu 14.04
2015-05-04
Cách chuyển hướng www sang không có www với Nginx trên CentOS 7
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
 

