Nginx 配置网站 适配PC和手机

news/2024/5/15 13:03:51/文章来源:https://blog.csdn.net/weixin_34388207/article/details/91849344

为什么80%的码农都做不了架构师?>>>   hot3.png

考虑到网站的在多种设备下的兼容性,有很多网站会有手机版和电脑版两个版本。访问同一个网站URL,当服务端识别出用户使用电脑访问,就打开电脑版的页面,用户如果使用手机访问,则会得到手机版的页面。

判断客户端的设备类型

要想让网站适配PC和手机设备,首先要能做出准确的判断。HTTP请求的Header中的User-Agent可以区分客户端的浏览器类型,可以通过User-Agent来判断客户端的设备。

无论是PC还是手机,由于操作系统、浏览器的多样性,自己来实现这个判断并不容易。

国外有一套开源的通过User-Agent区分PC和手机的解决方案,可以直接使用:

http://detectmobilebrowsers.com/

本案例使用Nginx,在Nginx配置文件中增加以下内容就可以判断设备类型:

set $mobile_rewrite do_not_perform;  if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {  set $mobile_rewrite perform;  
}  if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {  set $mobile_rewrite perform;  
}  if ($mobile_rewrite = perform) {  # 手机  
}  

根据设备适配不同的页面

首先要准备好网站的PC版和手机版两套页面,通过之前对设备的判断,来反向代理到不同的版本:

location / {  proxy_pass http://192.168.2.5;  # 电脑版  if ($mobile_rewrite = perform) {  proxy_pass http://192.168.2.6;  # 手机版  }  
}  

如果是静态页面不需要反向代理,那么用root替换proxy_pass:

location / {  root /html/pc;  if ($mobile_rewrite = perform) {  root /html/mobile;  }  
}  

手机版链接到PC版

在用户打开页面后,如果进入了手机版,可能由于错误判断设备,或者用户想获取更多信息,可能会需要打开PC版。在手机版页面的底部,通常会有一个链接指向PC版:

可以通过在点击“电脑版”链接的时候用JavaScript设置一个Cookie来实现这个功能:

<a href="http://xxx.com/" onclick="document.cookie = 'gotopc=true'">电脑版</a>  

同时在Nginx中加入判断,如果包含此Cookie则进入PC版:

if ($http_cookie ~ 'gotopc=true') {  set $mobile_rewrite do_not_perform;  
}  

调试

完成以上配置后,可以通过Chrome浏览器来模拟手机、平板电脑等设备。

131924_V8Wf_2273688.png

 

完整的Nginx配置:


#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;#移动端跳转配置set $mobile_rewrite do_not_perform;if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {set $mobile_rewrite perform;}if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {set $mobile_rewrite perform;}if ($http_cookie ~ 'gotopc=true') {set $mobile_rewrite do_not_perform;}location / {root   html;#移动端跳转配置if ($mobile_rewrite = perform) {root   html/m;}index  index.html index.htm;}error_page  404              /400.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

 

转载于:https://my.oschina.net/sdlvzg/blog/1796688

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_745493.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php网站上传木马,php一句话木马怎么上传

一句话木马上传常见的几种方法&#xff1a;1、利用00截断&#xff0c;brupsuite上传利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格&#xff0c;产生0X00上传截断漏洞。假设文件的上传路径为http://xx.xx.xx.xx/upfiles/lubr.php.jpg&#xff0c;通过Burpsuite…

使用HTTP POST请求12306网站接口查询火车车次API

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;使用12306网站提供的接口&#xff0c;传入参…

大型网站技术架构之核心架构要素

2019独角兽企业重金招聘Python工程师标准>>> 前言 所谓架构&#xff0c;一种通俗的说法就是“最高层次的规划&#xff0c;难以改变的决定”&#xff0c;这些规划和决定奠定了事物未来发展的方向和最终的蓝图。 而软件架构即“有关软件整体结构与组件的抽象描述&…

百度快照快速排名,路越来越难走,网站优化的第二春来了

继17年11月百度推出惊雷算法以来&#xff0c;就在昨天百度对惊雷算法进行了2.0升级。2.0主要针对“恶意制造作弊超链”和“恶意刷点击”的作弊行为进行了算法升级。 此次算法相对于之前更严重的是&#xff1a;惊雷算法2.0将对作弊的网站限制搜索展现、清洗作弊链接、清洗点击&a…

PR与BR的区别,有什么SEO参考价值!

虽然&#xff0c;谷歌PR早已停止更新&#xff0c;但如果你今年在关注域名抢注市场&#xff0c;你会发现一个有兴趣的现象&#xff0c;那就是PR值高的域名&#xff0c;经过竞价&#xff0c;价格是一路水涨船高。这很明显说明一个问题&#xff0c;高PR值的域名在建站中&#xff0…

nginx网站攻击防护

1.上上个月架构全部迁移上云以后&#xff0c;总的来说比较稳定&#xff0c;业务量也上来&#xff0c;可爱的坏人也来了&#xff0c;7X24小时不停恶意攻击我的网站&#xff0c;第一次收到报警是网站流入流量1分钟以内连续3次超过1000000bps,换算下1M/s秒,平时没那么大流量的啊&a…

大电商网站导航用户体验对比

最近挺感兴趣研究电子商务网站的导航&#xff0c;特地找6个网站做横向对比四个综合性大站 http://www.360buy.com/ http://dangdang.com/ http://www.suning.cn/ http://shop.qq.com/ 两个垂直电商站点 http://www.letao.com/ http://www.mbaobao.com/ 先上截图&#xff1a; 京…

新网站如何通过技巧快速获得流量?

任何一个流量类的网站都需要长期的seo优化与维护&#xff0c;多数站长搭建网站的目的也是通过网站获得一定的流量和转化&#xff0c;但是做过seo的朋友都知道&#xff0c;网站获得大量流量最好的方法就是获得高的排名&#xff0c;但是通常新网站想要通过seo获得排名是需要长时间…

个人博客一|抓取崔庆才个人博客网站前端源码

1、准备 工具&#xff1a;仿站小工具V9.0 工具获取方式一&#xff1a; 关注微信公众号 微信公众号『stormsha』&#xff0c;后台回复『仿站工具』获取工具 工具获取方式二&#xff1a; 仿站小工具官网 https://smalltool.github.io/崔庆才博客 https://cuiqingcai.com/从网站源…

网站优化 14条--雅虎十四条优化原则

相信互联网已经越来越成为人们生活中不可或缺的一部分。Ajax&#xff0c;flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功 能。比如Google机会已经把最基本的office应用都搬到了互联网上。当然便利的同时毫无疑问的也使页面的速度越来越慢。自己…

网站漏洞怎么修复对于thinkphp的漏洞修复

2019独角兽企业重金招聘Python工程师标准>>> THINKPHP漏洞修复,官方于近日&#xff0c;对现有的thinkphp5.0到5.1所有版本进行了升级&#xff0c;以及补丁更新&#xff0c;这次更新主要是进行了一些漏洞修复&#xff0c;最严重的就是之前存在的SQL注入漏洞&#xff…

英文SEO采集伪原创软件Kontent Machine注册使用实战教程!

做跨境电商的童鞋们&#xff0c;总会遇到这样的问题&#xff1a;我们英文很差或者一般&#xff0c;无法写出精彩的原创英文文章进行SEO推广。这确实是很难的&#xff0c;即使许多商务英语过硬的都难以写出高质量英文原创文章&#xff0c;因为你不熟悉他们的生活环境&#xff0c…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能&#xff0c;通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

使用hexo + github搭建个人博客网站

做一个积极的人编码、改bug、提升自己我有一个乐园&#xff0c;面向编程&#xff0c;春暖花开&#xff01;搭建个人 博客&#xff0c;手把手教程&#xff0c;&#xff0c;感谢长风破&#xff01; 一个在技术路上努力的勇者&#xff01;我搭建的博客地址&#xff1a;http://www.…

32个设计非常精美的国外网站作品范例(上篇)

让网站的设计能够吸引用户的眼球是每一个专业网页设计师的梦想。为了让网站更具吸引力&#xff0c;设计师们在设计之前需要在头脑中规划好排版、字体的选择、插图以及配色方案等等。因此&#xff0c;要设计出一个精美的网站对于设计师们来说是件非常有挑战的事情。今天这篇文章…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能&#xff0c;通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

如何在网页上显示其他网站的数据_这里有一份HTML的超全教程,自学建网站不再是梦...

在互联网高速发展的今天&#xff0c;我们通过浏览器可以看到各种各样的网站&#xff0c;包含了各式不同的领域还有内容&#xff0c;通过点击网站上的标签和栏目我们就能够很方便地看到网站上显示的各种数据&#xff0c;而这些都是建立在HTML这种标记语言的基础上做到的。HTML的…

浏览器打开出现证书错误_IE提示已阻止此网站显示有安全证书错误的内容

问&#xff1a;访问邮箱、支付宝等网站时&#xff0c;IE提示已阻止此网站显示有安全证书错误的内容&#xff0c;无法继续操作&#xff0c;怎么办&#xff1f;答&#xff1a;推荐使用以下三步法排查、解决该问题&#xff01;第一步&#xff1a;看一下你的系统时间是否正确。看清…

百度分享代码_wordpress商城网站添加分享按钮方法

前面好一佳说到了wordpress商城网站设置网站客服方法&#xff0c;你是不是已经学到了&#xff0c;简单的吧。一个网站如果做得好了&#xff0c;客户喜欢了&#xff0c;是不是就很想把这个网站分享给自己的朋友&#xff0c;这个时候分享按钮就显得格外的重要了&#xff0c;如果一…

python中series怎么重建索引_搜索引擎优化中网站的分类和标签怎么设置 - 公司动态...

在搜索引擎优化&#xff0c;大型的网站中我经常会看到有着乱七八糟分类和标签。为内容增加分类和标签是分类系统中典型的方法&#xff0c;如果使用得当&#xff0c;将会增强搜索引擎优化。但如果使用不当&#xff0c;可能会影响体验&#xff0c;甚至排名。下面和搜索引擎优化小…