Hướng dẫn cấu hình Basic Authentication trên Nginx

Khi cài đặt một web server, sẽ có những tình huống đặc biệt khi mà bạn muốn giới hạn việc truy cập của người dùng. Có thể bạn không biết, web server bản thân cũng có cách xác thực người dùng bằng username và password.
Bài viết này sẽ chỉ cho bạn từng bước để cài mật khẩu bảo vệ server Nginx chạy trên môi trường Ubuntu.

Điều kiện:

  1. Bạn cần quyền truy cập vào môi trường server Ubuntu.
  2. Sử dụng Nginx làm web server
sudo apt-get update  
sudo apt-get install nginx  

Tạo file để lưu mật khẩu

Tôi sử dụng OpenSSL để tạo mật khẩu (nếu server của bạn không có hãy cài nó lên).
Tôi tạo một file .htpasswd để lưu tên đăng nhập và mật khẩu bên trong thư mục /etc/nginx. Nếu bạn có nhiều web cùng chạy trên server này thì có thể tạo các file riêng cho từng web, ví dụ .htpasswd-web, .htpasswd-another-web.
Bạn hãy chạy câu lệnh sau. Xin chú ý rằng bạn có thể thay thế haposoft bằng bất cứ tên đăng nhập nào và thay thế tên file .htpasswd bằng file mà bạn muốn.

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

Thêm mật khẩu đã được mã hoá cho tên đăng nhập haposoft bằng lệnh sau

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

Điền mật khẩu bạn mong muốn và xác nhận mật khẩu rồi nhấn Enter.

Xem nội file vừa tạo

cat /etc/nginx/.htpasswd  

Nội dung có dạng như sau nghĩa là bạn tạo thành công

haposoft:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1  

Cấu hình xác thực mật khẩu Nginx

Sửa file cấu hình trang web của bạn bằng lệnh sau. Trong đó bạn thay default thành file config trong server của bạn

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

Bên trong có dạ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;
    }
}

Hãy thêm auth_basicauth_basic_user_file trỏ đến file tên đăng nhập và mật khẩu bạn vừa mới tạo ở trên.

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 cấu hình lại và khởi động lại server.

sudo service nginx restart  

Truy cập trang web của bạn sẽ có một cửa sổ bật ra yêu cầu bạn điền tên đăng nhập và mật khẩu (giống như ảnh gif ở đầu bài). Nếu bạn điền chính xác bạn sẽ được phép truy cập nội dung bên trong trang web.
Nếu bạn điền sai hoặc ấn Cancel trang lỗi 401 Authorization Required sẽ hiện ra.

Related article