黑阈服务器中部分 nginx 配置
2019-04-06 本文已影响0人
简域工作室
-
中国访问,301 跳回中国地址。
国内不支持 io 域名,只能解析到国外,然后 301 跳回。先设置
$country
环境变量。geo $country { default ZZ; 1.3.0.0/16 CN; 1.8.0.0/16 CN; # 后略 }
(关于 CN 具体列表,可以参照 chinaip 项目,通过解析 apnic 中分配的中国区域 ip,合并成大量 ip 分段。针对 nginx,也单独提供 geo.conf。)
然后根据情况跳回可以备案的 .com 域名。
set $zh_host ""; if ($country = 'CN') { set $zh_host "zh.${host}"; } if ($zh_host = zh.jianyu.io) { return 301 https://jianyv.com$request_uri; } if ($zh_host = zh.br.jianyu.io) { return 301 https://br.jianyv.com$request_uri; }
-
latest.apk 跳转实际版本
黑阈在服务器上,latest.apk 是一个软链接。在 nginx 中,获取实际的文件,然后跳转。
下文使用
perl_set
,是内建的 perl 相关模块。如果支持 lua,写法可以更友好。perl_set $realname ' sub { my $r = shift; if (-l $r->filename) { return readlink($r->filename); } return ""; } ';
然后 302 跳转。
location /br/latest.apk { if ($realname != "") { return 302 https://dl.jianyv.com/br/$realname; } }
-
针对操作系统与语言展示定制界面
比如 brevent.sh 实际有 5 个版本。针对简体中文,不同操作系统会展示不同版本。值得注意的是,Android 是 Linux 子集,所以发现是 Android 后重设了操作系统。此外,在 css 中,如果是小屏,加入定制提示,这个利用的是 media 属性。(是的,我就是不想写 javascript ...)set $lang ''; if ($http_accept_language ~ 'zh-CN') { set $lang 'zh'; } # ie edge 按照标准发 zh-Hans if ($http_accept_language ~ 'zh-Hans') { set $lang 'zh'; } set $os ''; if ($http_user_agent ~ Windows) { set $os 'windows'; } if ($http_user_agent ~ Macintosh) { set $os 'macos'; } if ($http_user_agent ~ Linux) { set $os 'linux'; } if ($http_user_agent ~ Android) { set $os ''; } location / { index index.$os.$lang.html index.$lang.html index.html; }
-
所有错误页面,均展示为 404。对于这个 /404.html,当然也要返回 404。
error_page 400 403 404 405 500 502 503 504 =404 /404.html; location = /404.html { internal; }