我正在尝试在nginx上使用反向代理沿着基本认证。我的API有这样一种设计,其中一些rest调用是开放的,而另一些则需要一个承载令牌。我看到一个老帖子,有人给出了一个想法,在请求中使用一个单独的变量,并将其发送给API。但我希望如果变量在查询中不可用,则不向API发送承载令牌。以下是我的配置:
location / {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding "";
proxy_set_header Authorization "Bearer $arg_token";
proxy_pass_header Authorization;
#proxy_redirect off;
proxy_pass https://192.168.0.37/myapi/;
#proxy_set_header Host $host;
proxy_redirect default;
}
所以我不能发送请求到nginx服务:
http://my-server-ip/api/v1/customer?id=12345&token= 0 pyLQi 6CcHtoEJojPTt 48 qEnqDo/8 NGc但我希望当我需要访问一个开放的API URL时,不需要在请求中发送任何令牌,但使用上述设置,我必须发送令牌,即使是空字符串,因为我的API可以忽略此令牌
http://my-server-ip/api/v1/allcustomers?token=''
有没有可能避免发送空令牌,并在nginx配置中解决这个问题,如果在请求中没有找到令牌,则添加空的承载令牌?
1条答案
按热度按时间hsgswve41#
您可以添加其他位置块以适应不同的身份验证方案。例如,如果在位置“/API”上有需要承载令牌的API端点,则可以在不进行服务器级身份验证的情况下写入位置块。类似地,如果你有需要认证的开放端点,你可以在这个块中添加NGINX认证参数。