尽管网站访问被阻止,但 Nginx 仍提供静态文件服务

尽管网站访问被阻止,但 Nginx 仍提供静态文件服务

我在 centos 服务器上安装了 nginx。我已阻止对我正在开发的测试网站的所有外部访问。使用此代码。

location / {
    auth_basic "Administrator Login";
    auth_basic_user_file /home/config-files/.htpasswd;
}

问题是它没有阻止对静态文件的访问。我仍然可以访问这样的文件。

wp-admin/images/icons32-vs-2x.png
wp-admin/css/colors/midnight/colors.min.css
wp-content/themes/testtheme/style.css

为什么 Nginx 没有阻止对这些文件的访问。

编辑这是完整的虚拟主机文件。

server {

    listen 80;
    server_name www.domainname.com;

    root /home/myuser/domainname.com/public;
    index index.html index.php;

    access_log /home/myuser/domainname.com/logs/access.log;
    error_log /home/myuser/domainname.com/logs/error.log;

    location ~ /\.svn/* {
        deny all;
    }

    location ~ \.(htaccess|htpasswd) {
        deny all;
    }

    location ~ \.conf$ {
        deny all;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
        auth_basic "Administrator Login";
        auth_basic_user_file /home/config-files/.htpasswd;
    }

    location ~ \.(css|js) {
        rewrite ^(.*/?)([a-z]+)-([0-9]+)\.(css|js)$ /$1$2.$4 last;
    }

    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

    location ~* \.(js|css)$ {
        expires 30d;
        log_not_found off;
    }

    location ~* \.(?:ico|gif|jpe?g|png|svg)$ {
        expires 180d;
        add_header Pragma public;
        add_header Cache-Control "public";
        log_not_found off;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$; #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
    }

    rewrite ^(.*)/undefined$ /$1 permanent;
    rewrite ^(.*)/undefined/$ /$1 permanent;

}

答案1

nginx 不是按顺序匹配“位置”部分,而是按最具体的顺序匹配,请阅读这里。然后它只将最匹配的位置部分应用于请求,而不应用其他任何部分。因此,“location /”将仅对与任何其他位置部分都不匹配的请求起作用(所有位置部分都更具体)。

尝试将 auth 指令放在任何位置括号之外,直接放入 server{}。

相关内容