• Adam
    2019-01-18
    如果if指令在server,location有冲突的配置,按前面所说的server_rewrite阶段优于rewrite阶段,那location里面if是不是不会再执行了?

    作者回复: 不是的,要看server_rewrite中是不是有指令导致不向下执行。比如,server{ if (...) {return 302 xxx;} }这样rewrite阶段的指令就没机会执行了。
    if不存在是否冲突的概念,第6部分有一课是讲if的,它实际会以最后一次if结果(连续if命中时)作为后续处理的location配置。

    
     2
  • runner
    2018-12-25
    老师好,我们今天有个需求,要对线上某个 url 参数consistent 做修改,我在location 里写了这样的配置:
    if ($args ~ (.*?)consistent=true(.*)) {
                    #echo $uri?$1$3&consistent=false;
                    rewrite .* $uri?$1$2&consistent=false break;
    }
    但是提示 重定向次数过多,看日志我改了的这个 consistent=false 是追加到 原来参数后面的,为什没有重写uri 呢?
    展开

    作者回复: 我用你贴出来的配置尝试了下,发现功能是正常的,我估计是你没贴出来的配置出问题了。你把完整的nginx.conf发我邮箱看看:russelltao@foxmail.com。
    对了,我是在后面直接用的return 200 '$arg_consistent';

    
     1
  • dreamboat
    2018-12-17
    所说if模块有问题,不知道是真的吗

    作者回复: rewrite模块提供的if指令规则相对比较复杂,所以如果对规则了解不深,比较容易犯错。

    
     1
  • Robert小七
    2019-01-29
    location /testlink {
               proxy_pass http://127.0.0.1:9000;
              }

    老师,我有一个应用testlink,是一个php服务器,目前监听端口9000,我想访问localhost/testlink时,能够让testlink进行处理,我这样配置后,服务端返回404,请问我该如何配置?
    展开

    作者回复: 你要把testlink正常工作的URL给我,以及希望nginx正常工作的URL给我,我才好给你转换关系啊。你看一下第89课就清楚了。

    
    
  • soooldier
    2018-12-24
    很期待老师讲解if的坑,我一直没太理解它的成因,只是简单记住在if里只有rewrite的模块指令是安全的

    作者回复: 嗯,第6部分我会拿个例子讲.其实你对照第三部分里所讲的11个阶段,也能分析出if指令如果与其他模块的值指令混用时,由于值指令所属模块在不同阶段,或者在过滤模块中,比如add_header,那么结果通常与我们理解的编程语言中的if就完全不同了

    
    
  • soooldier
    2018-12-23
    老师为啥没有提”if is evil“

    作者回复: 这一节课应该提下的,谢谢提醒,准备放在第6部分讲源码时讲一下脚本式指令再提这个事。问题的出现,是因为nginx的分阶段执行以及脚本式指令统一在rewrite阶段执行的原因。我们常用的if {rewrite}和if {return}都是没问题的,这些都是rewrite阶段的脚本式指令。

    
    
我们在线,来聊聊吧