2012-03-14 153 views
2

我正在尝试为两台服务器设置一个nginx负载平衡器/代理,同时在这两台服务器上运行OAuth身份验证应用。 当端口80上运行nginx时,一切运行良好,但是当我将其放在任何其他端口上时,OAuth身份验证失败并显示“无效签名”错误消息。nginx负载均衡器和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:我注意到端口80从OAuth领域属性中省略,但其他端口正常添加。

回答

3

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

要么更新您的客户端说这是端口81或告诉它在服务器上的80

您最喜爱的端口

+0

应用是在8180个端口上运行,而直接的OAuth请求,这些端口通过精细更换81。我试图在第三台服务器端口8000上创建一个LB. 这对Apache LB起作用,但另一个问题迫使我尝试使用nginx。 – ddario 2012-03-14 20:44:41

+1

问题出在'主机'头部。为了使OAuth正常工作,它还需要包含端口。 这个技巧: proxy_set_header Host $ host:$ server_port; – ddario 2012-03-14 21:02:12

+0

还没有尝试过,但这是一个goooood领导:) Thx ddario。 – nolazybits 2013-06-07 04:23:39