Loading...

Tag Archive for 'nginx'

    AD: 猛买 | 快递查询 | Jobsdigg | 很棒的男装店

配置nginx以支持直接发送GZip文件

Web服务器大多是支持直接发送GZip文件的。本文算是Rails中使用压缩的静态缓存的姊妹篇,谈谈在nginx中,进行适当配置使nginx直接发送压缩文件到浏览器。 配置起来非常容易。大致如下(实际情况可能更为复杂): location / { set $gzip_suffix ‘.gz’; if (-f $request_filename$gzip_suffix) { add_header Content-Type ‘text/html’; add_header Content-Encoding gzip; gzip off; rewrite (.*) $1.html$gzip_suffix break; } } 在上面这段配置中,先判断是否有xxx.gz文件存在,若有,则进入相应分支。在这个分支中,使用了两个add_header,会在响应头信息中增加相应的字段,以使客户端了解这是经过压缩的内容。若没有Content-Type ‘text/html’,打开页面时浏览器会弹出一个下载提示;若没有Content-Encoding gzip,打开只能看到一堆乱码。下面的 gzip off 则告诉nginx,不必再对这部分内容做压缩。 这样,就可以使nginx支持直接发送GZip压缩后的内容了,而且在浏览器中打开和普通html没有任何区别。但这种配置方式还遗留了一个问题,就是任何gz文件都被作为text/html而发送了。也许有这种需要:请求xxx.xml就将Content-Type设置为text/xml;请求xxx.css就将Content-Type设置为text/css。这当然有办法满足,不过我把这问题留给诸位,可以参考下这篇老文:在nginx中使用多个条件进行rewrite,相信可以助你秒杀这种需求。 此外,推荐一下RackspaceCloud。如果手头没有linux而且不方便拿服务器上的nginx做实验,可以在RackspaceCloud新建个服务器玩儿,搞完删掉就好了,既方便又干净。

nginx出现”too many open files”的解决

中午我的Linode服务器又犯了老毛病,所有网站都不能访问。是因为服务器的nginx不停出错,输出的错误日志(error.log)塞满了整个分区。删除掉错误日志文件并重启nginx以后可以恢复正常。 我查看了一下错误日志的内容,发现全部是“Too many open files while accepting new connection on 0.0.0.0:80”。用Too many open files搜了一下,找到了一个解决方案。 先查了一下文件系统最大可打开文件数: root@li55-4:~# cat /proc/sys/fs/file-max 70133 于是用ulimit修改了一下: root@li55-4:~# ulimit -n 10240 这下把最大打开文件数从1024提高到了10240,应该够用了吧。 最后把”ulimit -n 10240″这一行增加到/etc/rc.local中,以保证每次系统启动都能生效。 这样做是否有效,还有待后续观察。 经过实测,在rc.local中加入这一行是没有效果的,使用ulimit -n 10240进行修改也仅能影响到当前的shell。对这个问题,老王做过的探索,请移步此处查看。修改后,需要重启一次方可生效。 感谢智勇发现问题。

在nginx中使用多个条件进行rewrite

买了VPS以后,不甘只用apache。于是我换上了nginx做Web Server。但原来rewrite规则需要“翻译”成nginx的语法,这里就出了问题。我的blog使用着supercache,另一个网站使用了类似的静态缓存(请看我另一篇文章:8行代码实现supercache)。问题出在哪里呢?supercache的实现方式,是基于多组合条件的rewrite,但nginx恰恰不支持嵌套的或并列的 if 判断语句,于是没法直接支持多条件的rewrite。 比如,在apache中使用supercache时一段配置是这么写的: RewriteCond %{REQUEST_METHOD} !=POST RewriteCond %{QUERY_STRING} !.*s=.* RewriteCond %{QUERY_STRING} !.*p=.* …… RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz [L] 可以看到,apache在经过一大堆RewriteCond的判断后,才进行rewrite。但在nginx中,无法这么写: if ($request_method !~ ^post$ && $request_filename !~ .*s=.* …) { rewrite … } 一时没想到好办法,直到找到一篇文章: nginx rewrite rules for WordPress + WP Super Cache,豁然开朗:虽然没有嵌套的if,但是可以用set语句为一个变量赋值,这样,就可以设置一个变量作为标志位。看看在这种思路指导下的配置: set $supercache_file ”; set $supercache_uri $request_uri; if ($request_method = POST) { set [...]

豆瓣都用nginx了?

年初的时候Fenng曾经写过一篇《豆瓣的Web服务器》,那时豆瓣的服务器们上,都跑着不同版本的lighty。今天随手看了一下,发现只剩下静态文件(js文件)的服务器是lighty了。 blogkid@ubuntu:~$ curl -I http://www.douban.com HTTP/1.1 200 OK Server: nginx …… blogkid@ubuntu:~$ curl -I http://otho.douban.com HTTP/1.1 403 Forbidden Server: nginx …… blogkid@ubuntu:~$ curl -I http://9.douban.com HTTP/1.1 200 OK Server: nginx …… blogkid@ubuntu:~$ curl -I http://www.douban.com/people/ahbei/ HTTP/1.1 200 OK Server: nginx …… blogkid@ubuntu:~$ curl -I http://otho.douban.com/spic/s3091982.jpg HTTP/1.1 200 OK Server: nginx …… blogkid@ubuntu:~$ curl -I http://www.douban.com/js/mine11029.js [...]