近期不少朋友发现使用 gitalk 在登录 gitlab 授权时出现错误 error: request failed with status code 403

这是因为 gitalk 在访问 github 时为了解决跨域问题使用了一个反向代理,这个默认的反向代理近期限制了访问,所以无法使用了。

查阅了一些资料后发现不少朋友使用更换代理地址的方式来解决问题:

这次直接去嫖了一个 CORS proxy, 把 gitalk.js 的 6794 行改为 proxy: ‘https://netnr-proxy.cloudno.de/https://github.com/login/oauth/access_token‘, 就可以了。具体能用多久我也没普,且用且珍惜。

但将自己网站的服务依赖于第三方,也不是长久之计,我们为什么不自行搭建一个反向代理来自己使用呢。

解决方案

我们可以使用 nginx 简单的配置一下,即可达到反向代理请求 github 的目的。

配置 nginx 添加以下内容到第一个 location 前面:

   location = /login/oauth/access_token {
       proxy_pass https://github.com;
   }

如果你使用了其他的域名(例如我的网站地址是https://www.appgao.com,我将反向代理配置到了另外一个网站上https://static.appgao.cate.fun,就需要解决跨域问题),则使用下面配置。

   location = /login/oauth/access_token {
       add_header Access-Control-Allow-Origin 'https://www.appgao.com';
       add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
       add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
       if ($request_method = 'OPTIONS') {
             return 204;
       }
       proxy_pass https://github.com;
   }

我将反向代理部署到了 https://static.appgao.cate.fun 这个网站上(其他网站无法使用,因为我配置了 Access-Control-Allow-Origin https://www.appgao.com),然后我需要在 gitalk 中添加以下内容:

proxy: 'https://static.appgao.cate.fun/login/oauth/access_token'

请看下面我的最终配置

gitalk.png

测试效果

现在又可以愉快的评论了,你可以访问这个页面来测试效果: https://www.appgao.com/contact-me.html

QQ20210304-110917@2x.png