Nginx:$ args $ arg_param $ query_string if if语句

时间:2012-10-27 11:22:50

标签: regex configuration nginx

我很难在我的nginx配置中应用这个if语句:

location / {
    break;
    proxy_pass                  http://127.0.0.1:4444;
    proxy_redirect              off;
    proxy_set_header            Host                        $host;
    proxy_set_header            X-Real-IP               $remote_addr;
    proxy_set_header            X-Forwarded-For         $proxy_add_x_forwarded_for;

    if ($arg_charset ~* windows-1251) {
        charset                     windows-1251;
    }
    source_charset              utf-8;
}

我试过$ arg_charset~ *“windows-1251”和$ arg_charset~ * /.windows-1251./以及所有其他解决方案。没有工作...... 删除if语句会给我想要的结果,所以问题在于if语句条件。

这是一个错误,或者我做错了?

1 个答案:

答案 0 :(得分:4)

正如http://wiki.nginx.org/IfIsEvil所解释的那样,if内的location块在包含除returnrewrite之外的任何内容时都可能存在问题p>

尝试将if直接移动到server块中(if没有问题)应该修复它。

已更新,以避免在serverblock中使用charset指令:

尝试以下内容:

set $requestedcharset utf-8;
if ($arg_charset ~* windows-1251) { set $requestedcharset windows-1251;}

location / {
  source_charset utf-8;
  charset $requestedcharset;
  #add in the rest of your / config
}

注意:请确保您的http块中包含win-utf charset_map(在我的debian系统上,这意味着include /etc/nginx/win-utf;