Nginx负载均衡器和OAuth

4
我正在尝试为两个服务器设置一个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端口,但其他端口通常会被添加。

1个回答

6

这可能与nginx无关。OAuth(1,而不是2)需要一个签名URL,如果您将其移动到端口81,则为http://webservice:81 。请确保您的OAuth代码知道网站实际上在80端口而不是81端口。

要么更新客户端以指定端口81,要么告诉服务器它在80端口。

将81替换为您喜欢的端口


应用程序正在运行在8180端口,并且直接的OAuth请求通过这些端口是正常的。我正在尝试在第三台服务器上创建一个LB,端口为8000。这在Apache LB上已经可以工作,但是另一个问题迫使我尝试使用nginx。 - ddario
1
问题出在“主机”头部。为了使OAuth正常工作,它需要包括端口。这个方法解决了问题:proxy_set_header Host $host:$server_port; - ddario
还没有尝试过,但这是一个很好的线索 :) 谢谢 ddario。 - nolazybits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接