为什么忽略nginx的“ auth_basic off”作为子路径位置指令?

时间:2019-08-05 14:46:12

标签: nginx basic-authentication nginx-location static-content

Nginx(docker image1.17.2)需要对子路径进行基本身份验证。尽管我的配置对https://example.org/subpath表示相反:

//  /etc/nginx/conf.d/mysetup.conf

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

server {
    listen 443 ssl;
    server_name example.org;
    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    access_log /var/logs/nginx/example.org.access.log;
    error_log /var/logs/nginx/example.org.error.log info;

    root /var/www/domains/example.org/stage_root/;        

    location / {
        auth_basic "example.org server";
        auth_basic_user_file /var/htaccess/htaccess_example.org;
    }
    location /subpath {
        auth_basic off;
        root /var/www/domains/example.org/;
    }
}

一些事实:

  • nignx在没有警告的情况下接受我的conf
  • 服务的域更多(全部位于类似的server指令中)和上游plex。
  • docker镜像是docker-compose设置的一部分,它具有自己的网络(nginx是网关)
  • 提供了正确的内容:/var/www/domains/example.org/subpath/
  • 注释掉全局auth_basic会禁用身份验证请求

到目前为止,我已经尝试过:

  • 将auth_basic设置从location /块移动到server块。
  • off带有双引号(suggested,尽管docs中不需要)
  • 搜索了无效的字符/空格
  • 删除完整的location /

恕我直言,这是标准的用例,因此我猜有些小事让我漏了眼,或者我错过了一些上下文知识。

也许nginx的locationroot高于全局root的问题?它提供了内容。

我还没有尝试过的东西:

  • 使用allow / deny,因为should无需使用

可能重复的问题:

具体来说,this question非常相似。但是,它没有根目录不同的“扭曲”,并且答案也无济于事:1st不起作用,2nd似乎是一种解决方法。

1 个答案:

答案 0 :(得分:2)

解决方案是在auth_basic_user_file块内设置server指令,并在各个auth_basic块内设置location指令。

为清楚起见,我仅包含相关配置。故意省略了文档根目录和其他必需设置。

server {
    auth_basic_user_file /path/to/auth.txt;
    location /other {
        auth_basic off;
    }
    location / {
        auth_basic "Restricted";
    }
}