黑阈服务器中部分 nginx 配置

2019-04-06  本文已影响0人  简域工作室
  1. 中国访问,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;
        }
    
  2. 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;
             }
         }
    
  3. 针对操作系统与语言展示定制界面
    比如 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;
        }
    
  4. 所有错误页面,均展示为 404。对于这个 /404.html,当然也要返回 404。

        error_page 400 403 404 405 500 502 503 504 =404 /404.html;
        location = /404.html {
            internal;
        }
    
上一篇下一篇

猜你喜欢

热点阅读