移动代码适配 nginx怎么添加Vary HTTP标头?

优采云 发布时间: 2016-11-25 14:30
首先明确,什么是代码适配?
 
代码适配是指,同一个url被访问时,服务器通过UA等方式判断客户端类型,是手机还是PC,然后分别输出不同的html源码给客户端。
 
以下是三种适配方式的区别:

 
在代码适配模式,百度官方给出的适配指引是这样的:

(截图来自官方文档
 
其中在html添加meta标记就不说了,现在解释如何添加Vary HTTP标头
百度站长平台有这样一段介绍:

(截图来自官方文档
操作说明摘录如下:
如果web服务器是nginx的话,第一步要确定安装了ngx_headers_more模块,nginx源码没有包含该模块,需要另行添加。安装方法:
wget 'http://nginx.org/download/nginx-1.5.8.tar.gz'
tar –xzvf nginx-1.5.8.tar.gz
cd nginx-1.5.8/
#here we assume you would install you nginx under/opt/nginx/.(翻译:这里假设你打算将nginx安装在
/opt/nginx/这个目录)
./configure –prefix=/opt/nginx --add-module=/path/to/headers-more-nginx-module
make
make install
第二步,在配置文件nginx.conf中,添加如下代码:
gzip_vary on;
more_set_headers -s 200 "Vary: ""Accept-Encoding, User-Agent";
然后重启服务器。
 
首先明白,nginx要向客户端发送Vary标头,需要支持more_set_headers,它是由一个名字叫做“headers-more-nginx-module”的nginx模块提供的,但是这个模块在nginx安装时,默认并没有编译进去。也就是说nginx默认不支持more_set_headers,所以得先安装这个模块,上述代码就是在重新安装nginx的过程中把这个模块编译进去。
 
但是,如果你复制上面的代码,一步一步操作,到最后肯定是错的。
 
重新清理一下思路:
    1. 我们服务器已经有nginx在运行,所以不要重新安装,以免把以前的配置弄乱。
    2. 我们需要重新编译一个nginx,覆盖原来的,要求nginx版本跟原来一样,原来的配置不能变。
    3. 因此我们需要一个新的nginx安装包,为了安装headers-more-nginx-module这个模块,我们还得需要这个模块的安装包。
    4. nginx安装包并不安装,只是编译,将新的模块一起编译进去。
    5. 我们需要找到编译好的nginx可执行文件覆盖原来的nginx。
    6. 然后我们需要在nginx的设置文件(nginx.conf)中使用more_set_headers,以添加Vary标头。
    7. 重启nginx。结束。
 
现在,我们开始:
    1. 确定nginx原来的安装路径。这个指的是nginx的可执行文件,找到它,记下路径。每个人的服务器可能不一样,请找准你自己的。比如我的:
/www/wdlinux/nginx-1.0.12/sbin/nginx
/*这个nginx就是可执行文件,也就是需要被替换的文件*/
 


    2. 查看原来的nginx安装的时候用的什么配置。
//使用  安装路径 -V  的命令查询,V为大写。如
/www/wdlinux/nginx-1.0.12/sbin/nginx -V

其中红线框内的configure arguments: --user=www --group=www --prefix=/www/wdlinux/nginx-1.0.12 --with-http_stub_status_module --with-http_ssl_module就是原来nginx安装时的配置。nginx version: nginx/1.0.12表示nginx版本号为1.0.12。
 
    3. 获得nginx的官方下载地址。
#http://nginx.org/download/nginx-版本号.tar.gz
//如果你确实要换其他版本,也是可以的,基本无影响
//比如我用1.8.1版本,就是:
#http://nginx.org/download/nginx-1.8.1.tar.gz
    4. 获得headers-more-nginx-module模块的官方下载地址。
进入https://github.com/openresty/headers-more-nginx-module/releases寻找你所要的版本链接,我使用的是当前最新版v0.32。https://github.com/openresty/headers-more-nginx-module/archive/v0.32.tar.gz 

 
    5. SSH登录服务器,下载以上两个资源,并解压:
#到当前用户目录,比如我是root用户,就等是/root目录
cd ~
#下载nginx
wget 'http://nginx.org/download/nginx-1.8.1.tar.gz' nginx-1.8.1.tar.gz
#此时nginx下载已完毕,在/root目录下,名为nginx-1.8.1.tar.gz
#下载模块
wget 'https://github.com/openresty/headers-more-nginx-module/archive/v0.32.tar.gz' headers-more-nginx-module-v0.32.tar.gz
#此时模块下载已完毕,在/root目录下。名为headers-more-nginx-module-v0.32.tar.gz
#解压nginx
tar zxvf nginx-1.8.1.tar.gz
#执行完后/root目录下多出一个nginx-1.8.1的目录,里面就是解压出来的东西
tar zxvf headers-more-nginx-module-v0.32.tar.gz
#执行完后/root目录下多出一个headers-more-nginx-module-v0.32的目录,里面就是解压出来的东西
    6. 配置、编译nginx,将模块编译进去。
#进入nginx解压后的目录
cd nginx-1.8.1
#设置配置参数,加入模块,即在第2步获取的配置参数后加入:--add-module=模块解压目录绝对路径
./configure --user=www --group=www --prefix=/www/wdlinux/nginx-1.0.12 --with-http_stub_status_module --with-http_ssl_module --add-module=/root/headers-more-nginx-module-v0.32
#执行完后,就是编译:
make
#注意这里不用用'make install',即只编译,不安装
#编译完成后,就已经生成了nginx可执行文件,位置在当前nginx-1.8.1目录下objs目录里面,名字就叫nginx

 
    7. 复制可执行文件,替换原来的
#先备份原来的nginx可执行文件,以防意外
cp /www/wdlinux/nginx-1.0.12/sbin/nginx /www/wdlinux/nginx-1.0.12/sbin/nginx-bak
#先停止当前正在运行的nginx进程
service nginxd stop
#再复制新可执行文件,替换原来的
cp /root/nginx-1.8.1/objs/nginx /www/wdlinux/nginx-1.0.12/sbin/nginx
#询问是否覆盖文件,是,输入y
y
#为减少耽搁时间,马上启动nginx
service nginxd start

    8. 找到nginx的conf文件,在原来安装目录里,sbin同级的一个目录,名称就叫conf,里面有个nginx.conf,就是它。

现在要修改这个nginx.conf文件:
#进入所在目录
cd /www/wdlinux/nginx-1.0.12/conf/
#编辑器打开文件
vi nginx.conf
#进入插入编辑模式,输入i
i
#在gzip_vary on;下方加入一句more_set_headers,并把gzip_vary on;注释掉(在前面加#号)
more_set_headers -s 200 'Vary: Accept-Encoding, User-Agent';
#然后按ESC退出编辑模式
#然后保存文件,关闭:
:wq
#再重启一次nginx,使配置文件生效
service nginxd restart
#结束

    9. 去站长平台使用抓取工具,验证一下吧

 

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线