美文网首页
黑阈服务器中部分 nginx 配置

黑阈服务器中部分 nginx 配置

作者: 简域工作室 | 来源:发表于2019-04-06 17:55 被阅读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;
          }
      

    相关文章

      网友评论

          本文标题:黑阈服务器中部分 nginx 配置

          本文链接:https://www.haomeiwen.com/subject/xkariqtx.html