Ngix 配置移动端与pc端 反向代理判断

581 阅读1分钟

反向代理, 这个反向很容易让人误解, 总以为是要反着做什么事情似的~这个在英文中的原文也是 ngix reverse proxy 的确翻译过来是反向的意思.其实并不是数据流量的反向, 是通常意义上的代理对象的反向,因为正常的代理, 总是代理客户端, 为客户服务去处理一些复杂的事情. 所以 代理是在客户端的多.这里的 ngix 的反向代理, 是代理服务器这里, 更多体现在 负载均衡, 接口请求转发这里,放在了服务端这边, 就像代理反着帮了服务端代理一样. 理解意思之后, 剩下的应该就容易理解多了。

随着移动互联网时代的来临,很多WEB网站都已经推出了基于手机,Ipad等移动客户端的页面访问,这里介绍一下如何利用用户UA实现用户不同终端下的用户访问:

$http_user_agent 为nginx的内置参数,通过它可以指定用户UA满足某类型时触发什么样的操作,我们这里以iPad为例,配置一下手机端和WEB端的分开访问,首先编辑nginx server {} 程序段,增加如下信息:

当用桌面浏览器和移动浏览器访问的结果是不一样的。其中的手段可能有两种:

  • 转载Ngix反向代理判断
  • 服务端直接判断UA输出不同的界面,JAVA和PHP等后台语言都提供了支持框架

需要在nginx项目根目录存放pc端项目,另一个wap用来存放手机端项目;

一、跳转到二级目录方式:

配置nginx.conf:

server
   {
    listen 80;
    server_name www.123.com;
    index index.html index.htm index.php;
    root  /www;
    location / {
    if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC\-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT\-)|(SonyEricsson)|(NEC\-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi\-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG\-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC\-)|(SED\-)|(EMOL\-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" ) {
          root /www/wap;
        }
}

二、跳转到二级域名方式:

server {
        listen 80;
        server_name baidu.com;
        if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|
        (UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)
        |(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|
        (LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|
        (PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|
        (iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
        {
            rewrite ^/(.*)$ http://m.baidu.com/$1 permanent;               
        }
        location / {
            proxy_pass http://www.baidu.com/;
        }
    }

重新加载nginx即可。