我很难在我的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语句条件。
这是一个错误,或者我做错了?
答案 0 :(得分:4)
正如http://wiki.nginx.org/IfIsEvil所解释的那样,if
内的location
块在包含除return
或rewrite
之外的任何内容时都可能存在问题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;
)