cari

Rumah  >  Soal Jawab  >  teks badan

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

需求是这样:

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

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

下面是无法使用的代码:

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;
    }
迷茫迷茫2788 hari yang lalu363

membalas semua(1)saya akan balas

  • PHP中文网

    PHP中文网2017-04-17 16:15:31

    已解决

    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;
        }
    }

    balas
    0
  • Batalbalas