NGINX - 将对文件夹的访问限制为来自 ldap 身份验证的用户列表
NGINX - Limit access to folder to a list of user from ldap authentication
A 在 ldap 身份验证后有一个 nginx 反向代理。
我可以从变量 $_SERVER['PHP_AUTH_USER'] 中读取 php 中的用户名。我认为这意味着用户名从 ldap 传递到 nginx,而不是 php.
在 nginx 配置中是否可以只允许用户列表访问文件夹?
更新
在 nginx 中,用户存储在 $remote_user 变量中。是否可以将 $remote_user 与存储在文件中的用户列表进行比较?然后拒绝或允许访问文件夹?
更新
可能我必须使用 map 指令,例如:
map $remote_user $allowed_user {
default 0;
user1 1;
user2 1;
}
然后在合适的位置进行测试:
location /folder/ {
if($allowed_user != 1){
return 403;
}
proxy_pass http://site;
}
但是当我执行 sudo nginx -t
时,我收到以下错误:
nginx: [emerg] unknown directive "if($allowed_user" in /etc/nginx/nginx.conf:104
nginx: configuration file /etc/nginx/nginx.conf test failed
您可以通过 map
指令来完成(请注意 map
翻译定义块应该放在 http 上下文中 server
块):
map $remote_user $deny
username1 0;
username2 0;
...
usernameN 0;
default 1;
}
server {
...
location /folder/ {
if ($deny) { return 403; }
...
}
}
您可以预先生成上述形式的用户列表 (username1 0; username 2 0; ...
),然后将此列表包含到 nginx 配置中:
map $remote_user $deny {
include /path/userlist.txt;
default 1;
}
每当此用户列表文件发生更改时,您都需要重新加载 nginx 配置 (nginx -s reload
)。
A 在 ldap 身份验证后有一个 nginx 反向代理。
我可以从变量 $_SERVER['PHP_AUTH_USER'] 中读取 php 中的用户名。我认为这意味着用户名从 ldap 传递到 nginx,而不是 php.
在 nginx 配置中是否可以只允许用户列表访问文件夹?
更新
在 nginx 中,用户存储在 $remote_user 变量中。是否可以将 $remote_user 与存储在文件中的用户列表进行比较?然后拒绝或允许访问文件夹?
更新
可能我必须使用 map 指令,例如:
map $remote_user $allowed_user {
default 0;
user1 1;
user2 1;
}
然后在合适的位置进行测试:
location /folder/ {
if($allowed_user != 1){
return 403;
}
proxy_pass http://site;
}
但是当我执行 sudo nginx -t
时,我收到以下错误:
nginx: [emerg] unknown directive "if($allowed_user" in /etc/nginx/nginx.conf:104
nginx: configuration file /etc/nginx/nginx.conf test failed
您可以通过 map
指令来完成(请注意 map
翻译定义块应该放在 http 上下文中 server
块):
map $remote_user $deny
username1 0;
username2 0;
...
usernameN 0;
default 1;
}
server {
...
location /folder/ {
if ($deny) { return 403; }
...
}
}
您可以预先生成上述形式的用户列表 (username1 0; username 2 0; ...
),然后将此列表包含到 nginx 配置中:
map $remote_user $deny {
include /path/userlist.txt;
default 1;
}
每当此用户列表文件发生更改时,您都需要重新加载 nginx 配置 (nginx -s reload
)。