PageSourceSearch

https://disue.com/about

html disue.com collected 2026-10-06 13:14:43 UTC 60,237 bytes, 1,631 lines download raw bytes

1<!doctype html>
2<html
3  lang="en"
4>
5  <head>
6    <title>Disue · 迪素</title>
7
8    <meta charset="utf-8" />
9    <meta name="renderer" content="webkit" />
10    
11    <meta name="format-detection" content="telephone=no" />
12    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
13    <meta http-equiv="Cache-Control" content="no-siteapp" />
14    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
15    <meta
16      name="viewport"
17      content="width=device-width, user-scalable=no, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover"
18    />
19    
20    <meta http-equiv="x-dns-prefetch-control" content="on" />
21    <meta name="site" content="https://disue.com" />
22    <!-- OG -->
23    <meta property="og:image" content="/upload/favicon.png" />
24    <meta property="og:description" content="site.seo.description" />
25    <meta property="og:type" content="website" />
26    <meta property="og:locale" content="zh_CN" />
27    <meta property="og:site_name" content="Disue · 迪素-Dynamic Internet Security Utility Engine" />
28    <meta property="og:url" content="https://disue.com" />
29    <meta property="og:title" content="Disue · 迪素" />
30    <meta property="twitter:partner" content="ogwp" />
31    <!-- /OG -->
32
33    
34    
35    
35<script id="theme-config-getter">
36      const ThemeConfig = {
37        theme_mode: "user",
38        enable_loading_bar: true,
39        enable_footer: true,
40        footer_position: "none",
41        check_baidu_collect: false,
42        baidu_token: "",
43        enable_back2top: true,
44        enable_back2top_smooth: true,
45        enable_weather: false,
46        weather_key: "",
47        link_behavior: "current",
48        enable_tag_cloud: true,
49        tag_cloud_type: document.getElementById('tags-3d') ? '3d' : 'list',
50        enable_fixed_header: true,
51        enable_clean_mode: false,
52        cursor_effect: "off",
53        enable_offscreen_tip: false,
54        enable_birthday: false,
55        birthday: "2021\/11\/11 06:30",
56        light_time_scope: "5:00~19:00",
57        enable_console_theme: false,
58        version: "1.4.0",
59
60        enable_big_banner: false,
61        enable_banner: false,
62        banner_direction: "horizontal",
63        enable_banner_loop: true,
64        banner_effect: "slide",
65        banner_speed: 500,
66        enable_banner_handle: true,
67        enable_banner_autoplay: true,
68        banner_delay: "3500",
69        enable_banner_switch_button: true,
70        enable_banner_pagination: true,
71        enable_index_list_ajax: false,
72        post_index_page_size: false,
73        backdrop: "off",
74        favicon: "\/upload\/favicon.png",
75        enable_index_list_effect: true,
76        index_list_effect_class: "fadeInUp",
77        show_loaded_time: false,
78        enable_debug: false,
79        access_key: false,
80        enable_copy: true,
81        enable_share: true,
82        enable_share_link: true,
83        enable_share_weixin: true,
84        enable_like: true,
85        enable_toc: true,
86        enable_progress_bar: true,
87        enable_code_expander: false,
88        enable_fold_long_code: false,
89        enable_comment: true,
90        toc_depth: "0",
91        enable_code_title: true,
92        enable_code_hr: true,
93        enable_code_macdot: true,
94        enable_code_line_number: false,
95        enable_code_newline: false,
96        show_tools_when_hover: true,
97        enable_code_copy: true,
98        enable_copy_right_text: false,
99        copy_right_text: "",
100        offscreen_title_leave: "\u6B6A\uFF0C\u4F60\u53BB\u54EA\u91CC\u4E86\uFF1F",
101        offscreen_title_back: "(\u3064\u30A7\u2282)\u54A6\uFF0C\u53C8\u56DE\u6765\u4E86!",
102        enable_journal_effect: true,
103        enable_friend_effect: true,
104        // prettier-ignore
105        journal_list_effect_class: "fadeInUp",
106        friend_list_effect_class: "fadeInUp",
107        enable_like_journal: true,
108        enable_comment_journal: true,
109        journal_block_height: "300",
110        long_code_height: "800",
111        lazyload_avatar: "\/upload\/photo_2025-09-26_13-23-33.jpg",
112        photos_layout: 'waterfall',
113        // prettier-ignore
114        blog_url: "https:\/\/disue.com",
115        blog_title: "Disue \u00B7 \u8FEA\u7D20",
116        // prettier-ignore
117        BASE_RES_URL: "\/themes\/theme-Joe3",
118        BASE_URL: 'https://bbchin.com',
119      };
120      //转数字
121      ThemeConfig.banner_speed = parseInt(ThemeConfig.banner_speed);
122      ThemeConfig.banner_delay = parseInt(ThemeConfig.banner_delay);
123      ThemeConfig.toc_depth = parseInt(ThemeConfig.toc_depth);
124      ThemeConfig.journal_block_height = parseInt(ThemeConfig.journal_block_height);
125      ThemeConfig.long_code_height = parseInt(ThemeConfig.long_code_height);
126      ThemeConfig.photos_gap = 10;
127      ThemeConfig.enable_photos_effect = true;
128    </script>
128
129  
130    
131    
132      
133    
133<script id="theme-config-getter">
134      const PageAttrs = {
135        metas_enable_read_limit: "false",
136        metas_enable_page_meta: "false",
137        metas_enable_passage_tips: "false",
138        metas_enable_collect_check: "false",
139        metas_use_raw_content: "false",
140        metas_enable_comment: "true",
141        metas_enable_toc: "true",
142        metas_toc_depth: "0",
143        // prettier-ignore
144        metas_img_max_width: "100%",
145        // prettier-ignore
146        metas_img_align: "center",
147        metas_enable_copy: "false",
148        metas_enable_donate: "true",
149        metas_enable_share: "false",
150        metas_enable_like: "true",
151        metas_enable_fold_long_code: "true",
152      };
153    </script>
153
154  
155    
156    
156<script id="compatiable-checker">
157      // 兼容性检查
158      function detectIE() {
159        var n = window.navigator.userAgent,
160          e = n.indexOf('MSIE ');
161        if (e > 0) {
162          return parseInt(n.substring(e + 5, n.indexOf('.', e)), 10);
163        }
164        if (n.indexOf('Trident/') > 0) {
165          var r = n.indexOf('rv:');
166          return parseInt(n.substring(r + 3, n.indexOf('.', r)), 10);
167        }
168        var i = n.indexOf('Edge/');
169        return i > 0 && parseInt(n.substring(i + 5, n.indexOf('.', i)), 10);
170      }
171      detectIE() &&
172        (alert('当前站点不支持IE浏览器或您开启了兼容模式,请使用其他浏览器访问或关闭兼容模式。'),
173        (location.href = 'https://www.baidu.com'));
174    </script>
174
175
176    
176<script id="theme-config-getter" type="text/javascript">
177      if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {
178        ThemeConfig['mode'] = 'development';
179        console.log(ThemeConfig.mode);
180      }
181
182      if (ThemeConfig.mode === 'development') {
183        console.log('Joe3主题配置:', ThemeConfig);
184        console.log('资源根路径:', ThemeConfig.BASE_RES_URL);
185      }
186      // 读取主题模式
187      var initThemeMode = function () {
188        try {
189          var curMode = '';
190          if (ThemeConfig.theme_mode === 'auto') {
191            var light_scope = ThemeConfig.light_time_scope.split('~');
192            var now = new Date();
193            var today = now.toLocaleString().split(' ')[0];
194            var curMode =
195              now >= new Date(today + ' ' + light_scope[0]) &&
196              now <= new Date(today + ' ' + light_scope[1])
197                ? 'light'
198                : 'dark';
199            localStorage.removeItem('data-mode');
200          } else if (ThemeConfig.theme_mode === 'user') {
201            // 用户模式下优先从本地取主题模式,默认为浅色
202            curMode = localStorage.getItem('data-mode') || 'light';
203            localStorage.setItem('data-mode', curMode);
204          } else {
205            // 非用户模式下直接取后台配置的模式
206            curMode = ThemeConfig.theme_mode;
207            localStorage.removeItem('data-mode');
208          }
209          document.querySelector('html').setAttribute('data-mode', curMode);
210        } catch (e) {
211          console.log(e);
212        }
213      };
214      initThemeMode();
215      window.Joe = {
216        BASE_API: '',
217        isMobile: /windows phone|iphone|android/gi.test(window.navigator.userAgent),
218        bloggerGenerateAvatarOpts: (function () {
219          let generateAvatarOpts = {};
220          let generate_avatar_opts_str = '{bgColor:&#39;&#39;,textColor:&#39;&#39;,useTextGradient:false}';
221          if (generate_avatar_opts_str) {
222            // generate_avatar_opts_str 示例:{bgColor:'',textColor:'',useTextGradient:false}, 解析 generate_avatar_opts 配置
223            try {
224              // 防止 &#39; 等特殊字符导致 JSON 解析失败
225              const eleTmp = document.createElement('div');
226              eleTmp.innerHTML = generate_avatar_opts_str;
227              // key 自动加上 "" 防止报错,’ 自动转成 “
228              generate_avatar_opts_str = eleTmp.innerHTML
229                .replace(/'/g, '"')
230                .replace(/([\w]+):/g, '"$1":');
231              generateAvatarOpts = JSON.parse(generate_avatar_opts_str);
232            } catch (e) {
233              console.error(
234                'Joe3主题配置:生成文字性头像的配置解析失败,使用默认配置。generate_avatar_opts_str:',
235                generate_avatar_opts_str,
236                ' ,error:',
237                e
238              );
239            }
240          }
241          return generateAvatarOpts;
242        })(),
243        errorImg: function (target, src) {
244          const targetSrc = target.getAttribute('src');
245          console.log(
246            '加载图片失败',
247            ' ,srcArg:',
248            src,
249            ' .target.src:',
250            targetSrc,
251            ' ,target.alt:',
252            target.getAttribute('alt'),
253            ' ,target.dataset.errSrc:',
254            target.dataset.errSrc,
255            ' ,target.dataset.textAvatar:',
256            target.dataset.textAvatar
257          );
258
259          let generatedTextAvatar;
260          let generatedTextAvatarBase64;
261
262          switch (src) {
263            case 'HomeErrImg': {
264              // 如果 src 是 HomeErrImg 则使用首页配置里配置的文章错误缺省图
265              src = '/themes/theme-Joe3/assets/img/default_thumbnail.png';
266              break;
267            }
268            case 'LinksErrImg': {
269              // 如果 src 是 LinksErrImg 则使用友链配置里配置的友链默认 logo
270              src = target.dataset.errSrc || '/themes/theme-Joe3/assets/img/default_links_logo.png';
271              if (
272                !src ||
273                src === targetSrc ||
274                (targetSrc && targetSrc.indexOf('/assets/img/transparent-placeholder.png') !== -1)
275              ) {
276                if (target.dataset.textAvatar || target.getAttribute('alt')) {
277                  generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
278                  generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
279                  src = generatedTextAvatarBase64;
280                } else {
281                  src = '/themes/theme-Joe3/assets/img/default_links_logo.png';
282                }
283              }
284              break;
285            }
286            case 'ErrAvatarImg': {
287              // 如果 src 是 ErrAvatarImg 则使用博主配置里配置的默认头像
288              src = target.dataset.errSrc || '/upload/photo_2025-09-26_13-23-33.jpg';
289              if (
290                !src ||
291                src === targetSrc ||
292                (targetSrc && targetSrc.indexOf('/assets/img/transparent-placeholder.png') !== -1)
293              ) {
294                if (target.dataset.textAvatar || target.getAttribute('alt')) {
295                  generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
296                  generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
297                  src = generatedTextAvatarBase64;
298                } else {
299                  src = '/themes/theme-Joe3/assets/img/peeps-avatar.png';
300                }
301              }
302              break;
303            }
304            case 'LoadFailedImg': {
305              // 如果 src 是 LoadFailedImg 则使用加载失败的图片
306              src = target.dataset.errSrc || '/themes/theme-Joe3/assets/img/img_load_failed.jpg';
307              break;
308            }
309          }
310
311          const nowSrc = src || target.dataset.errSrc || '/themes/theme-Joe3/assets/img/Joe3.png';
312          if (targetSrc === nowSrc) return;
313
314          if (
315            generatedTextAvatarBase64 &&
316            generatedTextAvatar &&
317            nowSrc === generatedTextAvatarBase64
318          ) {
319            target.setAttribute('data-generated-text-avatar', generatedTextAvatar);
320          } else if (target.getAttribute('data-generated-text-avatar')) {
321            target.removeAttribute('data-generated-text-avatar');
322          }
323
324          console.log(
325            '加载图片失败,使用默认图片:',
326            nowSrc,
327            ' ,oldSrc:',
328            targetSrc,
329            ' ,target.alt:',
330            target.getAttribute('alt')
331          );
332          target.setAttribute('onerror', null);
333          target.setAttribute('src', nowSrc);
334        },
335        // 已经加载 transparent-placeholder.png 后替换图片
336        loadedPlaceholderReplaceImg: function (target, src) {
337          const targetSrc = target.getAttribute('src');
338          if (
339            !targetSrc ||
340            src === targetSrc ||
341            targetSrc.indexOf('/assets/img/transparent-placeholder.png') === -1
342          ) {
343            return;
344          }
345
346          console.log(
347            '加载图片 transparent-placeholder.png 后替换图片',
348            ' ,srcArg:',
349            src,
350            ' ,target.alt:',
351            target.getAttribute('alt'),
352            ' ,target.dataset.replaceSrc:',
353            target.dataset.replaceSrc,
354            ' ,target.dataset.textAvatar:',
355            target.dataset.textAvatar
356          );
357
358          let generatedTextAvatar;
359          let generatedTextAvatarBase64;
360
361          switch (src) {
362            case 'LinksImg': {
363              // 如果 src 是 LinksImg 则使用友链配置里配置的友链默认 logo
364              src = target.dataset.replaceSrc || '/themes/theme-Joe3/assets/img/default_links_logo.png';
365              if (!src || src === targetSrc) {
366                if (target.dataset.textAvatar || target.getAttribute('alt')) {
367                  generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
368                  generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
369                  src = generatedTextAvatarBase64;
370                } else {
371                  src = '/themes/theme-Joe3/assets/img/default_links_logo.png';
372                }
373              }
374              break;
375            }
376            case 'AvatarImg': {
377              // 如果 src 是 AvatarImg 则使用博主配置里配置的默认头像
378              src = target.dataset.replaceSrc || '/upload/photo_2025-09-26_13-23-33.jpg';
379              if (!src || src === targetSrc) {
380                if (target.dataset.textAvatar || target.getAttribute('alt')) {
381                  generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
382                  target.setAttribute('data-generated-text-avatar', generatedTextAvatar);
383                  generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
384                  src = generatedTextAvatarBase64;
385                } else {
386                  src = '/themes/theme-Joe3/assets/img/peeps-avatar.png';
387                }
388              }
389              break;
390            }
391          }
392
393          const nowSrc =
394            src || target.dataset.replaceSrc || '/themes/theme-Joe3/assets/img/Joe3.png';
395          if (targetSrc === nowSrc) return;
396
397          if (
398            generatedTextAvatarBase64 &&
399            generatedTextAvatar &&
400            nowSrc === generatedTextAvatarBase64
401          ) {
402            target.setAttribute('data-generated-text-avatar', generatedTextAvatar);
403          } else if (target.getAttribute('data-generated-text-avatar')) {
404            target.removeAttribute('data-generated-text-avatar');
405          }
406
407          console.log('加载替换后的图片:', nowSrc, ' ,target.alt:', target.getAttribute('alt'));
408          target.setAttribute('onload', null);
409          target.setAttribute('src', nowSrc);
410        },
411        replaceAllTextAvatarImage: function () {
412          console.log('call replaceAllTextAvatarImage');
413          const generatedEles = document.querySelectorAll('img[data-generated-text-avatar]');
414          generatedEles.forEach(function (ele) {
415            const generatedTextAvatar = ele.getAttribute('data-generated-text-avatar');
416            const generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
417            ele.setAttribute('src', generatedTextAvatarBase64);
418          });
419        },
420        // 生成随机颜色函数
421        getRandomColor: function (alpha) {
422          const letters = '0123456789ABCDEF';
423          let color = '#';
424          for (let i = 0; i < 6; i++) {
425            color += letters[Math.floor(Math.random() * 16)];
426          }
427          if (alpha !== undefined) {
428            return color + (alpha >= 0 && alpha <= 1 ? Math.round(alpha * 255).toString(16) : 'FF');
429          }
430          return color;
431        },
432        // 生成随机颜色的文字性头像
433        generateTextAvatarImage: function (text, opts) {
434          opts = Object.assign({}, Joe.bloggerGenerateAvatarOpts, opts || {});
435          opts.fontSize = opts.fontSize || 50;
436          opts.font = opts.font || 'Great Vibes';
437          opts.canvasRadius = opts.canvasWidth || 1.5 * opts.fontSize;
438
439          // 如果是 var(--xxxx),则说明是 css 配置的变量,需要从html样式中解析成具体值
440          if (opts.textColor && /var\(--([\w-]+)\)/.test(opts.textColor)) {
441            const match = opts.textColor.match(/var\(--([\w-]+)\)/);
442            if (match) {
443              let cssVar =
444                getComputedStyle(document.documentElement)
445                  .getPropertyValue('--' + match[1])
446                  .trim() ||
447                getComputedStyle(document.body)
448                  .getPropertyValue('--' + match[1])
449                  .trim();
450              if (cssVar) {
451                opts.textColor = cssVar;
452              }
453            }
454          }
455
456          // 如果是 var(--xxxx),则说明是 css 配置的变量,需要从html样式中解析成具体值
457          if (opts.bgColor && /var\(--([\w-]+)\)/.test(opts.bgColor)) {
458            const match = opts.bgColor.match(/var\(--([\w-]+)\)/);
459            if (match) {
460              let cssVar =
461                getComputedStyle(document.documentElement)
462                  .getPropertyValue('--' + match[1])
463                  .trim() ||
464                getComputedStyle(document.body)
465                  .getPropertyValue('--' + match[1])
466                  .trim();
467              if (cssVar) {
468                opts.bgColor = cssVar;
469              }
470            }
471          }
472
473          // 创建一个新的 Canvas 元素
474          const canvas = document.createElement('canvas');
475          const ctx = canvas.getContext('2d');
476
477          // 设置 Canvas 的尺寸
478          canvas.width = opts.canvasRadius;
479          canvas.height = opts.canvasRadius;
480
481          if (opts.bgColor) {
482            ctx.fillStyle = opts.bgColor;
483          } else {
484            // 生成随机颜色的渐变背景
485            const gradient = ctx.createRadialGradient(
486              canvas.width / 2,
487              canvas.height / 2,
488              0,
489              canvas.width / 2,
490              canvas.height / 2,
491              canvas.width / 2
492            );
493            gradient.addColorStop(0, Joe.getRandomColor(0.7));
494            gradient.addColorStop(1, Joe.getRandomColor(0.7));
495
496            // 绘制渐变背景
497            ctx.fillStyle = gradient;
498          }
499
500          ctx.beginPath();
501          ctx.arc(canvas.width / 2, canvas.height / 2, canvas.width / 2, 0, Math.PI * 2);
502          ctx.fill();
503
504          // 设置文本样式
505          ctx.font = `${opts.fontSize}px ${opts.font}`;
506
507          if (opts.textColor) {
508            ctx.fillStyle = opts.textColor;
509          } else if (opts.useTextGradient) {
510            // 生成文字的线性渐变
511            const textGradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height);
512            textGradient.addColorStop(0, Joe.getRandomColor(0.9)); // 文字的渐变色
513            textGradient.addColorStop(1, Joe.getRandomColor(0.9)); // 文字的渐变色
514            ctx.fillStyle = textGradient;
515          } else if (opts.bgColor) {
516            // 设置了背景色,但是没有设置文字颜色,则需要设置默认文字颜色为黑色,防止文字颜色和背景色一致【注;背景色为渐变色,文字能显示出来,因此不需要设置文字颜色】
517            // 如果 bgColor 为黑色,则文字颜色设置为白色,否则设置为黑色
518            ctx.fillStyle = /(#000000|#000|black)/.test(opts.bgColor) ? '#fff' : '#000';
519          }
520
521          ctx.textAlign = 'center';
522          ctx.textBaseline = 'middle';
523
524          // 在 Canvas 上绘制文本
525          ctx.fillText(text.charAt(0), canvas.width / 2, canvas.height / 2);
526
527          // 返回生成的图片对象 base64 编码
528          return canvas.toDataURL();
529        },
530      };
531      ThemeConfig.enable_console_theme &&
532        console.log(
533          '%cTheme By  Jiewen' + ' | 版本 V' + ThemeConfig.version,
534          'padding: 8px 15px;color:#fff;background: linear-gradient(270deg, #986fee, #8695e6, #68b7dd, #18d7d3);border-radius: 0 15px 0 15px;'
535        );
536    </script>
536
537  
538    
539    <!--    <th:block th:replace="~{modules/themeSettingVariable :: themeSetting}" />-->
540    <!--    <th:block th:if="${htmlType == 'post'}">-->
541    <!--    <th:block th:replace="~{modules/postMetaVariable :: postSetting}" />-->
542    <!--    </th:block>-->
543    <link rel="shortcut icon" size="32x32" href="/upload/favicon.png" />
544    <link rel="canonical" href="https://disue.com" />
545    <link rel="apple-touch-icon" sizes="180x180" href="/upload/favicon.png" />
546    
547    <style>
548      
549      @font-face {
550          font-family: "Joe Font";
551          font-weight: 400;
552          font-style: normal;
553          font-display: swap;
554          
555          
556
557      }
558      html body {
559          --waline-avatar-size: 2.25rem;
560          --waline-m-avatar-size: calc(var(--waline-avatar-size) * 9 / 13);
561          --waline-theme-color:#1A73E8;
562          --waline-active-color: #1A73E8;
563
564          --theme: #1A73E8;
565          --wave-color: #fff;
566          --scroll-bar: #c0c4cc;
567          --loading-bar:  var(--theme);
568          --img-max-width: 100%;
569          font-family: "Joe Font", "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, "sans-serif";
570          --halo-comment-widget-base-font-family: "Joe Font", "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, "sans-serif";
571          --halo-search-widget-base-font-family: "Joe Font", "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, "sans-serif";
572          --halo-comment-widget-base-color: var(--main);
573          --halo-comment-widget-base-info-color:var(--routine);
574
575
576
577      }
578      html[data-mode='dark'] body {
579
580          --waline-theme-color:#9999ff;
581          --waline-active-color: #9999ff;
582          --theme: #9999ff;
583          --wave-color: #fff;
584          --scroll-bar: #c0c4cc;
585          --loading-bar: var(--theme);
586          --halo-search-widget-color-modal-layer: rgba(10, 11, 12, 0.8);
587          --halo-search-widget-color-modal-content-bg: rgb(27, 27, 30);
588          --halo-search-widget-color-form-input: rgb(255, 255, 255);
589          --halo-search-widget-color-form-input-placeholder: #868686;
590          --halo-search-widget-color-form-input-bg: rgb(27, 27, 30);
591          --halo-search-widget-color-form-divider: #292929;
592          --halo-search-widget-color-result-item-bg: #232323;
593          --halo-search-widget-color-result-item-hover-bg: #2b3033;
594          --halo-search-widget-color-result-item-title: rgb(255 255 255);
595          --halo-search-widget-color-result-item-content: #868686;
596          --halo-search-widget-color-command-kbd-item: #868686;
597          --halo-search-widget-color-command-kbd-border: #868686;
598          --halo-search-widget-color-result-empty: #868686;
599          --halo-comment-widget-component-form-input-bg-color: #475569;
600          --halo-comment-widget-component-form-input-color: #ffffff;
601          --halo-comment-widget-component-form-input-border-color: #495056;
602          --halo-comment-widget-component-form-input-border-color-focus: #65a3ff;
603          --halo-comment-widget-component-form-input-box-shadow-focus: 0 0 0 0.15em #1c3966;
604          --halo-comment-widget-component-form-button-login-bg-color: #334155;
605          --halo-comment-widget-component-form-button-login-bg-color-hover: #475569;
606          --halo-comment-widget-component-form-button-login-border-color: #475569;
607          --halo-comment-widget-component-form-button-submit-border-color: #475569;
608          --halo-comment-widget-component-form-button-submit-border-color-hover: #64748b;
609          --halo-comment-widget-component-form-button-emoji-color: #cbd5e1;
610
611          --halo-comment-widget-component-comment-item-action-bg-color-hover: #475569;
612          --halo-comment-widget-component-comment-item-action-color: #64748b;
613          --halo-comment-widget-component-comment-item-action-color-hover: #94a3b8;
614
615          --halo-comment-widget-component-pagination-button-bg-color-hover: #475569;
616          --halo-comment-widget-component-pagination-button-bg-color-active: #475569;
617          --halo-comment-widget-component-pagination-button-border-color-active: #475569;
618
619          --halo-comment-widget-component-emoji-picker-rgb-color: 222, 222, 221;
620          --halo-comment-widget-component-emoji-picker-rgb-accent: 58, 130, 247;
621          --halo-comment-widget-component-emoji-picker-rgb-background: 21, 22, 23;
622          --halo-comment-widget-component-emoji-picker-rgb-input: 0, 0, 0;
623          --halo-comment-widget-component-emoji-picker-color-border: rgba(255, 255, 255, 0.1);
624          --halo-comment-widget-component-emoji-picker-color-border-over: rgba(255, 255, 255, 0.2);
625
626
627      }
628      ::-webkit-scrollbar {
629          width: 8px;
630      }
631      ::-webkit-scrollbar-thumb {
632          background: var(--scroll-bar);
633      }
634      
635      
636      html[data-mode="dark"] body {
637        background-repeat: no-repeat;
638        background-size: cover;
639        position: relative;
640      }
641
642      html[data-mode="dark"] body::before {
643        content: "";
644        position: fixed;
645        top: 0;
646        left: 0;
647        width: 100%;
648        height: 100%;
649        background-image: url("");
650        background-position: top center;
651        background-size: cover;
652        background-repeat: no-repeat;
653        z-index: -1; /* 保证内容层在背景之上 */
654      }
655
656      
657      
658      html[data-mode="dark"] body {
659          background-image: none;
660      }
661      
662    </style>
663  
664    
665      <!-- 加载条 -->
666      <link rel="stylesheet" href="/themes/theme-Joe3/assets/lib/nprogress/nprogress.min.css" />
667      <style>
668        #nprogress .bar {
669          height: 3px;
670          background: var(--loading-bar);
671        }
672        #nprogress .peg {
673          display: none;
674        }
675      </style>
676      
676<script src="/themes/theme-Joe3/assets/lib/nprogress/nprogress.min.js"></script>
676
677    
678    <link
679      rel="preload stylesheet"
680      as="style"
681      href="/themes/theme-Joe3/assets/css/min/normalize.min.css?v=1.4.0"
682    />
683    <link
684      rel="preload stylesheet"
685      as="style"
686      href="/themes/theme-Joe3/assets/lib/font-awesome/css/font-awesome.min.css"
687    />
688    <link
689      rel="preload stylesheet"
690      as="style"
691      href="//at.alicdn.com/t/font_2788564_crkap1ed9j5.css"
692    />
693    <link
694      rel="preload stylesheet"
695      as="style"
696      href="//at.alicdn.com/t/c/font_4198339_jcoci5bgy7.css"
697    />
698    
699    <link
700      rel="preload stylesheet"
701      as="style"
702      href="/themes/theme-Joe3/assets/css/min/theme.min.css?v=1.4.0"
703    />
704    <style>
705      #Joe .joe_container {
706        max-width: 1320px !important;
707      }
708
709      @media (max-width: 1360px) {
710        #Joe .joe_container {
711          max-width: initial !important;
712        }
713      }
714      @media (max-width: 768px) {
715        #Joe .joe_container {
716          max-width: initial !important;
717        }
718      }
719    </style>
720    <link rel="stylesheet" href="/themes/theme-Joe3/assets/lib/qmsg/qmsg.css" />
721    <link
722      rel="preload stylesheet"
723      as="style"
724      href="/themes/theme-Joe3/assets/lib/animate/animate.min.css"
725    />
726    
727    
728      <link
729        rel="preload stylesheet"
730        as="style"
731        href="/themes/theme-Joe3/assets/lib/prism/prism.min.css"
732      />
733      <link
734        rel="preload stylesheet"
735        as="style"
736        href="/themes/theme-Joe3/assets/lib/prism/themes/prism-one-dark.css"
737      />
738    
739    <link
740      rel="preload stylesheet"
741      as="style"
742      href="/themes/theme-Joe3/assets/css/min/global.min.css?v=1.4.0"
743    />
744    
745    
746    
747    
748    
749    
750    <link
751      rel="preload stylesheet"
752      as="style"
753      href="/themes/theme-Joe3/assets/css/min/responsive.min.css?v=1.4.0"
754    />
755    <link
756      rel="stylesheet"
757      href="/themes/theme-Joe3/assets/lib/fancybox/jquery.fancybox.min.css"
758    />
759    
760    
761    <link
762      rel="preload stylesheet"
763      as="style"
764      href="/themes/theme-Joe3/assets/css/min/beauty.min.css?v=1.4.0"
765    />
766    
767  
768    
768<script src="/themes/theme-Joe3/assets/lib/[email protected]/jquery.min.js?v=1.4.0"></script>
768
769    
770  <meta name="generator" content="Halo 2.26.1"/><meta name="description" content=""/><!-- plugin-comment-widget start -->
771<link rel="modulepreload" href="/plugins/PluginCommentWidget/assets/static/comment-widget.js?version=3.0.0">
772<link rel="stylesheet" href="/plugins/PluginCommentWidget/assets/static/index.css?version=3.0.0" />
773<!-- plugin-comment-widget end -->
774<!-- PluginSearchWidget start -->
775<script src="/plugins/PluginSearchWidget/assets/static/search-widget.iife.js?version=1.7.1" defer></script>
775
776<link rel="stylesheet" href="/plugins/PluginSearchWidget/assets/static/style.css?version=1.7.1" />
777<!-- PluginSearchWidget end -->
778<link rel="icon" href="/upload/favicon.png" />
779<script async defer src="/halo-tracker.js" data-group="content.halo.run" data-plural="singlepages" data-name="173d295b-83ea-4b43-b201-07fbd30f155c"></script>
779
780</head>
781  <!-- /OG -->
782  
783    <body>
784      <div id="Joe">
785        
786    <header class="joe_header">
787      <div
788        class="joe_header__above topInDown fixed "
789      >
790        <div
791          class="joe_container joe_header_container"
792        >
793          <i class="joe-font joe-icon-caidan joe_header__above-slideicon"></i>
794          
795            <a
796              title="Disue · 迪素"
797              class="joe_header__above-logo"
798              href="https://disue.com"
799            >
800              <img
801                style="border-radius:4px"
802                src="/upload/favicon.png"
803                alt="Disue · 迪素"
804                onerror="Joe.errorImg(this, 'ErrAvatarImg')" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/upload/favicon.png?width=1600 1600w, /upload/favicon.png?width=400 400w, /upload/favicon.png?width=800 800w, /upload/favicon.png?width=1200 1200w"
805              />
806            </a>
807          
808          <nav
809            class="joe_header__above-nav  "
810          >
811            
812            <!--        自选导航-->
813            
814              
815                
816                  
817                    
818                      
819    <a
820      class="item"
821      href="/"
822      title="首页"
823    >
824      
825      首页
826    </a>
827  
828                    
829                    
830                  
831                    
832                      
833    <a
834      class="item"
835      href="//img.disue.com"
836      target="_blank"
837      title="图床"
838    >
839      
840      图床
841    </a>
842  
843                    
844                    
845                  
846                    
847                      
848    <a
849      class="item"
850      href="/about"
851      target="_self"
852      title="关于"
853    >
854      
855      关于
856    </a>
857  
858                    
859                    
860                  
861                    
862                      
863    <a
864      class="item"
865      href="/links"
866      target="_self"
867      title="友链"
868    >
869      
870      友链
871    </a>
872  
873                    
874                    
875                  
876                
877              
878            
879          </nav>
880
881          <div class="joe_header__above-search">
882            <!--        <div class="nav_login">-->
883            <!--          <th:block th:if="${#authentication.name == 'anonymousUser'}">-->
884            <!--          <a href="/console" title="搜索"><i class="jiewen joe-icon-zhanghao"></i></a>-->
885            <!--          </th:block>-->
886            <!--          <th:block th:if="${#authentication.name != 'anonymousUser'}">-->
887            <!--            <th:block th:with="contributor = ${contributorFinder.getContributor(#authentication.name)}">-->
888            <!--            <img th:src="${contributor.avatar}" th:title="${contributor.displayName}" th:alt="${contributor.displayName}" onerror="Joe.errorImg(this, 'ErrAvatarImg')" >-->
889            <!--            </th:block>-->
890            <!--          </th:block>-->
891            <!--        </div>-->
892            <!--        <input maxlength="16" autocomplete="off" placeholder="请输入关键字..." name="keyword" value="" class="input" type="text">-->
893            <button
894              type="submit"
895              id="halo-search"
896              class="submit"
897              style="border-radius: 17px 17px 17px 17px"
898              aria-label="搜索按钮"
899            >
900              <i class="joe-font joe-icon-search"></i>
901            </button>
902            <!--        <span class="icon"></span>-->
903            
904            <!--        <nav class="result">-->
905            <!--          <a href="archives/ce-shi-wen-zhang.html" title="测试文章" class="item">-->
906            <!--            <span class="sort">1</span>-->
907            <!--            <span class="text">测试文章</span>-->
908            <!--          </a>-->
909            <!--          <a href="archives/hello-halo.html" title="Hello Halo" class="item">-->
910            <!--            <span class="sort">2</span>-->
911            <!--            <span class="text">Hello Halo</span>-->
912            <!--          </a>-->
912
913            <!--        </nav>-->
914          </div>
915
916          <a href="javascript:SearchWidget.open()" title="搜索"
917            ><i class="joe-font joe-icon-search joe_header__above-searchicon"></i
918          ></a>
919        </div>
920      </div>
921
922      <div class="joe_header__slideout">
923        <div class="joe_header__slideout-wrap">
924          <img
925            width="100%"
926            height="150"
927            class="joe_header__slideout-image"
928            src="/themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0"
929            alt="侧边栏壁纸"
930            onerror="Joe.errorImg(this)" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0&width=1600 1600w, /themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0&width=400 400w, /themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0&width=800 800w, /themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0&width=1200 1200w"
931          />
932          <div class="joe_header__slideout-author">
933            <img
934              width="50"
935              height="50"
936              class="avatar ls-is-cached lazyloaded"
937              data-src="/upload/photo_2025-09-26_13-23-33.jpg"
938              src="/upload/photo_2025-09-26_13-23-33.jpg"
939              alt="博主头像"
940              data-text-avatar="Disue · 迪素"
941              onload="Joe.loadedPlaceholderReplaceImg(this, 'AvatarImg')"
942              onerror="Joe.errorImg(this, 'ErrAvatarImg')" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/upload/photo_2025-09-26_13-23-33.jpg?width=1600 1600w, /upload/photo_2025-09-26_13-23-33.jpg?width=400 400w, /upload/photo_2025-09-26_13-23-33.jpg?width=800 800w, /upload/photo_2025-09-26_13-23-33.jpg?width=1200 1200w"
943            />
944            <div class="info">
945              <a
946                class="link"
947                href="https://disue.com"
948                target="_blank"
949                rel="noopener noreferrer nofollow"
950                >Disue · 迪素
951                
952              </a>
953              <p class="motto joe_motto">Carpe diem</p>
954            </div>
955          </div>
956          
957          <ul class="joe_header__slideout-count">
958            <li class="item">
959              <i class="joe-font joe-icon-danganguanli"></i>
960              <span>累计撰写 <strong>16</strong> 篇文章</span>
961            </li>
962            
963              <li class="item">
964                <i class="joe-font joe-icon-remen"></i>
965                <span>累计创建 <strong>16</strong> 个标签</span>
966              </li>
967            
968            
969              <li class="item">
970                <i class="joe-font joe-icon-message"></i>
971                <span>累计收到 <strong>2</strong> 条评论</span>
972              </li>
973            
974            
975          </ul>
976          <ul class="joe_header__slideout-menu panel-box">
977            <li>
978              <a class="link panel in" href="#" rel="nofollow">
979                <span>栏目</span>
980                <i class="joe-font joe-icon-arrow-right"></i>
981              </a>
982              <ul class="slides panel-body panel-box panel-side-menu" style="display: block">
983                
984                
985                  
986                    
987                      
988                        
989                          <li>
990                            <a
991                              class="link"
992                              href="/"
993                              title="首页"
994                              >首页</a
995                            >
996                          </li>
997                        
998                        
999                      
1000                        
1001                          <li>
1002                            <a
1003                              class="link"
1004                              href="//img.disue.com"
1005                              target="_blank"
1006                              title="图床"
1007                              >图床</a
1008                            >
1009                          </li>
1010                        
1011                        
1012                      
1013                        
1014                          <li>
1015                            <a
1016                              class="link"
1017                              href="/about"
1018                              target="_self"
1019                              title="关于"
1020                              >关于</a
1021                            >
1022                          </li>
1023                        
1024                        
1025                      
1026                        
1027                          <li>
1028                            <a
1029                              class="link"
1030                              href="/links"
1031                              target="_self"
1032                              title="友链"
1033                              >友链</a
1034                            >
1035                          </li>
1036                        
1037                        
1038                      
1039                    
1040                  
1041                
1042              </ul>
1043            </li>
1044          </ul>
1045        </div>
1046      </div>
1047
1048      <div class="joe_header__searchout">
1049        <a href="javascript:SearchWidget.open()" title="搜索"></a>
1050        <!--    <div class="joe_container">-->
1051
1052        <!--      <div class="joe_header__searchout-inner">-->
1053        <!--        <form class="joe_header__above-search-mobile" method="get" action="http://localhost:8093/search">-->
1054        <!--          <input maxlength="16" autocomplete="off" placeholder="请输入关键字..." name="keyword" value="" class="input" type="text">-->
1055        <!--          <button type="submit" class="submit">搜索</button>-->
1056        <!--        </form>-->
1057        <!--      </div>-->
1058        <!--    </div>-->
1059      </div>
1060
1061      <div class="joe_header__toc">
1062        <div class="joe_header__toc-wrap">
1063          <div class="toc_top">
1064            <h3>目 录<span>CONTENT</span></h3>
1065            <img
1066              width="100%"
1067              height="150"
1068              src="/themes/theme-Joe3/assets/img/context_bg.png"
1069              alt="文章目录"
1070              onerror="Joe.errorImg(this)" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/themes/theme-Joe3/assets/img/context_bg.png?width=1600 1600w, /themes/theme-Joe3/assets/img/context_bg.png?width=400 400w, /themes/theme-Joe3/assets/img/context_bg.png?width=800 800w, /themes/theme-Joe3/assets/img/context_bg.png?width=1200 1200w"
1071            />
1072          </div>
1073          <div id="js-toc-mobile" class="toc"></div>
1074        </div>
1075      </div>
1076
1077      <div class="joe_header__mask"></div>
1078    </header>
1079  
1080        <div
1081          class="joe_container joe_main_container page-sheet animated showInUp "
1082        >
1083          <div class="joe_main">
1084            <div
1085              class="joe_detail"
1086            >
1087              <h1
1088                class="joe_detail__title txt-shadow"
1089              >
1090                关于
1091              </h1>
1092              
1093
1094              <article
1095                class="joe_detail__article animated fadeIn center-img  uncopy   "
1096              >
1097                <div id="singlePage-inner">
1098                  
1099                    <h3 style="" id="%F0%9F%9A%80-%E6%88%91%E4%BB%AC%E6%98%AF%E8%B0%81%EF%BC%9F">🚀 我们是谁?</h3><p style="">欢迎来到 <strong>Disue.com</strong>!</p><p style=""><strong>Disue</strong> 是一个专注于 <strong>IT 基础设施、服务器运维和网络安全解决方案</strong>的深度技术博客。</p><p style="">我们相信,高性能、高安全性和高性价比的数字服务不应该是少数专家的特权,而应该通过知识共享普及给每一位技术爱
1099好者和站长。</p><p style="">我们致力于提供<strong>实用、深入、可操作</strong>的技术指南和经验分享。</p><h3 style="" id="%F0%9F%8C%90-disue-%E7%9A%84%E6%A0%B8%E5%BF%83%E5%85%B3%E6%B3%A8%E7%82%B9-(%E6%8A%80%E6%9C%AF%E6%A0%88)">🌐 Disue 的核心关注点 (技术栈)</h3><p style="">在 Disue,您可以找到以下几个关键领域的一线实践和解决方案:</p><ul><li><p style=""><strong>云原生与虚拟化</strong></p></li><li><p style=""><strong>服务器运维与优化</strong></p></li><li><p style=""><strong>网络安全与防御</strong></p></li><li><p style=""><strong>连接技术与前沿趋势</strong></p></li></ul><h3 style="" id="%E2%9C%A8-%E6%88%91%E4%BB%AC%E7%9A%84%E6%84%BF%E6%99%AF">✨ 我们的愿景</h3><p style="">我们的口号是:<strong>D</strong>ynamic <strong>I</strong>nternet <strong>S</strong>ecurity <strong>U</strong>tility <strong>E</strong>ngine (Disue)</p><p style="">我们致力于成为您的技术引擎,为您提供:</p><ol><li><p style=""><strong>动态(Dynamic)</strong> 的技术更新和解决思路。</p></li><li><p style=""><strong>安全(Security)</strong> 稳定的环境搭建指南。</p></li><li><p style=""><strong>实用(Utility)</strong> 且经过验证的运维脚本和配置。</p></li></ol><p style="">无论您是想要搭建一个高防网站的站长,还是在探索容器化技术的运维工程师,Disue 都将是您值得信赖的技术伙伴。</p>
1100                  
1101                  
1102                </div>
1103                
1104              </article>
1105            </div>
1106            
1107              <div class="joe_comment">
1108                
1109                
1110                  
1111    <div class="joe_comment_box">
1112      <div class="box_title">
1113        <h2>评论区</h2>
1114      </div>
1115      
1116        <div id="comment-content-halo-run-SinglePage-173d295b-83ea-4b43-b201-07fbd30f155c"></div>
1117<script type="module" data-pjax>
1118  import { init } from "/plugins/PluginCommentWidget/assets/static/comment-widget.js?version=3.0.0";
1119  init(
1120    "#comment-content-halo-run-SinglePage-173d295b-83ea-4b43-b201-07fbd30f155c",
1121    {
1122      group: "content.halo.run",
1123      kind: "SinglePage",
1124      name: "173d295b-83ea-4b43-b201-07fbd30f155c",
1125    }
1126  );
1127</script>
1127
1128
1129      
1130      
1131    </div>
1132  
1133                
1134              </div>
1135            
1136            
1137          </div>
1138
1139          
1140            
1141    <aside
1142      class="joe_aside"
1143    >
1144      
1145        
1146          
1147          
1148          
1149          
1150          
1151          
1152          
1153            <!--        热门文章-->
1154            
1155    
1156    <section class="joe_aside__item newest">
1157      <div class="joe_aside__item-title">
1158        <i class="joe-font joe-icon-huo"></i>
1159        <span class="text">热门文章</span>
1160      </div>
1161      <div class="joe_aside__item-contain">
1162        <ul class="list">
1163          
1164            <li class="item">
1165              <a class="link" href="/archives/esim-global"
1166                >全球 eSIM 选购与长效保号全攻略</a
1167              >
1168              <i class="joe-font joe-icon-link"></i>
1169            </li>
1170            <li class="item">
1171              <a class="link" href="/archives/cf-api-ns"
1172                >Cloudflare API 修改域名 NS 服务器指南</a
1173              >
1174              <i class="joe-font joe-icon-link"></i>
1175            </li>
1176            <li class="item">
1177              <a class="link" href="/archives/esimgg"
1178                >告别漫游烦恼,拥抱自由连接:eSIM.gg</a
1179              >
1180              <i class="joe-font joe-icon-link"></i>
1181            </li>
1182            <li class="item">
1183              <a class="link" href="/archives/free-domain"
1184                >免费域名/低价域名汇总</a
1185              >
1186              <i class="joe-font joe-icon-link"></i>
1187            </li>
1188            <li class="item">
1189              <a class="link" href="/archives/vpscommand"
1190                >VPS/Linux 服务器常用脚本和命令</a
1191              >
1192              <i class="joe-font joe-icon-link"></i>
1193            </li>
1194          
1195        </ul>
1196      </div>
1197    </section>
1198  
1199  
1200          
1201          
1202          
1203          
1204          
1205          
1206          
1207        
1208      
1209        
1210          
1211          
1212          
1213          
1214          
1215          
1216          
1217          
1218          
1219          
1220            <!--        标签云-->
1221            
1222    <section class="joe_aside__item tags-cloud" id="tags-cloud">
1223      <div class="joe_aside__item-title">
1224        <i class="joe-font joe-icon-tag"></i>
1225        <span class="text">标签云</span>
1226        <a class="tags_more" href="/tags">更多<i class="joe-font joe-icon-more-right"></i></a>
1227      </div>
1228      <div class="joe_aside__item-contain">
1229        <div
1230          class="tags-cloud-list static"
1231          style="display:none"
1232        >
1233          
1234            
1235              <a
1236                data-label="短网址"
1237                data-url="/tags/duan-wang-zhi"
1238                href="/tags/duan-wang-zhi"
1239                title="短网址"
1240                >短网址</a
1241              ><a
1242                data-label="Fail2Ban"
1243                data-url="/tags/fail2ban"
1244                href="/tags/fail2ban"
1245                title="Fail2Ban"
1246                >Fail2Ban</a
1247              ><a
1248                data-label="国际互联"
1249                data-url="/tags/guo-ji-hu-lian"
1250                href="/tags/guo-ji-hu-lian"
1251                title="国际互联"
1252                >国际互联</a
1253              ><a
1254                data-label="跨境网络优化"
1255                data-url="/tags/kua-jing-wang-luo-you-hua"
1256                href="/tags/kua-jing-wang-luo-you-hua"
1257                title="跨境网络优化"
1258                >跨境网络优化</a
1259              ><a
1260                data-label="Hermes"
1261                data-url="/tags/hermes"
1262                href="/tags/hermes"
1263                title="Hermes"
1264                >Hermes</a
1265              ><a
1266                data-label="域名"
1267                data-url="/tags/yu-ming"
1268                href="/tags/yu-ming"
1269                title="域名"
1270                >域名</a
1271              ><a
1272                data-label="香港"
1273                data-url="/tags/xiang-gang"
1274                href="/tags/xiang-gang"
1275                title="香港"
1276                >香港</a
1277              ><a
1278                data-label="Docker"
1279                data-url="/tags/docker"
1280                href="/tags/docker"
1281                title="Docker"
1282                >Docker</a
1283              ><a
1284                data-label="CN2 GIA"
1285                data-url="/tags/cn2-gia"
1286                href="/tags/cn2-gia"
1287                title="CN2 GIA"
1288                >CN2 GIA</a
1289              ><a
1290                data-label="VPS"
1291                data-url="/tags/vps"
1292                href="/tags/vps"
1293                title="VPS"
1294                >VPS</a
1295              ><a
1296                data-label="eSIM"
1297                data-url="/tags/esim"
1298                href="/tags/esim"
1299                title="eSIM"
1300                >eSIM</a
1301              ><a
1302                data-label="AI"
1303                data-url="/tags/ai"
1304                href="/tags/ai"
1305                title="AI"
1306                >AI</a
1307              ><a
1308                data-label="Nginx"
1309                data-url="/tags/nginx"
1310                href="/tags/nginx"
1311                title="Nginx"
1312                >Nginx</a
1313              ><a
1314                data-label="Cloudflare"
1315                data-url="/tags/cloudflare"
1316                href="/tags/cloudflare"
1317                title="Cloudflare"
1318                >Cloudflare</a
1319              ><a
1320                data-label="Halo博客"
1321                data-url="/tags/halobo-ke"
1322                href="/tags/halobo-ke"
1323                title="Halo博客"
1324                >Halo博客</a
1325              >
1326            
1327          
1328          
1329        </div>
1330        
1331          <div id="tags-3d">
1332            <div class="empty">加载中…</div>
1333          </div>
1334        
1335      </div>
1336    </section>
1337  
1338          
1339          
1340          
1341          
1342        
1343      
1344        
1345          
1346          
1347          
1348          
1349          
1350          
1351          
1352          
1353          
1354          
1355          
1356          
1357          
1358        
1359      
1360        
1361          
1362          
1363          
1364          
1365          
1366          
1367          
1368          
1369          
1370          
1371          
1372            <!--        分类云-->
1373            
1374    <section class="joe_aside__item tags-cloud" id="categories-cloud">
1375      <div class="joe_aside__item-title">
1376        <i class="joe-font joe-icon-tag"></i>
1377        <span class="text">分类云</span>
1378        <a class="tags_more" href="/categories"
1379          >更多<i class="joe-font joe-icon-more-right"></i
1380        ></a>
1381      </div>
1382      <div class="joe_aside__item-contain">
1383        <div
1384          class="categories-cloud-list static"
1385        >
1386          
1387          
1388            
1389              <a
1390                data-label="岁月拾遗"
1391                data-url="/categories/life"
1392                href="/categories/life"
1393                title="岁月拾遗"
1394                >岁月拾遗</a
1395              ><a
1396                data-label="数字生活"
1397                data-url="/categories/digitalnomad"
1398                href="/categories/digitalnomad"
1399                title="数字生活"
1400                >数字生活</a
1401              ><a
1402                data-label="云端折腾"
1403                data-url="/categories/cloudtech"
1404                href="/categories/cloudtech"
1405                title="云端折腾"
1406                >云端折腾</a
1407              >
1408            
1409          
1410        </div>
1411        
1412      </div>
1413    </section>
1414  
1415          
1416          
1417          
1418        
1419      
1420    </aside>
1421  
1422          
1423        </div>
1424        <!--    action-->
1425        
1426    <div class="joe_action">
1427      
1428      
1429        
1430      
1431      
1432      
1433        <div class="joe_action_item mode">
1434          <svg
1435            class="mode-light"
1436            height="25"
1437            viewBox="0 0 1024 1024"
1438            width="25"
1439            xmlns="http://www.w3.org/2000/svg"
1440          >
1441            <path
1442              d="M234.24 512a277.76 277.76 0 1 0 555.52 0 277.76 277.76 0 1 0-555.52 0zM512 187.733a42.667 42.667 0 0 1-42.667-42.666v-102.4a42.667 42.667 0 0 1 85.334 0v102.826A42.667 42.667 0 0 1 512 187.733zm-258.987 107.52a42.667 42.667 0 0 1-29.866-12.373l-72.96-73.387a42.667 42.667 0 0 1 59.306-59.306l73.387 72.96a42.667 42.667 0 0 1 0 59.733 42.667 42.667 0 0 1-29.867 12.373zm-107.52 259.414H42.667a42.667 42.667 0 0 1 0-85.334h102.826a42.667 42.667 0 0 1 0 85.334zm34.134 331.946a42.667 42.667 0 0 1-29.44-72.106l72.96-73.387a42.667 42.667 0 0 1 59.733 59.733l-73.387 73.387a42.667 42.667 0 0 1-29.866 12.373zM512 1024a42.667 42.667 0 0 1-42.667-42.667V878.507a42.667 42.667 0 0 1 85.334 0v102.826A42.667 42.667 0 0 1 512 1024zm332.373-137.387a42.667 42.667 0 0 1-29.866-12.373l-73.387-73.387a42.667 42.667 0 0 1 0-59.733 42.667 42.667 0 0 1 59.733 0l72.96 73.387a42.667 42.667 0 0 1-29.44 72.106zm136.96-331.946H878.507a42.667 42.667 0 1 1 0-85.334h102.826a42.667 42.667 0 0 1 0 85.334zM770.987 295.253a42.667 42.667 0 0 1-29.867-12.373 42.667 42.667 0 0 1 0-59.733l73.387-72.96a42.667 42.667 0 1 1 59.306 59.306l-72.96 73.387a42.667 42.667 0 0 1-29.866 12.373z"
1443            />
1444          </svg>
1445          <svg
1446            class="mode-dark"
1447            height="25"
1448            viewBox="0 0 1024 1024"
1449            width="25"
1450            xmlns="http://www.w3.org/2000/svg"
1451          >
1452            <path
1453              d="M587.264 104.96c33.28 57.856 52.224 124.928 52.224 196.608 0 218.112-176.128 394.752-393.728 394.752-29.696 0-58.368-3.584-86.528-9.728C223.744 832.512 369.152 934.4 538.624 934.4c229.376 0 414.72-186.368 414.72-416.256 1.024-212.992-159.744-389.12-366.08-413.184z"
1454            />
1455            <path
1456              d="M340.48 567.808l-23.552-70.144-70.144-23.552 70.144-23.552 23.552-70.144 23.552 70.144 70.144 23.552-70.144 23.552-23.552 70.144zM168.96 361.472l-30.208-91.136-91.648-30.208 91.136-30.208 30.72-91.648 30.208 91.136 91.136 30.208-91.136 30.208-30.208 91.648z"
1457            />
1458          </svg>
1459        </div>
1460      
1461      
1462        <div class="joe_action_item back2top">
1463          <svg height="25" viewBox="0 0 1024 1024" width="25" xmlns="http://www.w3.org/2000/svg">
1464            <path
1465              d="M725.902 498.916c18.205-251.45-93.298-410.738-205.369-475.592l-6.257-3.982-6.258 3.414c-111.502 64.853-224.711 224.142-204.8 475.59-55.751 53.476-80.214 116.623-80.214 204.8v15.36l179.2-35.27c11.378 40.39 58.596 69.973 113.21 69.973 54.613 0 101.262-29.582 112.64-68.836l180.337 36.41v-15.36c-.569-89.885-25.031-153.6-82.489-206.507zM571.733 392.533c-33.564 31.29-87.04 28.445-118.329-5.12s-28.444-87.04 5.12-117.76c33.565-31.289 87.04-28.444 118.33 5.12s28.444 86.471-5.12 117.76zm-56.32 368.64c-35.84 0-64.284 29.014-64.284 64.285 0 35.84 54.044 182.613 64.284 182.613s64.285-146.773 64.285-182.613c0-35.271-29.014-64.285-64.285-64.285z"
1466            />
1467          </svg>
1468        </div>
1469      
1470    </div>
1471  
1472        
1473    <footer
1474      class="joe_footer   "
1475    >
1476      <div
1477        class="joe_container"
1478      >
1479        <div class="item">
1480          <p>
1481            © 2021 - 2026<a
1482              href="https://disue.com"
1483              target="_blank"
1484              rel="noopener noreferrer"
1485            >
1486              Disue · 迪素
1487            </a>
1488            
1489          </p>
1490          
1491
1492          
1493            
1494            
1495            
1496            
1497            
1498            
1499            
1500
1501            
1502              <p class="site_driven">
1503                本站点由
1504                <a
1505                  href="https://go.ms.ci/bwh"
1506                  target="_blank"
1507                  rel="noopener noreferrer nofollow"
1508                >
1509                  <img
1510                    class="custom"
1511                    src="/upload/logo1.png"
1512                    alt="云服务商"
1513                    onerror="Joe.errorImg(this, 'LoadFailedImg')" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/upload/logo1.png?width=1600 1600w, /upload/logo1.png?width=400 400w, /upload/logo1.png?width=800 800w, /upload/logo1.png?width=1200 1200w"
1514                  /> </a
1515                >提供云服务
1516              </p>
1517            
1518          
1519          
1520          
1521        </div>
1522        <div class="side-col">
1523          
1524            <div class="item">
1525              
1526                <a class="rss" href="/rss.xml" target="_blank" rel="noopener noreferrer"
1527                  ><i class="joe-font joe-icon-rss-fill"></i>&nbsp;RSS</a
1528                >
1529              
1530              
1531                <a href="/sitemap.xml" target="_blank" rel="noopener noreferrer">
1532                  站点地图
1533                </a>
1534              
1535            </div>
1536          
1537          
1538        </div>
1539      </div>
1540    </footer>
1541  
1542      </div>
1543      
1543<script>
1544        // 等待文档加载完成
1545        document.addEventListener("DOMContentLoaded", function() {
1546          // 获取文章内容
1547          const postContent = document.getElementById("singlePage-inner").innerText || "";
1548
1549          // 使用正则表达式匹配中文、数字和字母
1550          const matches = postContent.match(/[\u4e00-\u9fa5a-zA-Z0-9]/g);
1551
1552          // 计算有效字符数
1553          const wordCount = matches ? matches.length : 0;
1554
1555          // 更新字数统计显示
1556          document.getElementById("wordCount").innerText = `${wordCount} 字`;
1557        });
1558
1559      </script>
1559
1560      
1561    <!--    ===== 引入脚本 start ===== -->
1562    <!--    <th:block th:if="${htmlType == 'index' && theme.config.home.enable_index_list_effect == true} or ${htmlType == 'journals' && theme.config.journals.enable_journal_effect == true} or ${htmlType == 'photos' && theme.config.photos.enable_photos_effect == true}">-->
1563    
1563<script src="/themes/theme-Joe3/assets/lib/wowjs/wow.min.js"></script>
1563
1564    <!--    </th:block>-->
1565    
1565<script src="/themes/theme-Joe3/assets/lib/lazysizes/lazysizes.min.js"></script>
1565
1566    
1566<script src="/themes/theme-Joe3/assets/lib/qmsg/qmsg.js"></script>
1566
1567    
1568      
1568<script src="/themes/theme-Joe3/assets/lib/j-marked/marked.min.js"></script>
1568
1569    
1570    
1570<script src="/themes/theme-Joe3/assets/js/min/utils.min.js"></script>
1570
1571
1572    
1573    
1574    
1575    
1575<script src="/themes/theme-Joe3/assets/lib/fancybox/jquery.fancybox.min.js"></script>
1575
1576    
1577    
1577<script src="/themes/theme-Joe3/assets/js/min/custom.min.js?v=1.4.0"></script>
1577
1578    
1579      
1579<script src="/themes/theme-Joe3/assets/lib/clipboard/clipboard.min.js"></script>
1579
1580    
1581    
1582      
1582<script src="/themes/theme-Joe3/assets/lib/favico/favico.min.js"></script>
1582
1583    
1584    
1585    <!--相册-->
1586    
1587
1588    <!--===== 引入页面级js start =====-->
1589    
1589<script src="/themes/theme-Joe3/assets/js/min/common.min.js?v=1.4.0"></script>
1589
1590    
1591      
1591<script src="/themes/theme-Joe3/assets/lib/prism/prism.min.js"></script>
1591
1592    
1593    
1594    
1595    
1596        
1597    
1598    
1599    
1600      
1600<script src="/themes/theme-Joe3/assets/lib/draggabilly/draggabilly.min.js"></script>
1600
1601      
1601<script src="/themes/theme-Joe3/assets/js/min/leaving.min.js"></script>
1601
1602    
1603    
1604
1605    <!-- ===== 引入页面级js end ===== -->
1606
1607    <!-- ===== 引入脚本 start ===== -->
1608
1609    
1610
1611    <!-- ===== 引入脚本 end =====-->
1612
1613    
1614    
1615    
1616
1617    <!--搜索点击-->
1618    
1618<script>
1619      const searchButton = document.getElementById('halo-search');
1620      searchButton.addEventListener('click', function () {
1621        SearchWidget.open();
1622      });
1623    </script>
1623
1624    <!--    大图配置-->
1625    
1626    
1627    
1628  
1629    </body>
1630  
1631</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.