Passport.js express google oauth 在nginx上出现502 Bad Gateway错误。

21 浏览
0 Comments

Passport.js express google oauth 在nginx上出现502 Bad Gateway错误。

我正在尝试使用passport.js为Express.js应用程序实现简单的Google OAuth,按照这个指南进行操作(只需将facebook替换为googlehttps://github.com/passport/express-4.x-facebook-example/blob/master/server.js

当我在本地尝试时,一切似乎都正常。当我将其部署到我的Ubuntu生产服务器时,在从Google重定向回/login/google/return终点时,出现502 Bad Gateway错误。

app.get('/login/google/return', 
  passport.authenticate('google', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });

如果我注释掉passport.authenticate(\'google\', {..})这一行,则错误会消失。在检查nginx错误日志时,我看到了这个错误

upstream sent too big header while reading response header from upstream

这是nginx的服务器配置块:

location /auth/ {
   proxy_pass http://0.0.0.0:3000/;
}

这意味着我将通过转到https://example.com/auth/login/google进行Google登录,被重定向到https://example.com/auth/login/google/return?code=4/adasfdafdsfd#,然后发生502错误。

我尝试在我的OS X开发机上设置类似的nginx环境,但问题在那里并没有发生。

我还尝试添加以下内容到nginx块配置,但也没有帮助

proxy_buffers 8 16k;

我已经尽力解决这个问题了。任何人的建议都将不胜感激。这是我的项目链接到目前为止https://github.com/tnguyen14/auth/blob/master/index.js

admin 更改状态以发布 2023年5月24日
0
0 Comments

所以我接近了。 proxy_buffers 8 16k; 不够用。添加下面这两行在nginx中解决了它:

proxy_buffers 8 16k;
proxy_buffer_size 32k;

更新:结果发现,它抱怨头的大小是因为我没有充分序列化用户资料对象,因此对象太大了以至于cookie无法存储。由于我使用了cookie-session,所有这些数据都被塞进cookie里面,导致它太大。

通过减少passport登录状态中将被序列化的东西来解决这个问题,而无需添加nginx配置。

0