nginx
wordpress在nginx中的rewrite重写规则
[| 2012/05/27 12:02]
对于wordpress开启静态化url时如何在nginx下配置重写rewrite规则,网上一大抄的一个方式是说这样配置:
if (!-e $request_filename)
{
rewrite ^(.+)$ /index.php?q=$1 last;
}
看起来没什么错误,但实际使用中总发现静态文件也被rewrite走了,去nginx官网发现有了新参数:
在location /段里加上一句:try_files $uri $uri/ /index.php?q=$uri&$args;
ok了,轻松愉快。
if (!-e $request_filename)
{
rewrite ^(.+)$ /index.php?q=$1 last;
}
看起来没什么错误,但实际使用中总发现静态文件也被rewrite走了,去nginx官网发现有了新参数:
在location /段里加上一句:try_files $uri $uri/ /index.php?q=$uri&$args;
ok了,轻松愉快。
为博客nginx日志添加请求域名打印(host字段)及添加其他域跳转到主域
[| 2012/05/17 17:40]
前几天百度快照和流量都恢复了,心情很好,但今天看收录时突然发现迁移前服务器绑定的那个临时域名居然也在收录之列,这个不是一个好的现象,因为如果爬虫同时对两个域名同时抓取,会得到相同的内容,对于重复内容是很不利于收录的。查了下快照,发现百度依旧动作很慢,收录只有一页,还是迁移前的那个测试页,google则全都收录了,怪不得迁移时google非常活跃,现在回想应该不是爬主域名,很可能是发现那个临时域名指向的站点大更新,在爬那个。
纠结的是nginx默认配置居然不打印请求的host域名,无法考证之前爬虫爬取情况,亡羊补牢,幸亏nginx默认留空了日志第二个字段,打印的是“-”,正好用来打印域名,将-修改为$host,重启后就打印了。
对于已经收录的临时域名,需要将流量都导入到主域,在nginx里配置了一下301跳转:
if ($host = 'tmpdomain.com' )
{
rewrite ^/(.*)$ http://maindomain.com/$1 permanent;
}
ok
纠结的是nginx默认配置居然不打印请求的host域名,无法考证之前爬虫爬取情况,亡羊补牢,幸亏nginx默认留空了日志第二个字段,打印的是“-”,正好用来打印域名,将-修改为$host,重启后就打印了。
对于已经收录的临时域名,需要将流量都导入到主域,在nginx里配置了一下301跳转:
if ($host = 'tmpdomain.com' )
{
rewrite ^/(.*)$ http://maindomain.com/$1 permanent;
}
ok
nginx为js/css开启gzip压缩节省流量
[| 2012/05/07 14:26]
今天发现一个问题,发现博客的js和css都没有gzip压缩,大号js动辄就20几k,很奇怪,以为是迁移导致的某个地方忘了开,查了下,发现之前的也没开,疑惑。
我明明在ngix配置文件里加了gzip on;了,但为啥js和css没有开呢,查了下nginx文档,原来默认只对text/html类型的压缩。
加了一句:gzip_types application/x-javascript text/css
ok,现在js和css都压缩了,加载速度又提高了不少。
我明明在ngix配置文件里加了gzip on;了,但为啥js和css没有开呢,查了下nginx文档,原来默认只对text/html类型的压缩。
加了一句:gzip_types application/x-javascript text/css
ok,现在js和css都压缩了,加载速度又提高了不少。
nginx强制使用https(http到https自动跳转
[| 2012/03/11 10:45]
nginx对于使用http访问开启了https的站点会返回400.而浏览器输入网址默认是http的,每次都要去改成https很烦,于是考虑自动跳转的方法,刚开始用的$scheme变量判断,如果不是https则跳转。发现无效。
搜了一下,网上的一大抄们都表示rewrite (.*)https://$host/$1 permanent;可以,光目标地址没考虑端口号就让人感觉不是特别靠谱。试了下,果然不行。
想了下,应该是在一开始就被判断出异常,根本没有往后走的缘故。
这时找到一个方法:error_page 497 https://$host:$server_port$request_uri;
497表示使用http连接https的错误码。一旦出错让其跳转到https。
搞定
搜了一下,网上的一大抄们都表示rewrite (.*)https://$host/$1 permanent;可以,光目标地址没考虑端口号就让人感觉不是特别靠谱。试了下,果然不行。
想了下,应该是在一开始就被判断出异常,根本没有往后走的缘故。
这时找到一个方法:error_page 497 https://$host:$server_port$request_uri;
497表示使用http连接https的错误码。一旦出错让其跳转到https。
搞定