為 Nginx 網站啟用帳號密碼登入

前言

有的時候你會想將你的網站啟用帳號密碼登入,但你不一定會想要使用 PHP、JSP、ASP 這類的程式語言來實作他。這個時候不妨可以試試 Nginx 內建的簡易認證功能,來達成這樣的需求。

操作步驟

1. 設定帳號密碼

首先我們必須先設定我們的帳號密碼。這裡我建立一個名為 charlie 的帳號,並將他寫到 /etc/nginx/.htpasswd 裡面。

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

接著我們要設定他的密碼,一樣是寫到 /etc/nginx/.htpasswd 裡面。在操作這行命令的時候,他會請你輸入兩次密碼。

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

這個時候,/etc/nginx/.htpasswd 裡面可能會看起來像是這樣。

root@nginx:/etc/nginx# cat /etc/nginx/.htpasswd
charlie:$apr1$nHAInJaA$gxtFg7HMLb2yeqJVM2oTW1
root@nginx:/etc/nginx# 

2. 編輯網站設定檔

接著,我們要編輯網站設定檔,前往資料夾並編輯他。(這邊假設檔案名稱是 example

cd /etc/nginx/sites-enabled && vim example

在設定檔中加入幾行文字。

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

最終,整份檔案可能會看起來像是這樣:

server {
    listen 80;
    server_name www.example.com;

    server_tokens off;
    more_set_headers Server;

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

    location / {
        try_files $uri $uri/ =404;
    }
}

4. 重啟 Nginx

存檔退出後,我們需要重新啟動 Nginx。

sudo nginx -t && sudo systemctl restart nginx

檢視成果

現在,你的網站應該可以開始使用帳號密碼登入囉!打開網站,你應該會看到類似這樣的畫面。

001.jpg