Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1080926
  • 博文数量: 83
  • 博客积分: 159
  • 博客等级: 上尉
  • 技术积分: 2221
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-15 17:08
个人简介

……致我那曾经苦逼的岁月……

文章分类
文章存档

2018年(1)

2017年(7)

2016年(13)

2014年(1)

2013年(12)

2012年(27)

2011年(22)

分类: 系统运维

2016-04-13 11:59:09

相信大家在日常运维工作中如果你用到nginx作为前端反向代理服务器的话,你会对nginx的rewrite又爱又恨,爱它是因为你搞定了它,完成了开发人员的跳转需求后你会觉得很爽,觉得真的很强大,恨它是因为当一些稀奇古怪跳转的需求时候你会没有头绪、百般调试、上网求神拜佛都搞不定的时候真是想死的心都有了,当然网上也有很多nginx rewrite的经典示例,但是我感觉对我的工作都没有太大的帮助。下面是我工作中遇到的一些rewrite示例。提供给大家分享。
一、访问正常,现在需要访问abc.com,直接跳转到。

点击(此处)折叠或打开

  1. server {
  2. listen 80;
  3. server_name abc.com;
  4. access_log off;
  5. rewrite (.+) $scheme:// permanent;
  6. }
二、如果你们域名是,现在想换一个域名了,又不想失去之前域名的访问量,需要配置跳转。
首先需要在你的server_name里面把和都写上。
然后做如下配置:

点击(此处)折叠或打开

  1. location / {
  2. if ($host = '')
  3. {
  4. rewrite ^/(.*)$ /$1 permanent;
  5. }
  6. }
三、跳转维护页面,比如今天维护,想挂一个维护页面,希望除某些特定的IP地址能正常访问,因为需要测试。其余所以的IP地址都是访问维护页面,这个需求我之前好像写过,但是今天写的有点不一样。在server里面添加如下内容:

点击(此处)折叠或打开

  1. set $rewrite true;
  2. if ($remote_addr = "xxx.xxx.xxx.xxx") {
  3. set $rewrite false;
  4. }
  5. if ($rewrite = true) {
  6. rewrite (.+) /maintenance.html;
  7. }
  8. location = /maintenance.html {
  9.   root /var/vhost;
  10. }
四、比如现在你的域名是,现在将这个域名下面的帖子访问都跳转到/bbs,注意跳转后的参数也要保持一致。
比如:/post/addpost/913.shtml跳转到/bbs/post/addpost/913.shtml

点击(此处)折叠或打开

  1. location /post {
  2. rewrite (.+) /bbs$1 permanent;
  3. }
五、基于uri的跳转

点击(此处)折叠或打开

  1. if ($request_uri ~* ^/note\.php\?product_code=(.*)$) {
  2. rewrite (.*) permanent;
  3. }

点击(此处)折叠或打开

  1. if ($request_uri ~ ^/forum-(140|141|142|143|144|145|150|151|152|153|154|155|156|157|158|159|200|222|223|224|225|226|227|228)-(\d+).html$) {
  2. rewrite (.*) /list permanent;
  3. }
六、基于目录下面文件的跳转

点击(此处)折叠或打开

  1. location ~* /upload/.*\.php$ {
  2. return 404;
  3. }
七、最普通的url到url跳转

点击(此处)折叠或打开

  1. location ~* ^/ab/maintain/main.html {
  2. rewrite (.+) /maintain/main.html permanent;
  3. }
虽然例子举不全,可能还有一些其它更好的跳转示例,以后再补充。有不对的地方欢迎大家拍砖。







阅读(26556) | 评论(4) | 转发(2) |
给主人留下些什么吧!~~

split_two2018-04-10 15:07:48

访问/zzz和/zzz/为静态页面,访问/zzz/xxx转后端服务器
location ^~ /zzz {
    alias /usr/share/nginx/html/;
    if ( $request_uri = /zzz ) {
        break;
    } 
    if ( $request_uri = /zzz/ ) {
        break;
    }
    if ( $request_uri != /zzz/ ) {
&n

split_two2018-04-09 14:54:58

静态文件不添加一层目录结构  
if ($request_uri !~ ^(.*)(\\.css|\\.js|\\.gif|\\.png|\\.jpg|\\.jpeg|\\.swf|\\.php)$|^/img/noavatar_small\\.gif\\?p=(\\d+)) {
      rewrite ^/(.*)$ /index.php/$1 last;
  }

split_two2017-02-04 15:58:52

目录后的参数保持不变的跳转
rewrite ^/assets/upload/(.*)$ http://assets.kgc.cn/upload/$1 permanent;

split_two2016-12-18 10:25:14

多次匹配  
if ($request_uri ~ ^/baseuiue(.shtml)|^/zhuanti/baseuiue(.shtml)) {
    rewrite (.+) http://123.abc.cn/zhuanti/baseuiue.shtml permanent;
}