如何通过中转代理避免跨域问题?

遇到了一个跨域问题,因为前端需要从多个服务器上获取数据,而让后端去获取数据然后提供接口给前端着实有点麻烦,所以就想能否让前端直接去获取其他网站的数据。

例如本网站是 A,想要请求 B,C,D 3 个网站的数据,那么能否通过一个中转代理服务器让其自动将我们的请求在服务端自动发送给 B,C,D 的服务器,得到响应后自动将结果返回回来。

去看了一下 Nginx 的反向代理,目前的配置

server {
    listen       8000;
    server_name  localhost;

    location / {
        proxy_pass http://localhost:3000;
    }
}

这种配置的想过只能实现 A 访问 Nginx 就如同访问 B 一样,但其他的 C,D 服务器怎么办?能不能配置成 URL 加个参数代表域名,然后 Nginx 自动将参数中的域名替换呢?

但还是不清楚要怎么做,有什么好的解决方案么?(v^_^)v

阅读 2.9k
1 个回答

这个我前两天刚做过,你可以把 location 替换为 /image /backEnd 等等 来匹配发往nginx 的信息,然后再把各个服务器定义好,好像说的有点乱,举个例子吧:


    前端服务器
    upstream frontEnd{
        server XXX weight=1;
    }
    接口服务器
    upstream apiServer{
        server XXX weight=1;
    }

代理规则

    代理到前端服务器
    location /frontEnd{
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        # 代理的地址
        proxy_pass http://frontEnd;
        proxy_redirect off;
    }

    代理到接口服务器
    location /rest{
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        # 代理的地址
        proxy_pass http://apiServer;
        proxy_redirect off;
 }

这样就把 /frontEnd 的请求发送到前端服务器 ,/rest 的请求发送到后端
如果有比较复杂的请求需要匹配 ,那可以查下nginx的匹配规则,可以使用正则
(v^_^)v

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题