当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪通过例子来看nginx下的Rewrite规则      Apache下的Rewrite规则是详细的规则,nginx下的中文文档好像没有看到,这里有个英文的文档:http://wiki.nginx.org/NginxHttpRewriteModule 。 Apache下的Rewrite规则基本上到nginx下,也可以直接使用,不行的.........
    ▪老生常谈-nginx配置文件的rewrite中break和last的区别      Nginx配置文件的rewrite中break和last的区别,有需要的朋友不妨参考下。 来看一个这样的server配置:   代码如下: server {  listen       80;  server_name  www.; root         /var/www/xxx;  index.........
    ▪nginx1.0.0配置ngx_cache_purge实现高效反向代理的方法      nginx1.0.0配置ngx_cache_purge实现高效反向代理的方法,有需要的朋友可以参考下。 nginx默认安装会带有反向代理的功能,但想要更好的使用,还得配备frickle.com的ngx_cache_purge模块,用于清除指定URL.........

[1]通过例子来看nginx下的Rewrite规则
    来源: 互联网  发布时间: 2013-12-24

Apache下的Rewrite规则是详细的规则,nginx下的中文文档好像没有看到,这里有个英文的文档:http://wiki.nginx.org/NginxHttpRewriteModule 。

Apache下的Rewrite规则基本上到nginx下,也可以直接使用,不行的话用引号引起来一般就都可以了。

nginx的rewrite格式是:rewrite regex replacement flag
其中flag标记有四种格式:
last – 相当于Apache中的L
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302,相当于Apache中的R
permanent – 返回永久重定向的HTTP状态301,相当于Apache中的R=301
可以放在server, location 和 if 模块中。

匹配判断
~  为区分大小写匹配; !~为区分大小写不匹配
~* 为不区分大小写匹配;!~为不区分大小写不匹配
例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:
 

代码如下:
if ($http_user_agent ~ MSIE) {
  rewrite  ^(.*)$  /msie/$1  break;
}

一些常用的nginx下的Rewrite代码。

1.只使用一个网址,比如主力网址设为www.。
 

代码如下:
if ($host != 'www.' ) {
rewrite ^/(.*)$ http://www./$1 permanent;
}
 

访问时,会自动跳转到www.。

2.防盗链
 

代码如下:
location ~* .(gif|jpg|png|swf|flv)$ {
valid_referers none blocked itlearner.com;
if ($invalid_referer) {
return 403;
}
}
 

盗链时则返回403错误,允许的域名可以直接跟在第二行的域名后面。

3.WordPress的Rewrite
 

代码如下:
location / {
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
 

目前,代码收藏上就是使用的这段代码。

4.bo-blog在nginx下的Rewrite规则
 

代码如下:

    if (!-e $request_filename) {
      rewrite ^/post/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?entryid=$1&page=$2&part=$3 last;
      rewrite ^/page/([0-9]+)/([0-9]+)/?$ /index.php?mode=$1&page=$2 last;
      rewrite ^/starred/([0-9]+)/?([0-9]+)?/?$ /star.php?mode=$1&page=$2 last;
      rewrite ^/category/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=category_$1&mode=$2&page=$3 last;
      rewrite ^/archiver/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=archive&cm=$1&cy=$2&mode=$3&page=$4 last;
      rewrite ^/date/([0-9]+)/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=showday_$1-$2-$3&mode=$4&page=$5 last;
      rewrite ^/user/([0-9]+)/?$ /view.php?go=user_$1 last;
      rewrite ^/tags/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /tag.php?tag=$1&mode=$2&page=$3 last;
      rewrite ^/component/id/([0-9]+)/?$ /page.php?pageid=$1 last;
      rewrite ^/component/([^/]+)/?$ /page.php?pagealias=$1 last;

      #Force redirection for old rules
      rewrite ^/read\.php/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
      rewrite ^/post/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
      rewrite ^/post/([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/ permanent;
      rewrite ^/post/([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/$3/ permanent;
      rewrite ^/index\_([0-9]+)\_([0-9]+)\.htm$ http://$host/page/$1/$2/ permanent;
      rewrite ^/star\_([0-9]+)\_([0-9]+)\.htm$ http://$host/starred/$1/$2/ permanent;
      rewrite ^/category\_([0-9]+)\.htm$ http://$host/category/$1/ permanent;
      rewrite ^/category\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/category/$1/$2/$3/ permanent;
      rewrite ^/archive\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/ permanent;
      rewrite ^/archive\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/$3/$4/ permanent;
      rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/ permanent;
      rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/$4/$5/ permanent;

      #Filename alias
      rewrite ^/([a-zA-Z0-9_-]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?blogalias=$1&page=$2&part=$3 last;
    }


    
[2]老生常谈-nginx配置文件的rewrite中break和last的区别
    来源: 互联网  发布时间: 2013-12-24

Nginx配置文件的rewrite中break和last的区别,有需要的朋友不妨参考下。

来看一个这样的server配置:
 

代码如下:
server { 
listen       80; 
server_name  www.;
root         /var/www/xxx; 
index        index.php index.html index.htm; 
location [loc-1] { 
/**此处略去1000字**/ 

location [loc-2] { 
/**此处略去1000字**/ 

rewrite [match-1] [replace-1] break; 
rewrite [match-2] [replace-2] last; 
rewrite [match-3] [replace-3] last; 
rewrite [match-4] [replace-4] break;  
}

 

面对一个飞来的URI请求,Nginx的是这样来理解的:
 

代码如下:

/---------------------------下边是算法---------------------------/
amt = int[4]
for(i=1 to 4){
if(match[i].tag=='break')amt[i]=10;
else amt[i]=1;
}

while(还没有匹配过 OR 上一轮有匹配成功){
for i=1 to 4{
if(amt[i]==-1)continue;
if(url 匹配 match[i]){
url = do_replace(replace[i]);
amt[i]--;
} else {
amt[i]==-1
}

if(url 匹配 Loc[i]) 完成
}
}

if(url 在硬盘物理存在) 完成
else echo 错误404
/---------------------------上边是算法---------------------------/

大概95%的人没有看明白这个算法,好吧,用文字表达一下要点:

1、Nginx对rewrite的执行是按照先后顺序循环执行,一轮一轮的匹配替换URL,直到找到匹配的LOCATION或者存在这个URL对应的文件。

2、一个rewite匹配规则一旦没有被匹配上,则会被踢出循环队列,永远不再匹配,不论是last还是break

3、对于last的规则,如果每次都被匹配,则会一直执行下去,直到满10次,例如 rewrite ^/(.*) /1234.html last 这种必然会被执行的规则

4、对于break规则,最多匹配两次,两次之后,被踢出队列。

总结下,LAST和BREAK的区别就是,LAST是10,BREAK是2
在具体使用上,有一条原则:除非你非常清楚LAST和BREAK的原理,一律都用BREAK吧。


    
[3]nginx1.0.0配置ngx_cache_purge实现高效反向代理的方法
    来源: 互联网  发布时间: 2013-12-24

nginx1.0.0配置ngx_cache_purge实现高效反向代理的方法,有需要的朋友可以参考下。

nginx默认安装会带有反向代理的功能,但想要更好的使用,还得配备frickle.com的ngx_cache_purge模块,用于清除指定URL的缓存。

在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。
另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。
这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。

下载2011-05-03更新的最新版1.3
 

代码如下:
wget http://labs.frickle.com/files/ngx_cache_purge-1.3.tar.gz
tar zxf ngx_cache_purge-1.3.tar.gz

切换到nginx目录
 

代码如下:
cd nginx-1.0.0
./configure --user=www --group=www --add-module=../ngx_cache_purge-1.3 --prefix=/usr/local/webserver/nginx --with-http_stub_status_module
make;make install

安装完成!

安装完后在/usr/local/webserver/nginx下多了四个目录,分别是fastcgi_temp,proxy_temp,scgi_temp和uwsgi_temp。

proxy_temp这个目录用于存储临时文件,需要看下是否www有权限写入,如果不可写,无法在这个目录生成文件的话,会导致反向代理失败。也可以在nginx的配置里设置proxy_temp_path指定存储临时文件的目录。

nginx配置文件参考:
 

代码如下:

http {
    #proxy_temp_path   /www/proxy_temp;
    #设置Web缓存区名称为cache_one,内存缓存空间大小为100MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为10GB。
    proxy_cache_path  /www/proxy_cache  levels=1:2   keys_zone=cache_one:100m inactive=1d max_size=10g;
 
     server {
        listen       80;
        server_name  s.;

            location / {
            proxy_cache cache_one;
            proxy_cache_valid  200 304 12h;
            proxy_cache_key $uri$is_args$args;
            proxy_set_header Host  $host;
            proxy_set_header X-Forwarded-For  $remote_addr;
            proxy_pass http://www.;
            expires      1d;
                }

            location ~ /purge(/.*) {
                allow              all;
                allow               127.0.0.1;
            #    deny               all;
                proxy_cache_purge cache_one $1$is_args$args;
            }
            access_log /www/logs/s.log access;
        }
    ......
}

这样访问s./images/logo.gif,反向代理就会去请求http://www./images/logo.gif,保存在内存中,然后输出。
如果logo.gif这个文件发生了变化,则需要刷新缓存,访问s./purge/images/logo.gif,就会提示:Successful purge

Key : /images/logo.gif
Path: /www/proxy_cache/39aaa70038997e0e5e77beaa4392848d
如果这个文件没有被缓存过,则提示:404 Not Found

如果已安装过nginx,请一定注意,使用nginx -s reload重启是无效的!一定要-s stop之后再启动,这样才会使用新版本的nginx!

我今天就没注意这点,在这上面化了N个小时!
/usr/local/webserver/nginx/sbin/nginx -V     
nginx: nginx version: nginx/1.0.0
nginx: built by gcc 4.1.2 20080704 (Red Hat 4.1.2-46)
nginx: configure arguments: --user=www --group=www --add-module=../ngx_cache_purge-1.3 --prefix=/usr/local/webserver/nginx --with-http_stub_status_module

一直以为是装成功了,但反复测试均清除失败,很郁闷!明明开启了访问日志,日志也没记录任何信息!
晚上继续测试时,在nginx_error.log里看到有如下的错误提示:
2011/05/11 21:23:40 [emerg] 20976#0: unknown directive "proxy_cache_purge" in /usr/local/webserver/nginx/conf/nginx.conf:481
才确认这个模块跟本没装上,当然不能用了。后来看到有人说要restart,但reload是无效的。才想到前段搞nginx升级时就发现,如果不用make upgrade升级,重新编译升级的话,必须停掉,再启动才会使用新的版本。

您可能感兴趣的文章:
Nginx负载均衡与反向代理的例子(图文)
Nginx Proxy 代理配置图片缓存的实例参考
nginx正向代理配置简单一例
nginx反向代理配置简单示例
学习Nginx反向代理实现简单负载均衡(图文)
nginx缓存html静态文件 解析php及反向代理IIS的配置
nginx中配置proxy正向代理
nginx创建反向代理和虚拟主机的例子
nginx的反向代理配置与优化
nginx反向代理与varnish缓存配置
nginx反向代理与负载均衡
Nginx 反向代理的小例子
nginx反向代理与缓存详解
nginx反向代理配置一例
Nginx反向代理Nginx
nginx反向代理配置和优化
Nginx Proxy代理和图片缓存配置
nginx配置反向代理的简单示例


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3