Skip to main content

設定 Nginx 使用密碼登入

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

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

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

step - 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 是用來印檔案資料的方式

cat /etc/nginx/.htpasswd
# 輸出的內容像這樣
tony:$apr1$wI1/A0nB$jEKuTJHkTOOWkopnXqC1d1

以上帳號密碼的部分就完成了。接著來設定 Nginx 的網站設定檔。

step - 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

之後開啟網頁就會出現密碼驗證的詢問框:

參考文章