存档

作者存档

NGINX 502错误排查

2009年3月3日

NGINX 502 Bad Gateway错误是FastCGI有问题,造成NGINX 502错误的可能性比较多。将网上找到的一些和502 Bad Gateway错误有关的问题和排查方法列一下,先从FastCGI配置入手:

1.查看FastCGI进程是否已经启动
NGINX 502错误的含义是sock、端口没被监听造成的。我们先检查fastcgi是否在运行

2.检查系统Fastcgi进程运行情况
除了第一种情况,fastcgi进程数不够用、php执行时间长、或者是php-cgi进程死掉也可能造成nginx的502错误
运行以下命令判断是否接近FastCGI进程,如果fastcgi进程数接近配置文件中设置的数值,表明worker进程数设置太少
netstat -anpo | grep "php-cgi" | wc -l

3.FastCGI执行时间过长
根据实际情况调高以下参数值
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

4.头部太大
nginx和apache一样,有前端缓冲限制,可以调整缓冲参数
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
如果你使用的是nginx的负载均衡Proxying,调整
proxy_buffer_size  16k;
proxy_buffers      4 16k;
参见:http://www.ruby-forum.com/topic/169040

5.https转发配置错误
正确的配置方法
server_name www.mydomain.com;
location /myproj/repos {
set $fixed_destination $http_destination;
if ( $http_destination ~* ^https(.*)$ )
{
set $fixed_destination http$1;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Destination $fixed_destination;
proxy_pass http://subversion_hosts;
}

参见:http://www.ruby-forum.com/topic/169040

当然,还要看你后端用的是哪种类型的FastCGI,我用过的有php-fpm,流量约为单台机器40万PV(动态页面), 现在基本上没有碰到502。

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

系统管理

Zencart持久链接的Nginx rewrite规则

2009年3月1日

前几天介绍了如何在nginx下作wordpress的伪静态化Joomla的SEF模块设置。今天顺便介绍下如何在nginx下来做zencart的url伪静态化呢? 这里我们对这个过程做个假单的介绍,首先我们假设你使用的是zencart的Ultimate SEO URLs模块,并且已经安装和设置好了该插件。那么现在我们需要做的就是为zencart建立一个nginx的rewrite规则,具体操作方法如下,首先新建一个文件your_nginx_path/conf/zencart_rewrite.conf, 建立如下:
        # if the requested file exists, return it immediately
        if (-f $request_filename) {
                break;
        }

        rewrite "^/(.*)-p-(.*).html$" /index.php?main_page=product_info&products_id=$2&% last;
        rewrite "^/(.*)-c-(.*).html$" /index.php?main_page=index&cPath=$2&% last;
        rewrite "^/(.*)-m-([0-9]+).html$" /index\.php?main_page=index&manufacturers_id=$2&% last;
        rewrite "^/(.*)-pi-([0-9]+).html$" /index\.php?main_page=popup_image&pID=$2&% last;
        rewrite "^/(.*)-pr-([0-9]+).html$" /index\.php?main_page=product_reviews&products_id=$2&% last;
        rewrite "^/(.*)-pri-([0-9]+).html$" /index\.php?main_page=product_reviews_info&products_id=$2&% last;
        # For wordpress on zencart by Jeff
        rewrite "^/wp/(.*).html$" /index.php?main_page=wordpress&page_id=$1&% last;

        # For eazy pages
        rewrite "^/(.*)-ezp-([0-9]+).html$" /index\.php?main_page=page&id=$2&% last;

        # For Open Operations Info Manager
        rewrite "^(.*)-i-([0-9]+).html" /index.php?main_page=info_manager&pages_id=$2&% last;

        # For dreamscape¡¯s News & Articles Manager
        rewrite "^news/?" /index.php?main_page=news&% last;
        rewrite "^news/rss.xml" /index.php?main_page=news_rss&% last;
        rewrite "^news/archive/?" /index.php?main_page=news_archive&% last;
        rewrite "^news/([0-9]{4})-([0-9]{2})-([0-9]{2}).html" /index.php?main_page=news&date=$1-$2-$3&% last;
        rewrite "^news/archive/([0-9]{4})-([0-9]{2}).html" /index.php?main_page=news_archive&date=$1-$2&% last;
        rewrite "^news/(.*)-a-([0-9]+)-comments.html" /index.php?main_page=news_comments&article_id=$2&% last;
        rewrite "^news/(.*)-a-([0-9]+).html" /index.php?main_page=news_article&article_id=$2&% last;

        # All other pages
        # Don‘t rewrite real files or directories
        rewrite "^(.*).html" /index.php?main_page=$1&% last;

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

系统管理 ,

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 (16 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 4 votes)

系统管理 ,