Nginx(docker image,1.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/;
}
}
一些事实:
server
指令中)和上游plex。docker-compose
设置的一部分,它具有自己的网络(nginx是网关)/var/www/domains/example.org/subpath/
auth_basic
会禁用身份验证请求到目前为止,我已经尝试过:
恕我直言,这是标准的用例,因此我猜有些小事让我漏了眼,或者我错过了一些上下文知识。
也许nginx的location
块root
高于全局root
的问题?它提供了内容。
我还没有尝试过的东西:
allow
/ deny
,因为should无需使用可能重复的问题:
具体来说,this question非常相似。但是,它没有根目录不同的“扭曲”,并且答案也无济于事:1st不起作用,2nd似乎是一种解决方法。
答案 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";
}
}