我正在尝试在我的服务器上设置受密码保护的文件夹(使用 nginx)。我尝试过如下方法:
location / {
root /srv/www/steampunkjunkies.net/www;
index index.html index.htm index.php;
}
location /cgi-bin/admin {
satisfy any;
allow 81.174.134.133;
deny all;
auth_basic "Administrator Login";
auth_basic_user_file /var/www/steampunkjunkies.net/htpasswd;
}
...但问题是,一旦你登录 - 它就不会再执行下面的代码:
location ~ \.cgi$ {
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /srv/www/steampunkjunkies.net/www/cgi-bin/$fastcgi_script_name;
}
(因此您只需下载文件)
我有点不知该怎么做。有什么建议吗?(这是我第一次在 Nginx 上用密码保护文件夹……但我在 Apache 上已经做过很多次了)
更新:根据建议,我现在得到:
location /cgi-bin/admin {
satisfy any;
allow 81.174.134.xxx;
deny all;
auth_basic "Administrator Login";
auth_basic_user_file /var/www/mysite.net/htpasswd;
location ~ \.cgi$ {
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /srv/www/mysite.net/www/cgi-bin/$fastcgi_script_name;
}
}
IP部分工作正常:
satisfy any;
allow 81.174.134.xxx;
deny all;
(如果我将 IP 更改为不是我的 IP,则会出现弹出窗口...否则它会让我进入)
问题出在弹出的密码验证框上。我输入了详细信息(正确),然后它就消失了 - 但403 Forbidden
不知为何我又出现了错误。有什么想法吗?
答案1
这里的问题是,所有位置块都是分开的,并且 nginx 根据第一次匹配来选择位置。
location ~ \.cgi$ {
您也可以通过将块包含在块内来解决这个问题location /cgi-bin/admin {
,如下所示:
location /cgi-bin/admin {
satisfy any;
allow 81.174.134.133;
deny all;
auth_basic "Administrator Login";
auth_basic_user_file /var/www/steampunkjunkies.net/htpasswd;
location ~ \.cgi$ {
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /srv/www/steampunkjunkies.net/www/cgi-bin/$fastcgi_script_name;
}
}