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


41

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

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

http://username:password@192.168.0.5/export?uuid=1234567890

最终目标是允许一台服务器提供来自另一台服务器(我们正在代理的服务器)的文件,而不会暴露代理服务器的URI。通过遵循在这里找到的Nginx配置,我现在可以90%正确地工作:

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

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


@all:确保你需要HTTP基本身份验证使用此解决方案的时候-而不是HTTP摘要式身份验证;)有相当辛苦调试各地,直到我想通了...... stackoverflow.com/questions/9534602/...
SimonSimCity

Answers:


57

我前一阵子做了一篇文章。在这里查看详细信息:

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:// king:isnaked@6.6.6.6

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


2
链接已断开
Alex

1
链接现在在这里:shairosenfeld.blogspot.com/search?q=nginx,以防万一有人想知道
ckm

1
我需要更困难的事情
Ilja

7
您的解决方案不够灵活。动态编码username:password可能非常有用。首先,nginx必须从URL解析username:password,其次,nginx必须对该数据进行编码并设置在适当的标头中。我不想对编码的凭证进行硬编码。
约翰尼

在安装程序上尝试时收到“错误请求”。
Spock 2015年

21

我使用alvosu的答案来解决这个问题,但必须在base64字符串的引号内输入单词“ Basic”,因此它看起来像这样:

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

1
您知道如何使用Nginx快速编码username:password吗?硬编码的凭据不灵活,因为我想使用用户在URL中指定的凭据对用户进行身份验证。
约翰尼

1
我发现了如何使用nginx wiki.nginx.org/HttpSetMiscModule#set_encode_base64编码为base64 。这比硬编码凭据更有用。
约翰尼

@Johnny指向这些文档的链接现在在这里:github.com/openresty/set-misc-nginx-module#set_encode_base64
Al Dass


2

删除由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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.