設定 Nginx 使用密碼登入

Password Prompt

如何使用 Nginx 來做登入驗證。
一般我們會使用 PHP、Python、Ruby、Java 等等程式語言來開發網站,然後設計一個登入頁面來驗證登入的使用者,這些都必須透過程式執行才能辦到,這就是所謂的動態網頁。

但是,有時候你的需求很簡單,你只是需要一個網站來放內容或檔案,但是不想公開它,在沒有使用動態網頁的情況下要怎麼做呢?

Nginx 內建了認證機制,只要簡單的設定,就能讓你的網站擁有登入管控的機制。

1. 設定帳號密碼

在 Nginx 根目錄 /etc/nginx 建立 .htpasswd 檔,在其中建立可以登入的帳號。
註:其中會使用 openssl 命令列工具,請確認是否已安裝。
# 建立一個名為 tony 的帳號,記得要接著冒號
sudo sh -c "echo -n 'tony:' >> /etc/nginx/.htpasswd"
# 接著設定密碼,執行後會要求你輸入密碼,要輸入兩次一樣的密碼
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
完成後可以來看看結果:
cat /etc/nginx/.htpasswd
# 輸出的內容像這樣
tony:$apr1$wI1/A0nB$jEKuTJHkTOOWkopnXqC1d1
以上帳號密碼的部分就完成了。接著來設定 Nginx 的網站設定檔。

2. 設定網站啟用登入驗證

打開你的網站設定檔:
vim /etc/nginx/conf.d/xxx.com.conf
在網站中或子目錄中加入以下兩行:
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
其中 Restricted Content 這段話會顯示在對話框上,你可以自行修改。
修改內容如下:
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    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;
    }
    
    # 如果你只想對子目錄 /abc 做限制
    location /abc/ {
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
    
}
存檔後就完成了。記得讓 Nginx 重載:
nginx -s reload
之後開啟網頁就會出現密碼驗證的詢問框:
password_prompt

參考資料:

How To Set Up Password Authentication with Nginx on Ubuntu 14.04


本文網址:https://blog.tonycube.com/2019/07/nginx-password-prompt.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。