0

我很难在我的 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 ~* /. 窗户-1251。/ 和所有其他解决方案。没有任何工作......删除 if 语句给了我想要的结果,所以问题出在 if 语句条件中。

这是一个错误还是我做错了?

4

1 回答 1

4

正如http://wiki.nginx.org/IfIsEvil解释的那样,当ifa 中的块location包含除 areturnrewrite

尝试简单地将 ifserver直接移动到应该修复它的块中(if没有问题)。

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

尝试以下操作:

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
}

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

于 2012-10-27T11:39:47.410 回答