如何运用Nginx软件搭建出一个用手机和用电脑访问都显示一样页面的网页?
要解决这个问题的核心是:
1.如何识别客户是用手机访问还是用电脑访问的?
2.识别出来后如何实现?
1.如何识别客户是用手机访问还是用电脑访问的?
解答:在Nginx的配置文件中有几行被注释的默认值,主要就是用于记录客户的访问日志;
vim /usr /local /nginx /conf /nginx.conf
#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;
这个日志都记录一些什么信息呢?
主要记录以下这些变量值:
$remote_addr - ##远程地址,也就是客户机的IP地址;
$remote_user ##远程机用的是那一个用户名;
[$time_local] ##什么时间进行的访问;
$request ##客户端的请求是什么,想要访问服务器的什么?
'$status ##客户端查看服务端页面的结果是什么?成功还是失败,200表示成功,404表示失败;
$body_bytes_sent ##客户端访问的网页内存有多大?
$http_referer ##客户端从哪里来,那个网站过来的?
比如:www.163.com 直接访问就是空;
www.baidu.com -------> www.163.com 从百度到163;
'"$http_user_agent ##客户端用户的信息,用的是什么系统,什么浏览器;
$http_x_forwarded_for ##从哪里转发过来的?
知识点拓展:
Trident/7.0 微软新版本浏览器,这是IE浏览器的内核版本;
Chrome/59 谷歌的浏览器;
例如这条日志信息:
192.168.4.10 - - [04/Apr/2019:21:01:16 +0800] "GET /favicon.ico HTTP/1.1" 404 169 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
译为:ip为 192.168.4.10 的客户机,用户名为空,在2019:21:01:16 +0800这个时间,访问过服务器的HTTP/1.1,结果网页报错404,网页流量为169,从这个Mozilla/5.0地方来,客户机的系统是Linux x86_64,通过火狐浏览器访问的Firefox/52.0;
由此,我们可以得出,在Nginx的配置文件只需要加上这样一句话即可判断出客户端用的是手机还是电脑;
if ( $http_user_agent ~ * firefox ) ##如果客户端用的是浏览器;
if ($http_user_agent ~* windows) ##如果客户用的是windows系统;
if ($http_user_agent ~* android) ##如果客户用的是android系统;
if ($http_user_agent ~* ios ) ##如果客户用的是苹果系统;
如果上述信息匹配则,执行下述命令:
rewrite ^( .* ) /luo/$1; ##
2.识别出来后如何实现?
现实场景:
这是一个非常常见的现实场景,现在每个人几乎都有一部手机和电脑,客户有的时候用手机上网,有的时候用电脑上网;
但是手机的大小和电脑的大小,系统,性能都有些差别;
这个时候,我们的开发人员通常会准备两份文件,然后交给运维人员处理;
这个时候,担任运维重担的你如何实现,当客户用手机访问时,系统会识别出来并把手机版的网页文件给客户;
当客户用电脑访问的时候也能够识别出来,并把电脑版的网页文件给客户;
从而给客户良好的使用体验;
解决方案:
第一步、部署Nginx,检查Nginx能否正常运行;
第二步、进如Nginx的配置文件添加参数;
vim /usr /local /nginx /conf /nginx.conf
server {
listen 80;
server_name www.baidu.com;
location / {
root hrml;
index.html index.htm;
if ( $http_user_agent ~ * firefox ) { ##识别客户端的firefox的浏览器,同时也可以设定识别系统等其它;
rewrite ^( .* ) /luo/$1; ##
}
location ~ /.php$ {
root html;
if ( $http_user_agent ~ * firefox ) { ##识别客户端的firefox的浏览器,同时也可以设定识别系统等其它;
rewrite ^( .* ) /luo/$1;
fastcgi_paas 127.0.0.1:900;
fastcgi_index index.php;
include fastcgi.conf;
}
}
注释:
if ( $http_user_agent ~ * firefox ) { ##识别客户端的firefox的浏览器,同时也可以设定识别系统等其它;
~ * ~ 正则匹配, * 不管是大写还是小写字母;
rewrite 重写的意思;
^/ ( .* ) 正则表达式:意为匹配以根号为开头,以任意字符数,出现任意次数的域名;
$1 复制(.*)括号中的内容
翻译成人话就是:
如果客户用份firefox火狐浏览器访问网页,且不管域名是大写字母还是小写字母,当你访问老域名下的任何网页文件,都跳转到新域名下 /luo / $1对应的网页文件;
以上.......
( END)
祝:开心!
罗贵
2019-04-04于深圳
网友评论