【问题标题】:nginx loadbalancer and OAuthnginx 负载均衡器和 OAuth
【发布时间】:2012-03-14 20:32:37
【问题描述】:

我正在尝试为两台服务器设置 nginx 负载均衡器/代理,并在两台服务器上运行经过 OAuth 身份验证的应用程序。 当 nginx 在端口 80 上运行时一切都运行良好,但是当我将它放在任何其他端口上时,OAuth 身份验证失败并显示“无效签名”错误消息。

这是我在 nginx.conf 中的服务器配置:

server {
    listen 80;
    server_name localhost;
    location / {
      proxy_pass  http://webservice;

        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        X-Forwarded-Port $server_port;
        proxy_set_header        X-Forwarded-Host $host;
        proxy_set_header        X-FORWARDED-PROTO https;
    }

有没有人遇到过类似的问题?

PS:我注意到 OAuth 领域属性中省略了端口 80,但正常添加了其他端口。

【问题讨论】:

    标签: oauth proxy nginx load-balancing


    【解决方案1】:

    这可能与 nginx 没有任何关系。 OAuth(1,而不是 2)需要签名 URL,如果您将其移至端口 81,则为 http://webservice:81。确保您的 OAuth 代码知道该网站实际上位于端口 80 而不是 81。

    要么更新你的客户端说它是 81 端口,要么告诉服务器它在 80 上。

    用你最喜欢的端口替换 81

    【讨论】:

    • 应用程序在 8180 端口上运行,并且对这些端口的直接 OAuth 请求可以正常通过。我正在尝试在第三台服务器端口 8000 上创建一个 LB。这在 Apache LB 上有效,但另一个问题迫使我尝试使用 nginx。
    • 问题出在“主机”标头中。要使 OAuth 正常工作,它还需要包含端口。这成功了:proxy_set_header Host $host:$server_port;
    • 还没有尝试过,但这是一个很好的线索:) Thx ddario。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多