嘿伙计们,我正在尝试使用以下代码使自动索引功能仅针对我的 IP 地址运行:
服务器{...自动索引关闭;...如果 ($remote_addr ~。。。) { autoindex on; } ... } 但是它不起作用。它给了我一个 403 :/ 有人能帮我吗 :) 顺便说一句,我正在使用 Debian Lenny 和 Nginx 0.6 :)
编辑:这是我的完整配置:
server {
listen 80;
server_name site.com;
server_name_in_redirect off;
client_max_body_size 4M;
server_tokens off;
# log_subrequest on;
autoindex off;
# expires max;
error_page 500 502 503 504 /var/www/nginx-default/50x.html;
# error_page 404 /404.html;
set $myhome /bla/bla;
set $myroot $myhome/public;
set $mysubd $myhome/subdomains;
log_format new_log
'$remote_addr - $remote_user [$time_local] $request '
'"$status" "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# Star nginx :@
access_log /bla/bla/logs/access.log new_log;
error_log /bla/bla/logs/error.log;
if ($remote_addr ~ 94.156.58.138) {
autoindex on;
}
# Subdomains
if ($host ~* (.*)\.site\.org$) {
set $myroot $mysubd/$1;
}
# Static files
# location ~* \.(jpg|jpeg|gif|css|png|js|ico)$ {
# access_log off;
# expires 30d;
# }
location / {
root $myroot;
index index.php index.html index.htm;
}
# PHP
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $myroot$fastcgi_script_name;
include fastcgi_params;
}
# .Htaccess
location ~ /\.ht {
deny all;
}
}
我忘了说,当我添加代码从访问日志中删除静态文件时,静态文件无法访问。我不知道这是否相关:)
答案1
可以使用该技术的一个版本,以一种相当 hack 的方式来实现这一点Endre Szabó 在此处描述。
本质上它是无条件地启用自动索引(我不认为目前有任何其他启用它的方式),然后禁止访问没有 index.html 的目录,除非请求的 IP 地址与配置中定义的特定 IP 地址匹配。
server {
autoindex on;
location / {
root /your/htdocs;
# If the requested filename is not a directory,
# stop processing further conditions.
if (!-d $request_filename) {
break;
}
# If index.html exists in the requested directory,
# stop processing any further conditions.
if (-f $request_filename/index.html) {
break;
}
# If the requesting IP address is not our special one,
# forbid the request, inhibiting autoindex.
if ($remote_addr != "1.2.3.4") {
return 403;
}
}
}
答案2
尝试这样做:
if ($remote_addr = "94.156.58.138") {
autoindex on;
fi