我已经安装了启用了auth_request模块的nginx,但是当我尝试设置身份验证时,我遇到了问题。我想通过php脚本进行身份验证,当用户向此位置发出请求,然后nginx请求到php文件,如果响应将是2xx,那么如果响应将是4xx则身份验证为true,则身份验证失败。
这就是我现在所做的,它正在完善这件事,但我不知道如何在php文件上传递参数,如用户名密码,例如: http://example.com/live/index.php?username=test&password=password
这是没有这些参数的配置。
location /live {
auth_request /http_auth;
}
location /http_auth {
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
proxy_pass http://127.0.0.1/login.php;
}
谢谢
答案 0 :(得分:10)
这里的诀窍是合并auth_basic
和auth_request
,这是一个例子:
location = /api {
satisfy any;
auth_basic "Restricted Access";
auth_basic_user_file "/usr/local/nginx/htpasswd";
auth_request /auth;
try_files $uri $uri/ /api.html;
}
location = /auth {
proxy_pass http://localhost:8080;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
您会注意到auth_basic_user_file存在且您可能不想要它,但您可以留下空白文件, satisfy any
将接受任何成功,{{1}将失败,但也会在转发到后端脚本的HTTP标头中设置用户和密码,您可以相应地处理它们。