Thiết lập Basic Authentication với Nginx

Khi xây dựng 1 website mà không muốn cho người khác vào xem (site đang xây dựng, nhiều lỗi…) thì ta có thể nghĩ tới phương án dùng Basic Authentication: yêu cầu user phải nhập username và password mới được truy cập site. Bài này giới thiệu về cách thiết lập Basic Authentication với các web server chạy Nginx trên nền CentOS

Step 1: Tạo user và password cho Basic Authentication

Ta cần htpasswd để tạo file mã hoá cho Basic Authentication. Sử dụng lệnh sau để cài đặt htpasswd

sudo yum install httpd-tools

Tạo 1 file .htpasswd và lưu file này ở thư mục mà user chạy nginx có thể access được.  Ví dụ: Tạo 1 file .htpasswd ở thư mục /etc/nginx với user là codelovers

sudo htpasswd -c /etc/nginx/.htpasswd codelovers 

Nhập password tương ứng:

New password:
Re-type new password:
Adding password for user codelovers 

Cấu trúc file .htpasswd sẽ có dạng như sau

$ cat .htpasswd 
codelovers:PuMIBcmyHOg3E

Chú ý file .htpasswd này cũng phải cho phép user chạy nginx có thể access được.

Step 2: Cập nhật Nginx config

Thêm 2 dòng sau vào file config của nginx

auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;

Lấy ví dụ, file config nằm ở /etc/nginx/sites-available/website_nginx.conf. Chạy lệnh sau để edit file này:

 sudo vi /etc/nginx/sites-available/website_nginx.conf

Thêm 2 dòng liên quan tới Basic Authentication vào:

 server {
  listen       portnumber;
  server_name  ip_address;
  location / {
      root   /var/www/mywebsite.com;
      index  index.html index.htm;
      auth_basic "Restricted";                    #For Basic Auth
      auth_basic_user_file /etc/nginx/.htpasswd;  #For Basic Auth
  }
}

Step 3: Reload Nginx

Reload Nginx để  cập nhật lại config

sudo service nginx reload
* Reloading nginx configuration...                       

Sau đó access lại vào site để thấy Basic Authentication.

Trouble Shooting

Trường hợp sau khi nhập Username và Password mà gặp lỗi “500 Internal Server Error” thì nguyên nhân có thể do file .htpasswd hoặc folder chứa file .htpasswd không cho phép user chạy nginx access file.

Đổi permission của .htpasswd về 777 hoặc đổi permission của folder chứa .htpasswd có thể giải quyết vấn đề

 

Tham khảo thêm:

https://www.digitalocean.com/community/tutorials/how-to-set-up-http-authentication-with-nginx-on-ubuntu-12-10