Nginx配置问题

Nginx配置问题

嘿伙计们,我正在尝试使用以下代码使自动索引功能仅针对我的 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

相关内容