存档

2009年2月 的存档

Nginx 400错误排查:HTTP头/Cookie过大

2009年2月28日

今天有人汇报nginx的HTTP400错误,而且这个HTTP400错误并不是每次都会出现的,查了一下发现nginx 400错误是由于request header过大,通常是由于cookie中写入了较长的字符串所引起的。

解决方法是不要在cookie里记录过多数据,如果实在需要的话可以考虑调整在nginx.conf中的client_header_buffer_size(默认1k)
若cookie太大,可能还需要调整large_client_header_buffers(默认4k),该参数说明如下:
请求行如果超过buffer,就会报HTTP 414错误(URI Too Long)
nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的HTTP错误(Bad Request)。

VN:F [1.9.22_1171]
Rating: 1.5/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

系统管理

Nginx 413错误的排查:修改上传文件大小限制

2009年2月27日

在上传时nginx返回了413错误,查看log文件,显示的错误信息是:”413 Request Entity Too Large”, 于是在网上找了下“nginx 413错误”发现需要做以下设置:

在nginx.conf增加 client_max_body_size的相关设置, 这个值默认是1m,可以增加到8m以增加提高文件大小限制;
如果运行的是php,那么还要检查php.ini,这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误。

post_max_size = 8M
upload_max_filesize = 2M

VN:F [1.9.22_1171]
Rating: 9.5/10 (4 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

系统管理

用Google Analytics 分析站内搜索

2009年2月26日

用Google Analytics 分析站内搜索可以帮助网站主了解用户关注的需求热点和不足,便于对网站内容、产品进行相应调整。操作方法如下:
在Google Analytics中选择左上角的”Analytics设置”,选择域名后修改域名配置文件,然后选择修改“主要网站配置文件信息”->”网站搜索”->”请跟踪网站搜索”

自定义查询参数:网站程序所使用的查询变量名,如本站用的是Wordpress,在搜索“google analytics”时URL为:
http://www.jefflei.cn/?s=google-analytics
则自定义查询参数为s,查询参数最多可设置5个,多个用半角逗号隔开。

google-analytics-site-search

分类:指站内搜索时,可在特定分类内进行信息搜索。设置分类参数可统计用户进行站内搜索时对网站哪些分类信息比较关注。
设置同样对应程序所定义的类别参数,例如使用 Google 高级搜索,搜索关键词SEO,指定文件类型为php文档,则搜索结果URL为:
http://www.google.com/search?as_q=google-analytics&as_filetype=php
结合第1点:as_q 为查询参数,as_filetype 为类别。类别参数也最多设置5个,用半角逗号隔开。

排除参数: 依据analytics配置文件中“排除网址查询参数”指定的排除项,若有需要排除的参数则勾选。

用google analytics跟踪站内搜索,主要的目的还是为了提高网站。如果网站本身有一定的流量,还是很可以从Google Analytics的站内搜索统计中看出一些有用的数据来的:

  • 用户搜索了哪些关键字?
  • 用户没有找到哪些内容?
  • 用户是在哪里进行搜索的?
  • 用户看到的是哪些网页?
  • 搜索后停留的时间、搜索深度……

  这些信息都有助于我们增加相关内容满足用户需求或者改进网站易用性,如,在搜索结果页面放置了帮助说明、搜索举例以及提出查询要求的链接等。

VN:F [1.9.22_1171]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

搜索引擎

几个Google Analytics的重要术语

2009年2月25日

有朋友说,GA中的一些术语看着晕,我想有必要对一些容易混淆的术语简单说明一下, GA的统计术语是符合WAA(Web Analytics Association)标准,我想可能跟GA的中文翻译用词都有些关系吧

第一组: 绝对唯一身份访问者,独立身份访问量,访问次数,综合浏览量

综合浏览量(PageView): 您网站被访问的页数。

独立身份访问量(Uniq PageView): 这个术语在”内容”->”最热内容”中可以看到统计内容和上面的Pageview类似,只是一次会话(session)中的多次访问只算一次。

访问数(Visits): 用户访问的次数,在30分钟内拥有同一个cookie的用户查看多个页面只算一次访问次数(visit),超过这一时间间隔无动作的,则算一次新的访问,这个三十分钟的时间间隔是可以自定义的。

绝对唯一身份访问者(Absolute Uniq Visitor): 相当于WAA metrics defnition中的uniq visitor,这个绝对唯一身份访客指你所需要统计的具体时间段之内的唯一cookie的访客。

第二组术语:跳出率,退出率

跳出率(Bounce Rate)
首先了解”跳出”的概念,跳出(Bounce)简单来说,就是进入网站后,只看了一页就离开了。
跳出率就等于(只看了一页就离开了的访客数)÷(进入的访客总数),如下图。
google-analytics-bounce-rate
需要注意的是,这个跳出率和高级群体(Customer Segmentation)和事件跟踪也是相关的。比如你对流量视频进行了事件跟踪,那么当用户访问页面上流量了视频,那么这个就不算“跳出”了。

退出率(Page Exit Ratio):从当前页退出的次数,与该页总访问数(PV)相除得到的比率
goolge-analytics-exit-rate

我们需要关注网站中的重点页面的退出率如注册的不同步骤,以及电商网站的购物车、结算、付款等,退出率太高就要从网站、流程、定位上找问题。

VN:F [1.9.22_1171]
Rating: 6.0/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

搜索引擎

nginx的301重定向规则

2009年2月24日

今天对博客进行了301重定向,把www.jefflei.com和jefflei.com合并,并把之前的域名也一并合并. 有两种实现方法,第一种方法是判断nginx核心变量host(老版本是http_host):
server {
server_name www.jefflei.com jefflei.com ;
if ($host != 'www.jefflei.com' ) {
rewrite ^/(.*)$ http://www.jefflei.com/$1 permanent;
}
...
}

第二种方法:
server {
server_name jefflei.com;
rewrite ^/(.*) http://www.jefflei.com/$1 permanent;
}

我用的是第一种方法,这两种方法中, permanent是关键,详细说明见nginx重定向规则说明

last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301

好了,现在可以检查结果,这里可以看返回的HTTP头信息:http://www.seoconsultants.com/tools/headers.asp

VN:F [1.9.22_1171]
Rating: 10.0/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

系统管理 ,

Joomla!SEF模块的nginx rewrite 配置

2009年2月23日

#如果要设置nginx下joomla下的seo静态化插件以下这段设置是必须的

if ( !-e $request_filename ) {
rewrite (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ /index.php last;
break;
}
#下面这段是joomla 1.5防止攻击的url rewrite转译

if ( $args ~ “mosConfig_[a-zA-Z_]{1,21}(=|\%3d)” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}
if ( $args ~ “base64_encode.*\(.*\)” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}
if ( $args ~ “(\<|%3C).*script.*(\>|%3E)” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}
if ( $args ~ “GLOBALS(=|\[|\%[0-9A-Z]{0,2})” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}
if ( $args ~ “_REQUEST(=|\[|\%[0-9A-Z]{0,2})” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}
然后将上面的文件命名为vi joomla-sef.conf,然后include到nginx的configure文件中就可以了。

nginx重定向的相关用法可以参照nginx rewrite规则设定详细介绍(中文)

VN:F [1.9.22_1171]
Rating: 4.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: +2 (from 2 votes)

系统管理 ,

WordPress持久链接permalink的Nginx rewrite规则

2009年2月22日

我用wordpress super cache和nginx来加速wp博客网页,由于需要使用wordpress permalink,需要为wordpress建立一个nginx的rewrite规则, 参照了wordpress super cache作者博客中的一篇评论,具体操作方法如下,首先新建一个文件your_nginx_path/conf/wp_rewrite.conf, 建立如下:

if (-f $request_filename) {
expires 7d;
 break;
 }
 
 set $supercache_file ”;
 set $supercache_uri $request_uri;
 
 if ($request_method = POST) {
 set $supercache_uri ”;
 }
 
 # Using pretty permalinks, so bypass the cache for any query string
 if ($query_string) {
 set $supercache_uri ”;
 }
 
 if ($http_cookie ~* “comment_author_|wordpress|wp-postpass_” ) {
 set $supercache_uri ”;
 }
 
 # if we haven’t bypassed the cache, specify our supercache file
 if ($supercache_uri ~ ^(.+)$) {
 set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
 }
 
 # only rewrite to the supercache file if it actually exists
 if (-f $document_root$supercache_file) {
 rewrite ^(.*)$ $supercache_file break;
 }
 
 # all other requests go to WordPress
if (!-e $request_filename) {
rewrite . /index.php last;
}
然后在你的nginx配置文件中include这个文件,重新load配置即可。

VN:F [1.9.22_1171]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

系统管理 , ,

nginx重定向规则详细介绍(原创)

2009年2月20日

Nginx的重定向用到了Nginx的HttpRewriteModule,下面简单解释以下如何使用的方法:

rewrite命令

nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下:
rewrite 正则表达式 替换目标 flag标记
flag标记可以用以下几种格式:
last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
例如下面这段设定nginx将某个目录下面的文件重定向到另一个目录,$2对应第二个括号(.*)中对应的字符串:
location /download/ {
rewrite ^(/download/.*)/m/(.*)\..*$ $1/nginx-rewrite/$2.gz break;
}

nginx重定向的IF条件判断

在server和location两种情况下可以使用nginx的IF条件判断,条件可以为以下几种:
正则表达式

如:
匹配判断

~  为区分大小写匹配; !~为区分大小写不匹配
 ~* 为不区分大小写匹配;!~为不区分大小写不匹配
例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}

文件和目录判断
  -f和!-f判断是否存在文件
 -d和!-d判断是否存在目录
 -e和!-e判断是否存在文件或目录
 -x和!-x判断文件是否可执行
例如下面设定nginx在文件和目录不存在的时候重定向:
if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}

return

返回http代码,例如设置nginx防盗链
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.jefflei.com www.leizhenfang.com;
if ($invalid_referer) {
return 404;
}
}

set

设置nginx变量

VN:F [1.9.22_1171]
Rating: 7.5/10 (15 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 4 votes)

系统管理 ,

推荐一款Awstats的PHP外挂系统Jawstats

2009年2月18日

虽然已经有了免费的 Goolge Analytics,我们还是不能放弃原始 log 的分析。之前介绍过nginx下支持awstats,然而由于数据量比较大,在按月统计的时候,还时有发生超时的现象。今天在浏览时发现JAWStats 是一个用来统计网站日志的工具,目前出到0.7Beta版。这个工具是AWStats生成的数据基础上构造更加清晰美观的关于网站访问数据的图表、表格,并且安装非常简单和快速,号称awstats companion, 在美观性和速度上都有一些提高。更关键的是,这个工具是php写的,因此不再需要nginx有对perlcgi的支持了。

jawstats

下载jawstats后把config.dist.php拷贝到config.php,并配置如下:

$aConfig["site1"] = array( //site1:你的配置文件名,如awstats.www.jefflei.com.conf这里就用www.jefflei.com
"statspath" => "/path/to/data/", //statspath:awstats数据文件的路径;
"updatepath" => "/path/to/awstats.pl/",  //updatepath: awstats.pl执行文件所在目录
"siteurl" => "http://www.my-1st-domain.com",
"sitename" => "My 1st Domain",
"theme" => "default",
"fadespeed" => 250,
"password" => "my-1st-password",
"includes" => "",
"language" => "en-gb"
);

安装好之后,在实际使用过程中发现白页,打开index.php中的error_reporting(0)改成error_reporting(E_ALL)可以看到错误报错,我看到的是分配内存不足,问题出在clsAWStats.php中的这行

$this-&gt;sAWStats = htmlspecialchars(file_get_contents($sFilePath));

找了下jawstats官方论坛,发现支持大数据量的网站数据目前确实有问题, 希望今后jawstats新的版本能越来越完善。

再安装中文语言包,可以下载jawstats语言包,解压缩后上传到lang目录下即可

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

软件和工具

设置WordPress博客的Robots.txt

2009年2月17日

WordPress的robots设定主要是两个目的,一方面减少管理页面被抓取,另一方面降低博客的相似页面。好的robots.txt对于伪装静态(permalink)的wordpress博客来说就更重要了。下面介绍一下wordpress的robots.txt设定

首先我们需要不过滤对一些管理页面,程序和和rss的索引,同时,我们又希望搜索引擎也索引我们上传的内容。如果有一些页面比较类似或者重复,也可以用robots.txt文件更好地控制搜索引擎访问和索引你的网站,通过在robots中指定Disallow规则将类似网页从搜索引擎的索引(Index)中删除。参考了国外一些博客的robots设置,将我博客的robots调整如下:

User-agent: *
Disallow: /*?*
Disallow: /*?
Disallow: /?s=
Disallow: /tag/
Disallow: /rss/
Disallow: /feed/
Disallow: /date/
Disallow: /search/
Disallow: /links-page/
Disallow: /archive/
Disallow: /archives/
Disallow: /category/
Disallow: /category/*/*
Disallow: /trackback/
Disallow: */trackback
Disallow: /contact-form/
Disallow: /page/
Disallow: /pages/
Disallow: */comments
Disallow: /comments/
Disallow: /comments/feed/
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Disallow: /wp-content/cache/
Allow: /wp-content/uploads/
Disallow: /cgi-bin/

# Google Googlebot
User-agent: Googlebot
Disallow: /feed/$
Disallow: /*/feed/$
Disallow: /*/feed/rss/$
Disallow: /*/trackback/$
Disallow: /*/*/feed/$
Disallow: /*/*/feed/rss/$
Disallow: /*/*/trackback/$
Disallow: /*/*/*/feed/$
Disallow: /*/*/*/feed/rss/$
Disallow: /*/*/*/trackback/$
Disallow: /*.php$
Disallow: /*.js$
Disallow: /*.inc$
Disallow: /*.css$
Disallow: /*.wmv$
Disallow: /*.avi$
Disallow: /*.cgi$
Disallow: /*.txt$

# Google Image
User-agent: Googlebot-Image
Allow: /*

User-agent: Mediapartners-Google
Allow: /

User-agent: Adsbot-Google
Allow: /

User-agent: Googlebot-Image
Allow: /

User-agent: Googlebot-Mobile
Allow: /

User-agent: ia_archiver
Disallow: /

User-agent: duggmirror
Disallow: /

Sitemap: http://www.jefflei.com/sitemap.xml

爬虫说明

Adsbot-Google
这个蜘蛛是Google专门抓取广告主AdWords登陆页面质量得分(landing page quality)的
Googlebot
Googles网页(Google Web Index)和新闻(google news)索引网页蜘蛛
Googlebot-Image
Google图片索引网页蜘蛛(Google image index)
Googlebot-Mobile
Google无线的索引爬虫(Google Mobile Index)
Mediapartners-Google
这个蜘蛛是Google专门抓取广告网站决定AdSense内容(Google Adsense Content)相关性等的专用爬虫

检查Robots.txt的设置可以使用Google网站管理员工具robots分析工具,具体的使用请见google robots说明。

需要注意的是,robots.txt只对遵守规矩的蜘蛛有用,对于一些流氓蜘蛛(见我另一篇关于soso spider爬虫的博客),基本等于没有作用。

使用Robots Meta

除了使用robots.txt,还有两种方法可以禁止爬虫索引,一种是在网页的meta中的robots指定NOFOLLOW/NOINDEX, 还有一种办法是在一个具体的link中指定NOFOLLOW。NOINDEX指示搜索引擎不要收录,这样搜索结果中就不会出现该页,而NOFOLLOW则意思说不要跟进索引链接,因此PR不会被计算。在一篇对Matt Cutts访谈中也介绍了一些关于robots的介绍。比如下面这句的意思就是不要索引本页,但是follow本页的链接:
<meta name="googlebot" content="noindex,follow" />

最后,推荐一个Wordpress中Header.php中的一些robots设置的小技巧
<?php if(is_single() || is_page() || is_category() || is_home()) { ?>
  <meta name="robots" content="all,noodp" />
<?php } ?>
<?php if(is_archive()) { ?>
  <meta name="robots" content="noarchive,noodp" />
<?php } ?>
<?php if(is_search() || is_404()) { ?>
  <meta name="robots" content="noindex,noarchive" />
<?php } ?>

VN:F [1.9.22_1171]
Rating: 7.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

软件和工具 , ,