北极寒流 » 网络资源 » wdcp环境下nginx升级到任意版本的脚本 - 2015.12.31

wdcp环境下nginx升级到任意版本的脚本

wdcp环境下nginx升级到任意版本的脚本,根据wdcp官方论坛网友提供的nginx升级到任意版本的脚本,并且添加了新的编译语句。该脚本提供了附带识别真实ip的功能,用了各种cdn和阿里云的云盾的wdcp用户推荐使用哦。

wdcp下nginx升级脚本的下载和安装

nginx升级脚本的下载地址:http://www.jicker.cn/down/2015/2/nginx_up.sh

把脚本丢到服务器的/root目录,或者登陆服务器后,使用

wget  http://www.jicker.cn/down/2015/2/nginx_up.sh  命令下载;

然后执行命令 sh nginx_up.sh 1.7.9 ;   这里1.7.9你可以填写你想升级到的任意版本nginx的版本号,我反正是直接升级到目前最高的nginx1.7.9版本了。

个人建议:把服务器的nginx停掉再升级。我在nginx跑的时候升级,出现了两次升级完成后nginx.conf配置文件丢失的问题。。。我从老版本的nginx里复制了一份到升级后的nginx目录里,解决了这个问题。

脚本增加了http_realip_module的编译语句

http_realip_module语句可以识别使用各种cdn或者阿里云云盾后,nginx无法拿到访客真实ip的问题。在cdn日渐流行的当下,在linux安全软件日益普及的情况下,强烈建议使用nginx的时候,编译上该module。

其实上面的nginx_up.sh的代码就是下面内容,你可以按你需要增加、修改模块(比如我下面的代码是增加了headers-more-nginx-module的),

#!/bin/bash
# nginx update scripts
# url http://www.wdlinux.cn
# author wdlinux
if [ ! $1 ];then
ver="1.2.9"
else
ver=$1
fi
cd /tmp
wget http://down.wdlinux.cn/in/pcre_ins.sh
sh pcre_ins.sh
wget -c http://nginx.org/download/nginx-$ver.tar.gz
[ $? != 0 ] && echo "down err" && exit
tar zxvf nginx-$ver.tar.gz
cd nginx-$ver
./configure --user=www --group=www --add-module=/www/tmp/headers-more-nginx-module --prefix=/www/wdlinux/nginx-$ver --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
[ $? != 0 ] && echo "configure err" && exit
make
[ $? != 0 ] && echo "make err" && exit
make install
[ $? != 0 ] && echo "make install err" && exit
mv /www/wdlinux/nginx-$ver/conf/nginx.conf /www/wdlinux/nginx-$ver/conf/nginx.conf.default
cp -pR /www/wdlinux/nginx/conf/* /www/wdlinux/nginx-$ver/conf/
service nginxd stop
rm -f /www/wdlinux/nginx
ln -sf /www/wdlinux/nginx-$ver /www/wdlinux/nginx
sed -i '/limit_zone/d' /www/wdlinux/nginx/conf/nginx.conf
service nginxd start
echo
echo
echo "Nginx Update Is OK"
echo "Current Ver Is:$ver"
echo

注意其中的--add-module=/www/tmp/headers-more-nginx-module 路径,你需要先下载好ngx_headers_more模块,丢到服务器相应位置。

ngx_headers_more 模块包下载地址:http://github.com/agentzh/headers-more-nginx-module/tags

为什么要增加headers-more-nginx-module模块呢,因为百度建议采用代码适配的网站最好修改服务器http头信息,以便让百度爬虫确认你的站点是pc页面还是手机页面

如何修改服务器http头信息中的Vary项

在修改http头信息中的Vary项,之前首先要查看一下自己网站的http响应头,看Vary项是已经被修改。没有修改之前的Vary项,常见的都是只有Accept-Encoding,如下图所示:

vary1

查看http返回头的方式有很多,百度站长工具、chinaz、抓包工具等都可以查看,我个人经常使用的是百度站长工具中的抓取诊断工具。

当返回的头中,有Vary:User-Agent 或者Vary:Accept-Encoding User-Agent 就表明我们的服务器端的修改和设置已经成功,显示如下图所示:

Vary2

具体修改http头的方法根据不同的web服务器用不同的设置方法:

1、web服务器是:apache

第一步、服务器必须是安装有mod_headers模块

第一次编译安装apache,确保./configure--prefix=/usr/local/apache2 --enable-rewrite --enable-so --enable-headers--enable-expires --with-mpm=worker --enable-modules=most --enable-deflate等,后面有--enable-headers;

如果apache已经安装编译好了,httpd -M 指令可以列出编译过的模块,同时能看到哪些模块是static静态编译,哪一些是shared动态加载的。

要往已经编译安装好的apache添加mod_headers模块,要在httpd的源文件里面找到mod_headers.c ,运行程序编译出mod_headers.so ,然后在httpd.conf添加进来,参考步骤如下:

#cd /root/src/httpd-2.2.26/modules/mappers

#/usr/local/apache/bin/apxs-c mod_headers.c

#gcc-shared -o mod_headers.so mod_headers.o -lgdbm

#/usr/local/apache/bin/apxs-i -A -n mod_headers mod_headers.so

/usr/local/apache/bin/是正在使用的apahce的目录

第二步、在httpd.conf 中添加headers_module模块

找到# LoadModule,在它的下一行插入:

LoadModule headers_module  modules/mod_headers.so

保存更新,然后在要修改的目标站点的配置文件中,添加下面语句:

<IfModule mod_headers.c>

<FilesMatch".(js|css|xml|gz|html)$">

Header append Vary: User-Agent

</FilesMatch>

</IfModule>

保存之后,然后重启apache就可以生效了。不需要对服务器进行重新编译。

2、web服务器是:nginx

第一步、确定安装了ngx_headers_more模块。nginx源码没有包含该模块,需要另行添加。

安装方法(如果用上面的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/.

./configure –prefix=/opt/nginx \--add-module=/path/to/headers-more-nginx-module

make

make install

在配置文件nginx.conf中,添加如下代码:

#gzip_vary on;   (其实这句的作用就是增加Vary:Accept-Encoding的功能,因为下面整合成一句了,所以注释掉)
more_set_headers -s 200 'Vary:Accept-Encoding,User-Agent';

然后重启服务器即可生效。

附,其他相关内容

百度和Google对于网站采用代码适配(Dynamic Serving)制作的移动版网页,都建议在HTTP报文头中使用Vary:User-Agent字段。

什么是代码适配(Dynamic Serving)?

网站移动版网页有3种方式生成:

1, 跳转适配

跳转适配就是采用跟桌面版(PC端)不一样的URL,服务器检测访问者浏览器发出的请求中的UA(User-Agent),然后使用 HTTP 重定向和 Vary HTTP 标头重定向到相应的页面。

2, 响应式页面布局

这种方式的URL是一样的,服务器也不检查访问者浏览器发出的请求中的UA,服务器针对任何访问者返回的内容都保持一致。

3, 代码适配(Dynamic Serving)

这种方式制作的移动版网页,URL跟桌面版一致,但是服务器返回的内容却不一样。服务器会检查访问者浏览器发出的UA,根据不同的UA,返回不同的网页内容,但是URL一样。

响应式页面布局的方式看起来是最简单的,但是要求HTML5代码要写的很漂亮,而且浏览器还要兼容,这个难度对麦新杰来说比较大,响应式布局的网站对于低版本的浏览器的支持也很差。跳转适配需要不一样的URL,比较麻烦。对于WordPress网站来说,也许代码适配是难易程度适中的一个选择。

代码适配配置Vary:User-Agent字段对搜索引擎很友好

代码适配(Dynamic Serving)意味着你的网站服务器要根据UA来返回不同版本的内容,比如移动版网页,跟桌面版布局不一样。这就需要在HTTP报文头中配置Vary:User-Agent字段。百度和Google都建议这么做,这样它们的爬虫就能够专门去识别移动版网页的内容。这样做对搜索引擎是非常友好的,有利于排名。

配置Vary:User-Agent字段,让服务器可以根据UA动态响应不同内容

代码适配(Dynamic Serving)配置Vary:User-Agent字段是移动SEO必须要做的功课。

代码适配的方法带来的一个好处是保持了URL的一致性。

URL不变,服务器根据不同UA返回不同内容

网络缓存带来的问题

现在大多数网站都是用CDN网络来加速网络,实际上就是缓存。CDN网络中的服务器将你的网站页面做个缓存,有访问来的时候,就不到服务器去请求了,CDN网络中的服务器直接就响应了用户的请求。

但是,这里有个问题,在我们的网站每个页面都有两个版本的情况下,CDN网络如何知道缓存那个版本呢?它是无法预测用户是来自移动端,还是来自PC端的。

这个问题的现状是:如果网站使用了Vary:User-Agent字段,CDN网络有可能不会缓存网站的页面。这根CDN网络内部具体实现有关系。

总之,使用Vary:User-Agent字段,不会给用户添乱,最多就是CDN网络不加速了。

如何配置Vary:User-Agent字段

注意,如果你的网站是响应式的布局,就不需要配置Vary:User-Agent字段!

1, 在Apache中配置Vary:User-Agent字段

将下面这句话加入网站根目录的.htaccess文件中,或者加入Apache的主配置文件httpd.conf:

Header append Vary User-Agent

在WordPress中配置Vary:User-Agent字段

将下面这段代码加入主题的functions.php文件:

 

function add_vary_header($headers) {

$headers['Vary'] = 'User-Agent';

return $headers;

}

add_filter('wp_headers', 'add_vary_header');

这段代码的意思就是在wp_headers过滤器中,给发送出去的HTTP报文头增加Vary:User-Agent字段。这个方法比较简单,适合不能自己编辑网站.htaccess文件或者httpd.conf文件的虚拟主机场景。

使用php代码配置Vary:User-Agent字段

将下面代码加入网站代码合适位置:

<?php header("Vary: User-Agent, Accept"); ?>

对于WordPress网站,这段代码可以加到在header.php文件中的合适位置。

用php代码的好处是:我们可以区别对待不同的页面,也许你的网站不是所有的页面,都需要设置Vary:User-Agent字段,比如可能你的网站有部分页面是简单的响应式布局。

4, 在Nginx中配置Vary:User-Agent字段

需要Nginx安装ngx_headers_more模块,具体配置如下:

more_set_headers -s 200 "Vary: " "Accept-Encoding, User-Agent";

保险起见,最好用http headers check tool工具建议一次http头返回状态。

资料来源:

http://www.jicker.cn/3775.html

http://www.zpyshow.com/archives/1150

http://www.maixj.net/wangzhan/http-vary-user-agent-9017

31

wdcp环境下nginx升级到任意版本的脚本

分享到: