作者回复: 1、关于重写URL。proxy_pass的重写URL能力非常弱,而且依赖location后的URL。rewrite可以重写任意URL。 2、关于反向代理。rewrite没有反向代理功能。第4部分有关于反向代理流程和原理的介绍。
作者回复: 1、rewrite_log确保打开;2、确保error.log的日志级别允许打印rewrite日志,比如设成info。
作者回复: location匹配时,是先做前缀字符串匹配,再做正则匹配,你可以再设置一个前缀匹配,例如location /Finance/asset/accessed/downloadAtt/,后面再配置proxy_pass http://test_server;,这样不会命中location ~ /Finance/([-_a-zA-Z0-9/]+)
作者回复: rewrite影响不大,对pcre库尽量使用较新的版本编译nginx。相比Openresty中的Lua代码,Nginx官方模块的指令对性能影响都不大,而一旦使用Lua后,就要非常慎重。
作者回复: location /redirect3 { rewrite /redirect3(.*) $1 http://rewrite.ouxionghu.com$1; } location /redirect4 { rewrite /redirect4(.*) $1 http://rewrite.ouxionghu.com$1 permanent; 这两行都错了,前一个$1是多余的
作者回复: 加=号才是精确匹配,否则默认是前缀匹配。匹配规则参见第54课
作者回复: 1、在server块中的rewrite指令,会先于location块中的rewrite指令执行,因为其在server_rewrite阶段执行。 2、只针对path路径,不包括query参数(这两个概念是URI的定义,参见我的Web协议课程第10课)
作者回复: 以它们在nginx.conf中的顺序而定
作者回复: 1、其实是3种情况:a. 没有=,则以原错误码返回客户端;b.=xxx,则以xxx作为响应码返回客户端,c.=(=后没有响应码),则以最后的uri导致的内部重定向location的返回码,作为客户端的错误响应码。 2、你用return指令了,它是rewrite模块提供的,它会让root html/;无法发挥作用,因为root由static模块生效,而static模块是content阶段的(参见第49课)。所以你应该把return 404注释掉就可以了。另外,return 404是不能使用error_page的。
作者回复: 不会,这个URL会直接作为Location返回给客户端