7

我已经安装了启用了 auth_request 模块的 nginx,但是当我尝试设置身份验证时遇到了问题。我想通过 php 脚本进行身份验证,当用户向此位置发出请求时,然后向 php 文件发出 nginx 请求,如果响应为 2xx,则身份验证为 true,如果响应为 4xx,则身份验证失败。

这是我现在所做的,它正在完美地工作,但我不知道如何在 php 文件上传递参数,例如用户名密码: http ://example.com/live/index.php?username=test&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;
}

谢谢

4

1 回答 1

10

这里的诀窍是结合auth_basicand 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它将接受任何成功,auth_basic将失败但还将在转发到您的后端脚本的 HTTP 标头中设置用户和密码您可以在哪里相应地处理它们。

于 2014-09-18T14:31:32.053 回答