Xác thực HTTP cơ bản với Nginx

theanh

Administrator
Nhân viên
Hướng dẫn này cho thấy cách bạn có thể sử dụng xác thực HTTP cơ bản với Nginx để bảo vệ bằng mật khẩu các thư mục trên máy chủ của bạn hoặc thậm chí là toàn bộ trang web. Đây là Nginx tương đương với xác thực HTTP cơ bản trên Apache với .htaccess/.htpasswd.


1 Lưu ý sơ bộ​

Tôi đang sử dụng trang web www.example.com ở đây với thư mục gốc tài liệu /var/www/www.example.com/web/ và tệp cấu hình vhost Nginx /etc/nginx/sites-enabled/www.example.com.vhost. Thư mục tôi muốn bảo vệ bằng mật khẩu là /var/www/www.example.com/web/test/.


2 Tạo tệp mật khẩu​

Chúng ta cần một tệp mật khẩu trong đó những người dùng có thể đăng nhập được liệt kê cùng với mật khẩu của họ (ở dạng được mã hóa). Để tạo một tệp mật khẩu như vậy, chúng ta có thể sử dụng công cụ htpasswd của Apache hoặc sử dụng tập lệnh Python từ http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.


2.1 Sử dụng lệnh htpasswd của Apache​

Nếu bạn muốn sử dụng lệnh htpasswd của Apache, hãy kiểm tra xem lệnh đó có tồn tại trên hệ thống của bạn không:
Mã:
which htpasswd
Mã:
root@server1:~# which htpasswd
/usr/bin/htpasswd
root@server1:~#
Nếu bạn nhận được kết quả như trên, mọi thứ đều ổn - htpasswd đã được cài đặt. Nếu lệnh trả về mà không có kết quả nào, htpasswd không tồn tại trên hệ thống của bạn và bạn phải cài đặt nó. Trên Debian/Ubuntu, nó là một phần của gói apache2-utils mà chúng ta có thể cài đặt như sau:
Mã:
apt-get -y install apache2-utils
Bây giờ tôi muốn tạo tệp mật khẩu /var/www/www.example.com/.htpasswd và lưu trữ người dùng falko trong đó (bạn có thể đặt bất kỳ tên nào cho tệp mật khẩu mà bạn thích - không cần thiết phải đặt tên là .htpasswd; tôi chỉ đặt tên là .htpasswd vì đó là cách các tệp mật khẩu được đặt tên trong Apache):
Mã:
htpasswd -c /var/www/www.example.com/.htpasswd falko
Bạn sẽ được yêu cầu nhập mật khẩu cho người dùng falko. Xin lưu ý rằng lệnh -c sẽ tạo tệp từ đầu; nếu tệp chưa tồn tại trước đó, tệp sẽ được tạo; nếu tệp đã tồn tại trước đó, tệp sẽ bị ghi đè bằng tệp mới và tất cả người dùng từ tệp cũ sẽ bị mất! Do đó, nếu bạn muốn thêm người dùng khác mà không xóa tất cả người dùng hiện có, hãy sử dụng lệnh htpasswd mà không có lệnh chuyển đổi -c:
Mã:
htpasswd /var/www/www.example.com/.htpasswd till
Lệnh cuối cùng thêm người dùng till vào /var/www/www.example.com/.htpasswd để bây giờ chúng ta có người dùng falko và till trong đó.


2.2 Sử dụng tập lệnh Python htpasswd.py​

Nếu bạn không muốn hoặc không thể sử dụng lệnh htpasswd của Apache, bạn có thể sử dụng tập lệnh Python từ http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

Chúng tôi tải xuống /usr/local/bin và thực thi như sau:
Mã:
cd /usr/local/bin
wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py
chmod 755 /usr/local/bin/htpasswd.py
Tôi muốn tạo tệp mật khẩu /var/www/www.example.com/.htpasswd bây giờ và lưu trữ người dùng falko trong đó (bạn có thể đặt bất kỳ tên nào cho tệp mật khẩu mà bạn thích - không cần thiết phải đặt tên là .htpasswd; tôi chỉ đặt tên là .htpasswd vì đó là cách các tệp mật khẩu được đặt tên trong Apache):
Mã:
htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret
Vui lòng thay thế falkossecret bằng mật khẩu cho người dùng falko. Xin lưu ý rằng lệnh -c khiến tệp được tạo từ đầu; nếu tệp chưa tồn tại trước đó, tệp sẽ được tạo; nếu tệp đã tồn tại trước đó, tệp sẽ được ghi đè bằng tệp mới và tất cả người dùng từ tệp cũ sẽ bị mất! Do đó, nếu bạn muốn thêm người dùng khác mà không xóa tất cả người dùng hiện có, hãy sử dụng lệnh htpasswd.py mà không có lệnh chuyển đổi -c:
Mã:
htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret
Lệnh cuối cùng thêm người dùng till vào /var/www/www.example.com/.htpasswd để bây giờ chúng ta có người dùng falko và till trong đó.


3 Cấu hình Nginx​

Bây giờ chúng ta đã có tệp mật khẩu tại chỗ, chúng ta chỉ cần thêm tệp này vào cấu hình vhost Nginx trong /etc/nginx/sites-enabled/www.example.com.vhost, bên trong vùng chứa server {}.
Mã:
nano /etc/nginx/sites-enabled/www.example.com.vhost
Vì tôi muốn bảo vệ bằng mật khẩu cho thư mục test trong thư mục gốc của tài liệu, tôi sử dụng location /test {} tại đây (để bảo vệ bằng mật khẩu cho toàn bộ trang web, bạn sẽ sử dụng location / {}):
Mã:
server { listen 80; server_name www.example.com example.com; root /var/www/www.example.com/web;[...] location /test { auth_basic "Restricted"; auth_basic_user_file /var/www/www.example.com/.htpasswd; }[...]}
Tải lại Nginx sau đó:
Mã:
service nginx reload
Vậy là xong! Bây giờ bạn có thể vào thư mục test của mình trong trình duyệt (http://www.example.com/test) và bạn sẽ được yêu cầu nhập tên người dùng và mật khẩu:



Nếu bạn nhập đúng tên người dùng và mật khẩu, bạn sẽ được cấp quyền truy cập:



Nếu không, bạn sẽ thấy thông báo lỗi 401 Authorization Required:




4 Links​



Giới thiệu về tác giả

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2250%22%20height=%2250%22%3E%3C/svg%3E

Falko Timme là chủ sở hữu của
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2298%22%20height=%2230%22%3E%3C/svg%3E
Timme Hosting
(dịch vụ lưu trữ web nginx cực nhanh). Ông là người bảo trì chính của HowtoForge (từ năm 2005) và là một trong những nhà phát triển cốt lõi của ISPConfig (từ năm 2000). Ông cũng đã đóng góp cho cuốn sách "Linux System Administration" của O'Reilly.
 
Back
Bên trên