如何使用nginx代理到需要身份验证的主机?

如何使用nginx代理到需要身份验证的主机?

如何设置 nginx proxy_pass 指令,其中还将包含发送到代理主机的 HTTP 基本身份验证信息?

这是我需要代理的 URL 示例:

http://username:[email protected]/export?uuid=1234567890

最终目标是允许一台服务器显示另一台服务器(我们要代理的服务器)的文件,而无需暴露代理服务器的 URI。按照此处的 Nginx 配置,我现在的工作正确率为 90%:

http://kovyrin.net/2010/07/24/nginx-fu-x-accel-redirect-remote/

我只需要添加 HTTP 基本身份验证即可发送到代理服务器

答案1

我之前写过一篇文章,详情请见此处:

http://shairosenfeld.blogspot.com/2011/03/authorization-header-in-nginx-for.html

例如:

 location / {
    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_pass http://6.6.6.6:80;
    proxy_set_header Authorization "Basic a2luZzppc25ha2Vk";
 }

“a2luZzppc25ha2Vk”是“king:isnaked”的 base64 编码,因此可以用于

http://国王:[电子邮件保护]

请随意查看博客文章以了解更多详细信息。

答案2

我按照 alvosu 的答案得到了这个结果,但我必须在 base64 字符串的引号中输入单词“Basic”,所以它看起来像这样:

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

答案3

proxy_set_header Authorization "Basic USER_AND_PASS"

在哪里USER_AND_PASS = base64(user:pass)

答案4

删除由 nginx 转发的授权标头proxy_set_header Authorization "";

我配置了 nginx 来执行基本身份验证,但是Authorization标头在指令中传递proxy_pass,接收端无法处理令牌。

# Basic Auth
auth_basic "Private Stuff";
auth_basic_user_file /etc/nginx/.htpasswd;

location /server {
    proxy_pass http://172.31.31.140:9090;
    proxy_set_header Authorization "";
}

(具体到我的情况,返回了这个错误Reason: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken

相关内容