Archive for the 'nginx' Category



记录WordPress在Nginx下的supercache规则设置

购买了linode vps 后,就开始测试wordpress在nginx运行的问题了,其中一个就是WordPress在Nginx下的supercache规则设置, 参考了网上N位的经验后,按以下设置成功,特意记录下,看来nginx已经开始时主流了.

location /
{
autoindex off;
gzip_static on;
set $wp_super_cache_file ”;
set $wp_super_cache_uri $request_uri;
if ( $request_method = POST )
{
set $wp_super_cache_uri ”;
}
if ( $query_string )
{
set $wp_super_cache_uri ”;
}
if ( $http_cookie ~* “comment_author_|wordpress|wp-postpass_” )
{
set $wp_super_cache_uri ”;
}
if ( $wp_super_cache_uri ~ ^(.+)$ )
{
set $wp_super_cache_file /wp-content/cache/wp_super_cache/$http_host/$1index.html;
}
if ( -f $document_root$wp_super_cache_file )
{
rewrite ^(.*)$ $wp_super_cache_file break;
}
if (-f $request_filename)
{
expires 30d;
break;
}
if (!-e $request_filename)
{
rewrite ^(.+)$ /index.php?q=$1 last;
}
}

把上述代码添加到nginx去. 加进server{…xxx…}中间.

我把上述代码保存成一个叫supercache.conf的文件,然后再nginx.conf段里添加上去,就是像下边这样

server
{
listen    80;
server_name www.lpfrx.com;
index index.html index.htm index.php default.html default.htm default.php;
root  /home/mywww/www.lpfrx.com;
                 include supercache.conf;
                              
location ~ .*\.(php|php5)?$
{
fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires      30d;
}

location ~ .*\.(js|css)?$
{
expires      12h;
}

log_format  www.lpfrx.com  '$remote_addr - $remote_user [$time_local] $request '
             '$status $body_bytes_sent $http_referer '
             '$http_user_agent $http_x_forwarded_for';
access_log  www.lpfrx.com.log  www.lpfrx.com;
}

Tag:

NGINX 502 Bad Gateway错误处理的一个方法记录

NGINX 502 Bad Gateway错误以前遇到过,不过不是常发生,所以也没什么注意,不过今天在网上看到一个方法错误处理方法,觉得很好,于是记录下来,留待以后备用,或者有机会实践下。

记录:

一般nginx搭配php都采用这样的方式:

location ~ \.php$ {
proxy_pass http://localhost:9000;
fastcgi_param SCRIPT_FILENAME /data/_hongdou$fastcgi_script_name;
include fastcgi_params;
}

这个方式只能连接到一组spawn-fcgi开启的fastcgi,在服务器负载稍高时常常出现502 bad gateway错误。

起先怀疑这是php-cgi的进程开得太少,增加后仍然有反映时常有错,偶然间发现php-cgi会报出这样的错误:

zend_mm_heap corrupted

看来是php-cgi在执行某些代码时有问题,以致于该线程中止。

在服务器上可能还会看到php-cgi进程在不断变少,估计是出现错误的php-cgi的进程自动退出了。

php的问题总是不太容易能解决,所以在nginx方面想想办法,nginx的好处是它总是能爆出一些稀奇古怪的做法出来。

在nginx的proxy中,规避莫名其妙错误的办法无非是proxy到一个upstream的服务器组中,然后配置proxy_next_upstream,让nginx遇到某种错误码时,自动跳到下一个后端上。这样,应用服务器即使不稳定,但是在nginx后面就变成了稳定服务。想到nginx的fastcgi和proxy是一路东西,所以proxy能用的经验,移植到fastcgi也能跑得起来。

照着这个思路,用spawn-fcgi多开同样一组php进程,所不同的仅仅是端口:

spawn-fcgi -a 127.0.0.1 -p 9000 -u nobody -f php-cgi -C 100
spawn-fcgi -a 127.0.0.1 -p 9001 -u nobody -f php-cgi -C 100

然后把fastcgi的这段配置改成用upstream的方式:

upstream backend {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}

location ~ \.php$ {
fastcgi_pass backend;
fastcgi_param SCRIPT_FILENAME /data/_hongdou$fastcgi_script_name;
include fastcgi_params;
}

检查配置结果正确,能跑起来;同时在服务器上netstat -n|grep 9000和grep 9001都有记录,证明连接无误;在前台查阅页面,一切运行正常。

这个配置是最简单的配置,既然能连接上upstream,那么很显然upstream的一些东西都可以拿来用,比如ip_hash、weight、max_fails等。

这样的配置在单机下不知能不能共享session,没有测试,如果有问题,可以加上ip_hash,或者配置php把session存进memcached中。

然后就是fastcgi_next_upstream的配置,nginx wiki中没有介绍到这个配置,查了一下,在nginx的CHANGES中有提到,而且出生年月是和proxy_next_upstream一样的。既然如此,那就照proxy_next_upstream一样配吧。一般按默认的值error timeout就可以工作,因为php出现502错误的异常是返回的500错误,所以我把fastcgi_next_upstream定为:

fastcgi_next_upstream error timeout invalid_header http_500;

通过这个配置,就可以基本杜绝任何时常性的500错误,出问题的几率会变小很多,如果客户反映仍然激烈,那么就多增加几组fastcgi进程。

以上配置能够杜绝由于php所引起的“莫名其妙”的时常性的502错误,同时可使nginx搭配php比从前方式更为强悍。假如nginx还是返回502错误,那这次就一定是出现服务器挂掉或其它严重问题的了。

不看不知道啊,原来NGINX 502 Bad Gateway错误处理还可以这样啊!
好久没去搞技术了,发觉技术的东西进步得真快啊!!!

Tag:, ,

freebsd下nginx日志log的截断

刚刚搞好,freebsd下nginx日志log的截断脚本,跟住定义一个cron,在每天晚上23:59执行这个脚本就ok了

以下脚本代码:

Read the rest of this entry »

Tag:

终于用上Nginx的web服务器了

经过两晚的研究和测试,终于在昨晚用上了nginx了,修改了rewrite的规则,搞好了nginx的泛域名绑定,修改好路径,测试了全部网站的访问,也把freebsd的ports升级了,原先的nginx也升级到0.6.32,一切顺顺利利。

现在剩下的就是nginx的log的按日子截断未做,这个慢慢再搞,因为现在已做好了一个perl的例子,应该没问题了。

之前一直在vmware虚拟机里测试,所以现在上线没什么问题了,终于放弃了lighttpd,虽然这个也不错,但为了跟潮流,不过网上说的是nginx很强大,所以才换上了。

看来可以慢慢折腾nginx了,看看那些地方还可以优化。

以前在lighttpd上传文件一定整部机器死掉的,这个问题一直找不到原因,现在nginx上传什么问题也没有,爽啊。

Tag:

使用Nginx的web服务器越来越多

看看这里统计.
http://survey.netcraft.com/Reports/200806/

因为在搞Nginx, 所以突然关心起这些数据来了,看看这网站的今年和上年的统计,nginx的应用越来越多,lighttpd也比下去了,今天在google 时,看见有人说豆瓣也换了nginx了, 上年还看见它用的是lighttpd,   看来这个nginx很火啊,当然,它的性能也听说很好,看见有人在chinaunix的论坛讨论大文件下载: http://bbs.chinaunix.net/thread-1104459-1-1.html 最后好像采用了nginx了,  等我搞掂perl在nginx运行后,立刻把lighttpd换成nginx,哈哈哈.

Tag:, ,

Nginx的泛域名绑定终于搞好了

这阵子在折腾nginx的web服务器,自从看见网上有些老大讲nginx的性能N好,所以这两天在搞搞了,不过最想研究的就是nginx的泛域名绑定,因为现在用的lighttpd服务器上也搞了个这样的设置,当然,一切操作都在VMware的虚拟机内搞了,一直觉得Vmware虚拟机是个伟大的发明.

不过经过今天一天在虚拟机的研究,终于搞好了,系统环境是Debian 4的Linux, PHP Version 5.2.6, Nginx0.6.32手工编译,还有lighttpd-1.4-19编译的spawn-fcgi 。

效果:

Read the rest of this entry »

Tag:, ,