Welcome to Snooda's Blog
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强制使用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。
搞定
nginx做反向代理proxy_pass,proxy_redirect的使用
[
|
2012/03/11 01:39]


今天用nginx作为trac的反代,发现一个问题,就是登入登出跳转的时候是白页,看了下网页相应内容,发现相应的location是空的。查了一下发现是只单纯用了proxy_pass,没有使用proxy_redirect.
假设前端url是example.com。后端server域名是in.com,那么后端server在返回refresh或location的时候,host为in.com,显然这个信息直接返回给客户端是不行的,需要nginx做转换,这时可以设置:
proxy_redirect http://in.com /
nginx会将host及port部分替换成自身的server_name及listen port。不过这种配置对server_name有多个值的情况下支持不好。
我们可以用nginx内部变量来解决这一问题:
proxy_redirect http://in.com http://$host:$server_port
搞定
如果不设定的话,proxy_redirect默认是default属性,官网例子是这样介绍default的:
我试了下,location /{}规则时似乎不太正常,会导致location为空。这个有待详细考证
假设前端url是example.com。后端server域名是in.com,那么后端server在返回refresh或location的时候,host为in.com,显然这个信息直接返回给客户端是不行的,需要nginx做转换,这时可以设置:
proxy_redirect http://in.com /
nginx会将host及port部分替换成自身的server_name及listen port。不过这种配置对server_name有多个值的情况下支持不好。
我们可以用nginx内部变量来解决这一问题:
proxy_redirect http://in.com http://$host:$server_port
搞定
如果不设定的话,proxy_redirect默认是default属性,官网例子是这样介绍default的:
引用
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect http://upstream:port/two/ /one/;
}
proxy_pass http://upstream:port/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect http://upstream:port/two/ /one/;
}
我试了下,location /{}规则时似乎不太正常,会导致location为空。这个有待详细考证
为nginx生成自签名ssl证书
[
|
2012/03/03 00:00]


今天要搭一个ssl加密的站点,由于是自用,所以就准备自签发一张证书。之前搞过几次,比较复杂,早忘光了。找到一篇不错的文章,留下备份。
http://blog.duyao.de/posts/to-generate-an-ssl-certificate-for-nginx-in-linux.html
这里说下Linux 系统怎么通过openssl命令生成 证书。
首先执行如下命令生成一个key
openssl genrsa -des3 -out ssl.key 1024
然后他会要求你输入这个key文件的密码。不推荐输入。因为以后要给nginx使用。每次reload nginx配置时候都要你验证这个PAM密码的。
由于生成时候必须输入密码。你可以输入后 再删掉。
mv ssl.key xxx.key
openssl rsa -in xxx.key -out ssl.key
rm xxx.key
然后根据这个key文件生成证书请求文件
openssl req -new -key ssl.key -out ssl.csr
以上命令生成时候要填很多东西 一个个看着写吧(可以随便,毕竟这是自己生成的证书)
最后根据这2个文件生成crt证书文件
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt
这里365是证书有效期 推荐3650哈哈。这个大家随意。最后使用到的文件是key和crt文件。
如果需要用pfx 可以用以下命令生成
openssl pkcs12 -export -inkey ssl.key -in ssl.crt -out ssl.pfx
在需要使用证书的nginx配置文件的server节点里加入以下配置就可以了。
ssl on;
ssl_certificate /home/ssl.crt;
ssl_certificate_key /home/ssl.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
然后重启nginx就大功告成了
http://blog.duyao.de/posts/to-generate-an-ssl-certificate-for-nginx-in-linux.html
这里说下Linux 系统怎么通过openssl命令生成 证书。
首先执行如下命令生成一个key
openssl genrsa -des3 -out ssl.key 1024
然后他会要求你输入这个key文件的密码。不推荐输入。因为以后要给nginx使用。每次reload nginx配置时候都要你验证这个PAM密码的。
由于生成时候必须输入密码。你可以输入后 再删掉。
mv ssl.key xxx.key
openssl rsa -in xxx.key -out ssl.key
rm xxx.key
然后根据这个key文件生成证书请求文件
openssl req -new -key ssl.key -out ssl.csr
以上命令生成时候要填很多东西 一个个看着写吧(可以随便,毕竟这是自己生成的证书)
最后根据这2个文件生成crt证书文件
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt
这里365是证书有效期 推荐3650哈哈。这个大家随意。最后使用到的文件是key和crt文件。
如果需要用pfx 可以用以下命令生成
openssl pkcs12 -export -inkey ssl.key -in ssl.crt -out ssl.pfx
在需要使用证书的nginx配置文件的server节点里加入以下配置就可以了。
ssl on;
ssl_certificate /home/ssl.crt;
ssl_certificate_key /home/ssl.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
然后重启nginx就大功告成了