需求是这样:
通过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; }
已解决