【问题标题】:How to redirect requests / proxy based on User-Agent (mobile and desktop) using Grunt or Node server?如何使用 Grunt 或 Node 服务器基于用户代理(移动和桌面)重定向请求/代理?
【发布时间】:2015-03-28 00:45:33
【问题描述】:

我正在使用 Grunt 及其代理库 grunt-connect-proxy。我为我的网站的桌面版和移动版设置了两台服务器(两者都有单独的资产等,因此是分开的)。两个站点都托管在 0.0.0.0 上,但在不同的端口(9000 和 10000)上。

如何根据 User-Agent 标头将请求代理到两个不同的服务器(它将告诉我它是移动用户还是桌面用户)?我可以使用 NodeJS 中的其他解决方案吗?

【问题讨论】:

    标签: node.js proxy gruntjs user-agent grunt-contrib-connect


    【解决方案1】:

    我最终编写了一个 NodeJS 服务器,它使用 http-proxy 和 mobile-detect 包来代理请求。

    var servers = {
      desktopClientFrontend: 'http://0.0.0.0:10000',
      mobileClientFrontend: 'http://0.0.0.0:9000',
      railsApiBackend: 'http://0.0.0.0:11000'
    };
    
    var http = require('http'),
        url = require('url'),
        httpProxy = require('http-proxy'),
        MobileDetect = require('mobile-detect');
    
    var proxy = httpProxy.createProxyServer({});
    
    proxy.on('error', function (err, req, res) {
      res.writeHead(500, {
        'Content-Type': 'text/plain'
      });
    
      res.end('Something went wrong. And we are reporting a custom error message.');
    });
    
    var server = http.createServer(function(req, res) {
      if(url.parse(req.url).pathname.match(/^\/api\//)) {
        proxy.web(req, res, { target: servers.railsApiBackend });
      } else {
        var mobileDetect = new MobileDetect(req.headers['user-agent']);
        if(mobileDetect.mobile()) {
          proxy.web(req, res, { target: servers.mobileClientFrontend });
        } else {
          proxy.web(req, res, { target: servers.desktopClientFrontend });
        }
      }
    });
    
    server.listen(80);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2014-03-13
      • 2016-03-14
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多