node.js - nginx下根据ua来源判断是启用静态目录还是使用反向代理

 苏小丫123_877 发布于 2022-10-30 23:12

需求是这样:

通过nginx匹配ua中的关键字可以得到用户是来自移动设备或者pc,

然后我拿这个变量去做如下判断:

  • 如果是移动端,则指向/usr/local/wwwroot/surmon.me.mobile/dist;静态目录,并做重写规则处理

  • 如果是PC端,则反向代理至3000端口,不做静态处理,一切交给3000

下面是无法使用的代码:

server {
        listen 80;
        listen 443 ssl;
        server_name surmon.me www.surmon.me;
        ssl_session_timeout 5m;
        
        # 对http和非主域名进行重定向
        set $need_rewrite 0;
        if ($scheme = http) {
            set $need_rewrite 1;
        }
        if ($host = "www.surmon.me") {
            set $need_rewrite 1;
        }
        if ($host = "wordpress.surmon.me") {
            set $need_rewrite 1;
        }
        if ($need_rewrite = 1) {
            return 301 https://$server_name$request_uri;
        }
        
        # 是否为移动端请求
        set $mobile_request 0;
        if ($http_user_agent ~* '(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry|Windows Phone)') {
          set $mobile_request 1;
        }
        location / {
        
          root /usr/local/wwwroot/surmon.me.mobile/dist;
          # 移动端请求,则指向本地项目目录
          if ($mobile_request = 1) {
            root /usr/local/wwwroot/surmon.me.mobile/dist;
            break;
          }
          
          # PC端请求
          if ($mobile_request != 1) {
            proxy_set_header Host $host;
            proxy_set_header X-NginX-Proxy true;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:3000;
            proxy_redirect off;
          }
        }
        # 移动端请求,则响应spa重写规则
        # if (!-e $request_filename) {
            # set $mobile_request 2;
        # }
        # if ($mobile_request = 2) {
            # rewrite ^/(.*) /index.html?$1 last;
        # }
        
        # 反代服务
        location ~ "^/proxy/(.*)$" {
          resolver 114.114.114.114 114.114.115.115 8.8.8.8;
          proxy_pass http://$1;
          proxy_redirect off;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $remote_addr;
          expires 7d;
        }
        
        access_log off;
        error_log /usr/local/wwwlogs/nginx/surmon.me.error.log;
    }
1 个回答
  • 已解决

    location / {
            
        # 代理设置
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          
        # PC端请求,则代理至端口
        if ($mobile_request = 0) {
           proxy_pass http://127.0.0.1:3000;
           break;
        }
            
        # 移动端请求,则指向本地项目目录
        if ($mobile_request = 1) {
           root /usr/local/wwwroot/surmon.me.mobile/dist;
        }
          
        # 移动端请求,则响应spa重写规则
        if (!-e $request_filename) {
            rewrite ^/(.*) /index.html?$1 last;
        }
    }
    2022-10-31 22:19 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有