1. 程式人生 > >[轉載] Nginx對某個目錄設定密碼保護例子

[轉載] Nginx對某個目錄設定密碼保護例子

https://www.jb51.net/article/50949.htm

 

 

有時不想某個目錄被訪問,所以要加密碼之類來保護,以前用過的 Apache 好像很簡單就實現目錄加密。我用的是 Nginx,用了那麼久 Nginx 還真沒試過加密……
參考了一些資料,然後發現這樣就可以:(Debian系統,配置中“#.......”表示後續還有其他配置)
1. 配置網站(假如 yousite.com 放在 /home/www,然後要對 ooxx 目錄加密)

複製程式碼 程式碼如下:


server {
 listen 80;
 server_name yousite.com;
 root /home/www;
 index index.php index.html;
 location ^~ /ooxx/{
  auth_basic "Authorized users only";
  auth_basic_user_file /home/.htpasswd;
 }

 

 #......

}

 

2. 安裝 Apache 2 工具(需要 htpasswd 命令)

複製程式碼 程式碼如下:


apt-get install apache2-utils


3. cd 到 /home 目錄下(其他目錄也行,但要注意跟上面 auth_basic_user_file 一致),用 htpasswd 生成使用者名稱和密碼

複製程式碼 程式碼如下:


htpasswd -bdc .htpasswd username password

 

(注:生成的 .htpasswd 檔案可能需要設為 nginx 的執行使用者所有)

這樣,你直接訪問 http://yousite.com/ooxx 就會提示你輸入使用者和密碼了,輸入剛才用 htpasswd 設定的使用者和密碼就可以進去了!

但是,然後你會發現,直接訪問裡面的 php 檔案會變成下載而不是執行——超囧~

檢查了 nginx 對 php 配置:

複製程式碼 程式碼如下:


location ~ \.php$ {
 include /etc/nginx/fastcgi_params;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}


沒錯啊

 

我是這樣解決的:在剛才的 location ^~ /ooxx/{ ... } 裡面加多一段對 php 的配置,變成

複製程式碼 程式碼如下:


server {
 listen 80;
 server_name yousite.com;
 root /home/www;
 index index.php index.html;
 location ^~ /ooxx/{
  location ~ \.php$ {
   include /etc/nginx/fastcgi_params;
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
  auth_basic "Authorized users only";
  auth_basic_user_file /home/.htpasswd;
 }

 

 #......

}


搞定收工,具體請參考 Nginx 官方文件,我隨便玩的(反正是成功了)。

 

附帶說明:如果把 location ^~ /ooxx/ 的 ^~ 去掉的話,會變成訪問目錄需要輸入密碼,但是卻可以直接訪問檔案,注意。