如何在nginx的重写规则中使用自定义variables

有没有办法让nginx处理一个自定义variables,就像它在重写规则中对待$ scheme一样? 例如:

rewrite ^/redirect http://example.com; # and rewrite ^/redirect_with_scheme $scheme://example.com; 

都将导致302redirect被发送到客户端。 但是,这个:

 set $real_scheme $scheme; rewrite ^/redirect_with_real_scheme $real_scheme://example.com; 

将导致服务器端重写到一个不一定存在的文件,然后404到客户端。 为了什么是值得的,这个:

 set $real_scheme $scheme; rewrite ^/redirect_with_real_scheme $real_scheme://example.com redirect; 

将给客户发送一个302所需的结果。 不幸的是,我有很多这样设置的redirect如果没有必要,我宁愿不使用redirect指令更新所有的redirect

如果有帮助,我使用Nginx 1.6.2。

我无法重现你的问题。

我尝试了以下最低configuration,每个rewrite按预期工作(HTTP 302s):

 events { worker_connections 1024; } http { include mime.types; server { listen 80; set $real_scheme $scheme; rewrite ^/redirect http://localhost; rewrite ^/redirect_with_scheme $scheme://localhost; rewrite ^/redirect_with_real_scheme $real_scheme://localhost; } } 

你能给我提供一个最小的configuration能够显示错误的rewrite规则吗?