The trick here is to combine auth_basic
and auth_request
, here is an example:
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;
}
You will notice that auth_basic_user_file is present and you probably don't want it but you can leave a blank file, the satisfy any
will accept any success, auth_basic
will fail but will also set the user and password in the HTTP Headers that are forwarded to your backend script where you can handle them accordingly.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…