使用 Nginx 内置 $http_user_agent 来区分( 电脑 pc、手机 mobile、平板 pad )端的内容访问...

此博客给出一段Nginx配置代码,用于区分PC端、移动端、iOS - Pad端和Android - Pad端的访问。通过对http_user_agent的匹配设置不同标志位,根据不同设备类型将访问内容指向不同路径。还推荐了学习文章并给出转载来源。

location / {
#pc端内容访问
set $flag "pc";
set $num 1;
set $hua "${http_user_agent}";
set $iospad "${http_user_agent}";
set $androidpad "${http_user_agent}";

#mobile端访问内容
if ( $http_user_agent ~* "Mobile") {
      set $flag "mobile";
}

#ios-pad端访问内容
if ( $iospad ~* "iPad|ipad") {
      set $flag "pad";
}

#android-pad端访问内容
if ( $androidpad ~* "Android") {
      set $num "${num}2";
}

if ( $hua !~* "Mobile") {
    set $num "${num}3";
}

if ( $num = "123") {
     set $flag "pad";
}

root /usr/local/etc/nginx/website/$flag;

index index.html index.htm;
}

 

推荐学习文章:https://yq.aliyun.com/articles/44957

转载于:https://www.cnblogs.com/Kummy/p/6232018.html

<think> 根据用户需求,我们需要配置Nginx,使得当用户使用手机访问PC端网址 gszd.jinzhaokj.cn/ 时,自动跳转到手机端 http://gszd.jinzhaokj.cn/pages/。 我们可以通过判断User-Agent来实现,当User-Agent匹配移动设备时,进行重定向。 配置步骤: 1.Nginx的server块中添加一个location,匹配根路径(即/)。 2. 在该location中,使用if语句判断User-Agent是否包含移动设备的关键词(如mobile、android、iphone等)。 3. 如果是移动设备,则重定向到手机端URL;否则正常访问PC内容。 具体配置如下: ```nginx server { listen 80; server_name gszd.jinzhaokj.cn; # 根路径配置 location = / { # 检测移动User-Agent if ($http_user_agent ~* (mobile|android|iphone|ipad|ipod)) { # 重定向到移动端URL return 302 http://gszd.jinzhaokj.cn/pages/; } # PC端正常处理(例如代理到后端应用或返回静态文件) # 这里假设PC端首页是index.html,位于/usr/share/nginx/html目录下 # 实际应根据情况配置,例如: # root /usr/share/nginx/html; # index index.html; # 或者代理到后端: # proxy_pass http://backend_pc; } # 其他配置... } ``` 注意: 1. 这里我们使用了精确匹配(location = /)来匹配根路径,这样只有访问根路径时才触发跳转。 2. 使用302临时重定向,如果希望永久重定向可以改为301,但注意搜索引擎会记住301重定向。 3. 移动User-Agent的匹配规则可以根据实际情况调整,确保覆盖常见的移动设备。 另外,为了避免重定向死循环(例如,如果手机端的URL再次被重定向),我们需要确保手机端的URL(即/pages/)不会被这个规则匹配到。因为上面的规则只匹配根路径,所以访问/pages/时不会被这个规则匹配,因此不会再次重定向。 如果还需要对网站的其他路径(如/subject/index)进行跳转,可以按照同样的方法配置,或者使用更通用的规则。但是根据用户的需求,目前只需要根路径的跳转。 配置完成后,执行以下命令使配置生效: ```bash nginx -t # 检查配置是否正确 nginx -s reload # 重新加载配置 ``` 测试: 使用手机浏览器访问 http://gszd.jinzhaokj.cn/,应该会跳转到 http://gszd.jinzhaokj.cn/pages/。 如果网站启用了HTTPS,需要将监听端口改为443,并配置SSL证书,同时将重定向的URL改为https协议。 如果需要同时支持HTTP和HTTPS,可以再添加一个server块监听80端口,并将所有HTTP请求重定向到HTTPS,然后在HTTPS的server块中配置上述跳转。 例如,同时支持HTTP和HTTPS的配置: ```nginx # HTTP请求重定向到HTTPS server { listen 80; server_name gszd.jinzhaokj.cn; return 301 https://$host$request_uri; } # HTTPS配置 server { listen 443 ssl; server_name gszd.jinzhaokj.cn; ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/private.key; # 根路径配置 location = / { if ($http_user_agent ~* (mobile|android|iphone|ipad|ipod)) { return 302 https://gszd.jinzhaokj.cn/pages/; } # PC端处理 # ... } # 其他配置... } ``` 这样,当用户通过HTTP访问时,会先被重定向到HTTPS,然后再根据设备类型进行跳转。 以上配置即可满足需求。 §§相关问题§§ 1. 如何让Nginx区分更复杂的移动设备类型? 2. 除了User-Agent,还有哪些方法实现设备识别? 3. Nginx跳转配置如何避免死循环? 4. 如何测试Nginx重定向规则的有效性? </think> 以下是配置Nginx实现手机访问根域名时自动跳转移动端页面的完整方案: ### Nginx配置代码 ```nginx server { server_name gszd.jinzhaokj.cn; # 主域名跳转规则 location = / { # 检测移动端设备 if ($http_user_agent ~* (mobile|android|iphone|ipad|ipod|windows\sphone|blackberry)) { # 重定向到移动端首页 return 302 http://gszd.jinzhaokj.cn/pages/; } # PC端正常处理 proxy_pass http://pc_backend; # 替换为PC端实际后端 } # 移动端页面配置 location /pages/ { proxy_pass http://mobile_backend; # 替换为移动端实际后端 } # 其他通用配置... } ``` ### 关键配置说明 1. **精确位置匹配** `location = /` 确保只匹配根域名请求 2. **移动设备检测** 使用扩展正则表达式覆盖主流设备: ```nginx if ($http_user_agent ~* (mobile|android|iphone|ipad|ipod|windows\sphone|blackberry)) ``` 3. **302重定向** `return 302` 实现临时跳转,保留SEO权重 ### 完整配置步骤 1. **编辑配置文件** ```bash vim /etc/nginx/conf.d/gszd.conf ``` 2. **添加跳转规则** ```nginx server { listen 80; server_name gszd.jinzhaokj.cn; # 根路径跳转 location = / { if ($http_user_agent ~* (mobile|android|iphone)) { return 302 http://gszd.jinzhaokj.cn/pages/; } root /var/www/pc-site; index index.html; } # 移动端服务配置 location /pages/ { root /var/www/mobile-site; index index.html; } } ``` 3. **重载Nginx配置** ```bash nginx -t && nginx -s reload ``` ### 高级优化建议 1. **避免死循环** 添加跳转排除条件: ```nginx if ($http_user_agent !~* "bot|crawler|spider") { # 跳转规则 } ``` 2. **HTTPS适配** ```nginx if ($http_user_agent ~* mobile) { return 302 https://gszd.jinzhaokj.cn/pages/; } ``` 3. **缓存控制** 添加响应头避免浏览器缓存跳转: ```nginx add_header Cache-Control "no-store, no-cache, must-revalidate"; ``` ### 测试方法 1. **模拟手机访问** ```bash curl -H "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)" http://gszd.jinzhaokj.cn ``` 应返回`302`状态码和移动端URL 2. **PC访问验证** ```bash curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://gszd.jinzhaokj.cn ``` 应正常返回PC内容 > 实际部署时请将`proxy_pass`或`root`路径替换为真实后端服务配置[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值