2024年9月

实现图床项目

新建一个vue3项目

vue create bmob-viewer

Xnip2024-09-23_10-44-50.jpg

安装 element-plus

yarn add element-plus

放一个按钮看下是否引入成功

    <el-card class="bucket-select-card">
      <div>
        <el-button type="primary">按钮</el-button>
        <el-button type="primary" disabled>按钮</el-button>
      </div>

    </el-card>

Xnip2024-09-23_14-18-44.jpg

做一个上传界面,我们使用el-upload 组件

https://s-test.belle.cn/zh-CN/component/upload.html 照片墙代码

<template>
  <el-upload
    v-model:file-list="fileList"
    action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
    list-type="picture-card"
    :on-preview="handlePictureCardPreview"
    :on-remove="handleRemove"
  >
    <el-icon><Plus /></el-icon>
  </el-upload>

  <el-dialog v-model="dialogVisible">
    <img w-full :src="dialogImageUrl" alt="Preview Image" />
  </el-dialog>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { Plus } from '@element-plus/icons-vue'

import type { UploadProps, UploadUserFile } from 'element-plus'

const fileList = ref<UploadUserFile[]>([
  {
    name: 'food.jpeg',
    url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100',
  },
  {
    name: 'plant-1.png',
    url: '/images/plant-1.png',
  }
])

const dialogImageUrl = ref('')
const dialogVisible = ref(false)

const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
  console.log(uploadFile, uploadFiles)
}

const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
  dialogImageUrl.value = uploadFile.url!
  dialogVisible.value = true
}
</script>

Xnip2024-09-23_15-38-51.jpg

这个列表数据是写死的,我们从服务器文件记录表取出记录,这里我们使用Bmob后端云

安装sdk

npm install hydrogen-js-sdk

main.ts 初始化sdk

import Bmob from 'hydrogen-js-sdk'

// 初始化
Bmob.initialize("e7cebb69e9ed76e9", "111111");

取出数据

let fileList = ref<UploadUserFile[]>([])

const query = Bmob.Query('pic_list');
query.find().then(res => {
  // 确保 res 是 UploadUserFile[] 类型
  if (Array.isArray(res)) {
    fileList.value = res;
  } else {
    console.error('查询结果类型不匹配');
  }
});

效果

Xnip2024-09-25_16-23-05.jpg

实现删除


const handleRemove: UploadProps['onRemove'] = (uploadFile: ImageInfo, uploadFiles: ImageInfo[]) => {
  console.log(uploadFile);

  const query = Bmob.Query('pic_list');
  const objectId = uploadFile.objectId;

  query.destroy(objectId).then(res => {

    // 传入string是单个文件删除,传入array是批量删除
    const del = Bmob.File("a", "jfdf");
    const val = [uploadFile.url]
    del.destroy(val).then(res => {
      console.log(res);
    }).catch(err => {
      console.log(err)
    })
  }).catch(err => {
    console.error('删除文件失败:', err);
  });
};

实现上传

const customUpload = async (options) => {
  const file = Bmob.File(options.file.name, options.file);
  const res = await file.save();
  console.log("File saved successfully:", res);
  // 把URL保存到Bmob pic_list表中
  const query = Bmob.Query('pic_list');
  const data = {
    name: options.file.name,
    url: res[0].url
  };
  query.save(data).then(res => {
    console.log(res)
  }).catch(err => {
    console.log(err)
  })
}

最终效果

Xnip2024-09-30_17-08-02.jpg

项目开源代码地址

https://github.com/magic007/Vue3-image-bed

部署效果地址

http://images-bed.cctvcloud.cn/

在我们的日常网络活动中,HTTPS 协议扮演着至关重要的角色,它确保了数据传输的安全性和隐私性。然而,在某些情况下,如调试网站、分析网络流量或进行安全测试时,我们可能需要捕获并查看 HTTPS 流量的明文内容。这通常涉及到解密 HTTPS 流量,以便我们可以清晰地看到传输的数据。在本文中,我将向您介绍如何使用 Wireshark,这是一款功能强大的网络协议分析工具,来捕获 HTTPS 流量的明文数据。请注意,这一过程仅在您有合法权限对网络流量进行监控的情况下才是正当的,例如在您自己的网络环境中或已获得明确授权的测试环境中。

Fiddler 存在的问题

Fiddler目前还不支持HTTP2协议,无法看到真正的HTTP2报文,这里有些人可能会有疑问,说我明明就用Fiddler抓到了HTTP2协议的报文啊,那是因为Fiddler中间人攻击服务器通过协商把协议降级成了HTTP1协议,所以实际上看到的还是的HTTP1的报文,通过下面两个图片可以直观的感受到:

  • 不通过代理,直接访问支持 HTTP2 的服务

2020-08-10-10-10-24.png

  • 通过代理访问,进行抓包

2020-08-10-10-11-37.png

可以看到在通过代理抓包的时候,协议变成了http/1.1

使用 wireshark 抓取

现在市面上的主流浏览器实现的 HTTP2 都是基于TLS的,也就是说要分析HTTP2报文得先过了TLS这一关,不然只能分析一堆加密的乱码。

wireshark支持两种方式来解密SSL/TLS报文:

  1. 通过网站的私钥
  2. 通过浏览器的将 TLS 对称加密秘保存在外部文件中,以供 wireshark 加解密

下面我来一一进行演示

1. 通过网站的私钥

如果你想抓取的网站是你自己的,那么可以利用这种方式,因为这需要使用网站生成证书使用的私钥进行解密,就是那个 nginx 上ssl_certificate_key配置对应的私钥文件,把它添加到 wireshark 配置中:

2020-08-10-10-41-14.png

然后通过wireshark就可以看到明文了:
2020-08-10-11-10-00.png

通过上图可以看到,我通过curl访问的 https 协议的 URL,在配置了该服务器对应的私钥后可以抓取到对应的 HTTP 明文。

不过缺点也非常明显,只能分析自己持有私钥的网站,如果别人的网站就分析不了了,所幸的是还有第二种方案来支持。

2. 通过浏览器的 SSL 日志功能

目前该方案只支持ChromeFirefox浏览器,通过设置SSLKEYLOGFILE环境变量,可以指定浏览器在访问SSL/TLS网站时将对应的密钥保存到本地文件中,有了这个日志文件之后wireshake就可以将报文进行解密了。

  1. 首先设置SSLKEYLOGFILE环境变量:
    2020-08-10-11-19-37.png
注:这是在 windows 系统上进行操作的,其它操作系统同理
  1. 配置wireshake,首选项->Protocls->TLS:
    2020-08-10-11-23-31.png

    将第一步中指定的文件路径配置好

  2. 重启浏览器,进行抓包:
    2020-08-10-11-30-55.png

同样的可以抓取到 HTTP 明文。

注:不抓包时记得把环境变量删掉,以避免性能浪费和安全性问题

方案二的优点非常明显,可以抓取任意网站的SSL/TLS加密的报文,唯一的缺点就是只能是浏览器支持的情况才行,而方案一可以针对任何 HTTP 客户端进行抓包。

通过 wireshake 抓取 HTTP2 报文

上面都是针对TLS+HTTP1进行的抓包,市面上主流的浏览器的HTTP2都是基于TLS实现的,所以也是一样的,把TLS这层解密了自然看到的就是最原始的明文。

这里以分析https://www.qq.com为例,为什么不是经典htts://www.baidu.com,因为百度首页至今还是HTTP/1.1协议。

  1. 使用上面的第二种方案配置好wiresharke
  2. 通过http2关键字做过滤
  3. 浏览器访问https://www.qq.com
  4. 查看HTTP2报文:
    2020-08-10-11-47-00.png

这样就抓取到了HTTP2报文了,HTTP2 协议非常复杂,我也还在学习阶段,这里就不多说啥了。

后记

wireshake 真的是一款非常强大的网络分析工具,在HTTPSHTTP2日渐成为主流的时候,可以用它来帮助我们加深对这些协议的理解,以便迎接新的机遇与挑战。

博客一年的证书快到期了,准备部署一个ACME来实现自动免费续期,自动部署服务,下面把整个过程记录出来。

https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E

Xnip2024-09-19_09-58-27.jpg

  • ACME(Let's Encrypt)简介

    acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

    主要步骤:

    1. 安装 acme.sh
    2. 生成证书
    3. copy 证书到 nginx/apache 或者其他服务
    4. 更新证书
    5. 更新 acme.sh

1. 安装 acme.sh

安装很简单, 一个命令:

curl https://get.acme.sh | sh -s email=my@example.com

执行结果

(base) [root@VM-4-5-centos ~]# curl  https://get.acme.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1032    0  1032    0     0    351      0 --:--:--  0:00:02 --:--:--   351
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  219k  100  219k    0     0  47927      0  0:00:04  0:00:04 --:--:-- 58853
[Thu Sep 19 09:50:03 CST 2024] Installing from online archive.
[Thu Sep 19 09:50:03 CST 2024] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[Thu Sep 19 09:50:05 CST 2024] Extracting master.tar.gz
[Thu Sep 19 09:50:05 CST 2024] It is recommended to install socat first.
[Thu Sep 19 09:50:05 CST 2024] We use socat for the standalone server, which is used for standalone mode.
[Thu Sep 19 09:50:05 CST 2024] If you don't want to use standalone mode, you may ignore this warning.
[Thu Sep 19 09:50:05 CST 2024] Installing to /root/.acme.sh
[Thu Sep 19 09:50:05 CST 2024] Installed to /root/.acme.sh/acme.sh
[Thu Sep 19 09:50:05 CST 2024] Installing alias to '/root/.bashrc'
[Thu Sep 19 09:50:05 CST 2024] Close and reopen your terminal to start using acme.sh
[Thu Sep 19 09:50:05 CST 2024] Installing alias to '/root/.cshrc'
[Thu Sep 19 09:50:05 CST 2024] Installing alias to '/root/.tcshrc'
[Thu Sep 19 09:50:05 CST 2024] Installing cron job
[Thu Sep 19 09:50:05 CST 2024] bash has been found. Changing the shebang to use bash as preferred.
[Thu Sep 19 09:50:07 CST 2024] OK
[Thu Sep 19 09:50:07 CST 2024] Install success!

看到Install success 则安装成功

这里直接执行acme.sh 会提示命令不存在

acme.sh --issue -d cctvcloud.cn --nginx
-bash: acme.sh: command not found

需要让环境变量生效

 source /root/.bashrc

2. 生成证书

因为我服务器是nginx,我使用命令

acme.sh --issue -d mydomain.com --nginx

提示

[Thu Sep 19 09:52:50 CST 2024] Using CA: https://acme.zerossl.com/v2/DV90
[Thu Sep 19 09:52:50 CST 2024] Account key creation OK.
[Thu Sep 19 09:52:50 CST 2024] No EAB credentials found for ZeroSSL, let's obtain them
[Thu Sep 19 09:52:50 CST 2024] acme.sh is using ZeroSSL as default CA now.
[Thu Sep 19 09:52:50 CST 2024] Please update your account with an email address first.
[Thu Sep 19 09:52:50 CST 2024] acme.sh --register-account -m my@example.com
[Thu Sep 19 09:52:50 CST 2024] See: https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA
[Thu Sep 19 09:52:50 CST 2024] Please add '--debug' or '--log' to see more information.
[Thu Sep 19 09:52:50 CST 2024] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

acme.sh 脚本正在使用 ZeroSSL 作为默认的证书颁发机构(CA),并且要求你在继续之前先注册一个账户并提供一个电子邮件地址。以下是解决这个问题的步骤:

  1. 注册账户并提供电子邮件地址
    你需要使用以下命令注册账户并提供一个电子邮件地址:

    执行

    acme.sh --register-account -m your-email@example.com

    your-email@example.com 替换为你自己的电子邮件地址。

提示

(base) [root@VM-4-5-centos ~]# acme.sh --register-account -m xxx@qq.com
[Thu Sep 19 09:55:37 CST 2024] No EAB credentials found for ZeroSSL, let's obtain them
[Thu Sep 19 09:55:38 CST 2024] Registering account: https://acme.zerossl.com/v2/DV90
[Thu Sep 19 09:55:41 CST 2024] Registered
[Thu Sep 19 09:55:41 CST 2024] ACCOUNT_THUMBPRINT='wFp3y1PHfKcEmoUgyezlvb4F_ykEBaOo1-lrVChd-qk'

继续执行

acme.sh --issue -d cctvcloud.cn --nginx

返回

(base) [root@VM-4-5-centos ~]# acme.sh --issue -d cctvcloud.cn --nginx
[Thu Sep 19 10:06:03 CST 2024] Using CA: https://acme.zerossl.com/v2/DV90
[Thu Sep 19 10:06:03 CST 2024] Creating domain key
[Thu Sep 19 10:06:03 CST 2024] The domain key is here: /root/.acme.sh/cctvcloud.cn_ecc/cctvcloud.cn.key
[Thu Sep 19 10:06:03 CST 2024] Single domain='cctvcloud.cn'
[Thu Sep 19 10:06:07 CST 2024] Getting webroot for domain='cctvcloud.cn'
[Thu Sep 19 10:06:07 CST 2024] Verifying: cctvcloud.cn
[Thu Sep 19 10:06:07 CST 2024] Nginx mode for domain: cctvcloud.cn
[Thu Sep 19 10:06:07 CST 2024] Cannot find nginx config.
[Thu Sep 19 10:06:07 CST 2024] Please add '--debug' or '--log' to see more information.
[Thu Sep 19 10:06:07 CST 2024] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

提示说的是无法找到nginx配置文件

既然无法找到nginx,我们就指定网站目录

(base) [root@VM-4-5-centos ~]# acme.sh --issue -d cctvcloud.cn --webroot /var/www/typecho
[Thu Sep 19 10:20:45 CST 2024] Using CA: https://acme.zerossl.com/v2/DV90
[Thu Sep 19 10:20:45 CST 2024] Single domain='cctvcloud.cn'
[Thu Sep 19 10:20:49 CST 2024] Getting webroot for domain='cctvcloud.cn'
[Thu Sep 19 10:20:49 CST 2024] Verifying: cctvcloud.cn
[Thu Sep 19 10:20:50 CST 2024] Processing. The CA is processing your order, please wait. (1/30)
[Thu Sep 19 10:20:55 CST 2024] Success
[Thu Sep 19 10:20:55 CST 2024] Verification finished, beginning signing.
[Thu Sep 19 10:20:55 CST 2024] Let's finalize the order.
[Thu Sep 19 10:20:55 CST 2024] Le_OrderFinalize='https://acme.zerossl.com/v2/DV90/order/3dV2Srpyf2CunpCNYC7wMA/finalize'
[Thu Sep 19 10:20:57 CST 2024] Order status is 'processing', let's sleep and retry.
[Thu Sep 19 10:20:57 CST 2024] Sleeping for 15 seconds then retrying
[Thu Sep 19 10:21:13 CST 2024] Polling order status: https://acme.zerossl.com/v2/DV90/order/3dV2Srpyf2CunpCNYC7wMA
[Thu Sep 19 10:21:14 CST 2024] Downloading cert.
[Thu Sep 19 10:21:14 CST 2024] Le_LinkCert='https://acme.zerossl.com/v2/DV90/cert/VuY8VcXb159DjfIlfvif4g'
[Thu Sep 19 10:21:16 CST 2024] Cert success.
-----BEGIN CERTIFICATE-----
xxxxx
-----END CERTIFICATE-----
[Thu Sep 19 10:21:16 CST 2024] Your cert is in: /root/.acme.sh/cctvcloud.cn_ecc/cctvcloud.cn.cer
[Thu Sep 19 10:21:16 CST 2024] Your cert key is in: /root/.acme.sh/cctvcloud.cn_ecc/cctvcloud.cn.key
[Thu Sep 19 10:21:16 CST 2024] The intermediate CA cert is in: /root/.acme.sh/cctvcloud.cn_ecc/ca.cer
[Thu Sep 19 10:21:16 CST 2024] And the full-chain cert is in: /root/.acme.sh/cctvcloud.cn_ecc/fullchain.cer
(base) [root@VM-4-5-centos ~]# client_loop: send disconnect: Broken pipe

提示证书生成成功

copy/安装 证书

前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

重新访问网站,结果正确,已经换到最近3个月的证书有效期,然后我们设置定时任务来完成自动化。自动化的操作主要2个

  1. 申请下载证书
  2. 复制证书到nginx目录
  3. 重启nginx

这是我的脚本

#!/bin/bash

# 触发 acme.sh 续期任务
/root/.acme.sh/acme.sh --cron --home "/root/.acme.sh"

# 复制证书到网站目录
cp /root/.acme.sh/cctvcloud.cn_ecc/fullchain.cer /usr/nginx/certificates/cctvcloud.cn_bundle.crt
cp /root/.acme.sh/cctvcloud.cn_ecc/cctvcloud.cn.key /usr/nginx/certificates/cctvcloud.cn.key

# 重新加载 Nginx 配置
service nginx force-reload

设置定时任务

0 0 * * * /path/to/renew_cert.sh > /dev/null 2>&1

每天晚上0点执行,并且不输出任何信息。

这样就完成了nginx自动,免费申请部署https证书

网站访问www发现刚刚申请证书的时候,忘记添加www域名了,带www跟不带是2个域名,这里重新申请

acme.sh --issue -d cctvcloud.cn -d www.cctvcloud.cn --nginx

再执行安装重启,完成

acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

当然这个是自己基于acme.sh 属于偏底层自动申请, 因为申请证书实在太麻烦,有些公司还封装了集成度更高的工具,例如baidu公司的产品Certbot

### 安装Certbot

Certbot支持多种操作系统和Web服务器,你可以在其官方网站上找到适合自己环境的安装指南。例如,对于使用Ubuntu和Nginx的服务器,可以使用以下命令安装Certbot:

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

获取证书

sudo certbot certonly --webroot -w /var/www/html

配置nginx 替换证书,然后设置定时申请功能,跟acme.sh 是一个原理。

2天后收入对比

数据已经有了基础网站后,google 隔天就可以查询到网站的关于页面
Xnip2024-09-18_10-27-19.jpg

而baidu还显示1年前的内容
Xnip2024-09-18_10-28-08.jpg

没有显示收录网页的日期,预计是个死火山,从不喷发

搜索引擎已经被玩出花了

官网认证:3000/年(标准版)

企业名片:3600/年(标准版)

商标认证:上传企业经营信息,展示企业品牌形象 2000元/年

搜索引擎作为信息时代的核心工具,互联网一个公共信息资源,国内普通乡村孩子查询资料的几乎唯一引擎, 竟然把信息分为三六九等,造成认知偏差。

1. 信息获取的不平等

  • 优质资源受限:如果搜索引擎优先展示某些类型的信息,而乡村孩子可能无法接触到这些优质资源,导致他们在学习过程中缺乏必要的支持。
  • 信息偏见:搜索引擎的排序算法可能会偏向于某些城市或发达地区的信息,导致乡村孩子接触到的信息存在偏见,影响他们的认知和判断。

2. 教育资源的匮乏

  • 教育资源不均衡:乡村地区的教育资源本身就相对匮乏,如果搜索引擎进一步限制了优质教育资源的获取,乡村孩子的学习机会将更加受限。
  • 学习工具受限:乡村孩子可能无法接触到最新的学习工具和资源,如在线课程、教育软件等,影响他们的学习效果和兴趣。

3. 知识获取的局限性

  • 知识面狭窄:搜索引擎的信息分级可能导致乡村孩子接触到的知识面更加狭窄,无法全面了解各个领域的知识,影响他们的综合素质发展。
  • 创新能力受限:知识获取的局限性可能会限制乡村孩子的创新能力和思维方式,使他们在未来的竞争中处于不利地位。

4. 心理影响

  • 自信心受挫:如果乡村孩子发现自己无法获取与城市孩子同等质量的信息和资源,可能会产生自卑感,影响他们的自信心和学习动力。
  • 社会认知偏差:信息的不平等可能导致乡村孩子对社会的认知存在偏差,影响他们的人生观和价值观。

5. 社会流动性的阻碍

  • 机会不平等:信息的不平等可能导致乡村孩子在升学、就业等方面面临更多挑战,阻碍他们的社会流动性,影响他们的未来发展。
  • 代际传递:信息的不平等可能会导致贫困的代际传递,使乡村孩子难以摆脱贫困的循环。

6. 教育公平性的破坏

  • 教育公平受损:搜索引擎的信息分级可能会加剧城乡教育的不公平,使乡村孩子在教育资源和机会上更加落后,违背了教育公平的原则。
  • 社会不公:信息的不平等可能会导致社会不公,影响社会的和谐与稳定。

baidu提交链接

主要是快速收录工具,这个工具是收费的,其他提交几乎是徒劳,哪怕这个工具,2024年 又提高了门槛,升级为快速抓取

Xnip2024-09-18_10-41-55.jpg

快速抓取,需要升级VIP俱乐部,搜索资源平台VIP俱乐部 申请规则

Xnip2024-09-18_10-24-32.jpg

其中对日均流量有限制,也就是低于多少访问的资料,不应该出现在社会上。导致信息多样化减少,阻碍社会进步,再次内卷加重,例如青霉素等科学研究,当年都是从一些小众资料出来的,如果社会只有今天哪个明星带货,谁又演唱会,哪个小区门口又出现恶犬,哪只猫咪又成为网红猫,都是一些引流的话题网站,对社会进步是一个损失。 社会也只是国内社会的损失,像海外一些引擎,信息资料不分高地贵贱之分,才能更好的提供社会科技进步

这个是AI对社会信息资源区分贵贱的说明

1. 信息多样性的减少

  • 小众信息缺失:低流量网站通常包含一些小众、特定领域的信息,如地方新闻、社区活动、非主流观点等。如果这些网站不被收录,这些信息将难以被公众获取,导致信息多样性的减少。
  • 长尾信息流失:搜索引擎的“长尾效应”指的是大量低流量但有价值的信息。如果这些信息不被收录,用户将难以找到那些不常见但有用的信息。

2. 社会资源的浪费

  • 内容创作者的积极性受挫:许多低流量网站是由个人或小型组织创建的,他们可能投入了大量时间和精力来创作内容。如果这些内容不被搜索引擎收录,创作者的积极性可能会受到打击,导致社会资源的浪费。
  • 知识积累的损失:低流量网站可能包含一些独特的知识、经验或研究成果,如果这些内容不被收录,这些知识将难以积累和传播,影响社会的知识储备。

3. 社会透明度的降低

  • 地方信息的缺失:许多低流量网站提供地方新闻、社区活动、地方政策等信息,这些信息对于当地居民非常重要。如果这些网站不被收录,地方信息的透明度将降低,影响居民的知情权和参与度。
  • 非主流观点的消失:低流量网站可能包含一些非主流观点、独立研究或批判性分析,这些信息对于社会的多元化和批判性思维非常重要。如果这些信息不被收录,社会的思想多样性将受到影响。

4. 教育资源的匮乏

  • 教育资源的分散:许多低流量网站提供教育资源,如在线课程、学习资料、教学视频等。如果这些网站不被收录,学生和教师将难以找到这些资源,影响教育资源的普及和利用。
  • 自学机会的减少:低流量网站可能包含一些自学资源,如编程教程、艺术指导、语言学习等。如果这些资源不被收录,自学者的学习机会将减少,影响终身学习的发展。

5. 创新能力的限制

  • 创新信息的流失:许多低流量网站包含创新信息,如新技术、新产品、新商业模式等。如果这些信息不被收录,创新者将难以获取这些信息,影响创新能力的提升。
  • 创业支持的减少:低流量网站可能提供创业支持,如市场调研、行业分析、创业指导等。如果这些信息不被收录,创业者将难以找到这些支持,影响创业生态的发展。

6. 社会信任的下降

  • 信息可信度的降低:如果搜索引擎只收录高流量网站,用户可能会认为这些信息更可信,而忽视其他来源的信息。这种偏见可能导致社会对信息的信任度下降,影响社会的整体信任水平。
  • 信息垄断的风险:搜索引擎对低流量网站的不收录可能导致信息垄断,少数高流量网站控制了大部分信息资源,影响信息的公平获取和传播。

baidu 后台只要不是付费功能也是经常有问题

例如一个https 检测,按理几秒就可以检测出来,如果每天上亿的网址需要判断,也不会超过1天,提示说一天内,然而后台显示目前已经过去了5天
Xnip2024-09-18_11-03-42.jpg

博客数据单节点,防止数据丢失,这里写一个shell脚本,几小时执行一次,保留7天数据

简单的 MySQL 备份 Shell 脚本,它会备份指定的数据库,并将备份文件保留最近 7 天的数据。脚本会每天运行一次,删除超过 7 天的备份文件。

脚本内容

#!/bin/bash

# 配置数据库信息
DB_USER="your_db_user"
DB_PASSWORD="your_db_password"
DB_NAME="your_db_name"
BACKUP_DIR="/path/to/backup/directory"
DATE=$(date +%Y%m%d)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份数据库
mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/$DB_NAME-$DATE.sql

# 压缩备份文件
gzip $BACKUP_DIR/$DB_NAME-$DATE.sql

# 删除超过 7 天的备份文件
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -exec rm -f {} \;

echo "Database backup completed: $BACKUP_DIR/$DB_NAME-$DATE.sql.gz"

解释

  1. 配置数据库信息

    • DB_USER:数据库用户名。
    • DB_PASSWORD:数据库密码。
    • DB_NAME:要备份的数据库名称。
    • BACKUP_DIR:备份文件存储的目录。
    • DATE:当前日期,格式为 YYYYMMDD
  2. 创建备份目录

    • mkdir -p $BACKUP_DIR:如果备份目录不存在,则创建它。
  3. 备份数据库

    • mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/$DB_NAME-$DATE.sql:使用 mysqldump 命令备份数据库,并将备份文件保存到指定目录。
  4. 压缩备份文件

    • gzip $BACKUP_DIR/$DB_NAME-$DATE.sql:使用 gzip 命令压缩备份文件。
  5. 删除超过 7 天的备份文件

    • find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -exec rm -f {} \;:使用 find 命令查找并删除超过 7 天的备份文件。
  6. 输出备份完成信息

    • echo "Database backup completed: $BACKUP_DIR/$DB_NAME-$DATE.sql.gz":输出备份完成信息。

设置定时任务

你可以使用 cron 来设置每天自动运行这个脚本。

  1. 打开 cron 编辑器:

    bash

    复制

    crontab -e
  2. 添加以下行来设置每天凌晨 2 点运行备份脚本:

    bash

    复制

    0 2 * * * /path/to/your/backup_script.sh

总结

通过这个脚本,你可以每天自动备份 MySQL 数据库,并保留最近 7 天的备份文件。超过 7 天的备份文件会被自动删除,以节省存储空间。