Nginx對某個目錄設置密碼保護例子
有時不想某個目錄被訪問,所以要加密碼之類來保護,以前用過的 Apache 好像很簡單就實現(xiàn)目錄加密。我用的是 Nginx,用了那么久 Nginx 還真沒試過加密……
參考了一些資料,然后發(fā)現(xiàn)這樣就可以:(Debian系統(tǒng),配置中“#.......”表示后續(xù)還有其他配置)
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 設置的用戶和密碼就可以進去了!
但是,然后你會發(fā)現(xiàn),直接訪問里面的 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/ 的 ^~ 去掉的話,會變成訪問目錄需要輸入密碼,但是卻可以直接訪問文件,注意。
相關文章
nginx部署前端項目location時root和alias配置指南
nginx指定文件路徑有兩種方式root和alias,下面這篇文章主要給大家介紹了關于nginx部署前端項目location時root和alias配置的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-01-01Dockerfile打包nginx鏡像的實現(xiàn)步驟
本文主要介紹了Dockerfile打包nginx鏡像的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-10-10