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.
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:
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):
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:
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 đó.
Chúng tôi tải xuống /usr/local/bin và thực thi như sau:
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):
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:
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 đó.
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 / {}):
Tải lại Nginx sau đó:
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:
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.
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:~#
Mã:
apt-get -y install apache2-utils
Mã:
htpasswd -c /var/www/www.example.com/.htpasswd falko
Mã:
htpasswd /var/www/www.example.com/.htpasswd till
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
Mã:
htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret
Mã:
htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret
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
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; }[...]}
Mã:
service nginx reload
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
- Nginx: http://nginx.org/
- Nginx Wiki: http://wiki.nginx.org/
- htpasswd.py Tập lệnh Python: http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py
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.