nginx rewrite的坑

用nginx做一个反向代理,发现如下坑:

1、配置文件里只能用if,不能用else,也不能嵌套使用if
2、rewrite正则只能用于做“匹配”某个字符,不能用于“不匹配”某个字符,比如匹配 不是/abc开头 的URL就不行
3、proxy_pass的server name 如果就是当前proxy_pass指令所在的server,并不会重新发起一个代理请求,而是做了类似location的操作。
4、
下面的代码,跳转结果有点儿奇怪:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
    listen       80;
    server_name  a.cn;

    location / {
        //访问a.cn/abc不会匹配到这里
    }
}

server {
    listen       80;
    server_name  *.a.cn;

    location /abc {
        //访问a.cn/abc会匹配到这里
    }
}

5、使用ci类的框架,由于所有请求入口全是index.php,如果同一个server内部,多个location来回rewrite,最好响应结果的URI还是浏览器地址上的,相关参数都被丢失了。因为:
try_files $uri $uri/ /index.php;
上面这句话,/index.php把所有的参数都丢了

发表评论

电子邮件地址不会被公开。 必填项已用*标注