首页
友情链接
壁纸
推荐
联系站长
Search
1
如何使用php调用api接口,获得返回json字符的指定字段数据
4,078 阅读
2
【Emlog】插件-检测页面是否收录并自动提交百度
4,030 阅读
3
腾讯云-3年轻量2核2G仅408-老用户也可以享受低价购买服务器了!
3,477 阅读
4
【转载】网站不能含有哪些内容?
3,456 阅读
5
【收集】免费CDN汇总
3,284 阅读
技术教程
个人日记
原创技术
学习日记
php
c
前端html/css/js
java
Mysql
算法日记
数据结构
java web
Spring框架
生活随笔
我的项目
登录
Search
标签搜索
java
算法
mysql
LeetCode
前端
数据结构
数据库
java web
数据结构与算法
php
学习记录
网站
代码
typecho
插件
学习笔记
emlog
c语言
servlet
技术教程
吃猫的鱼
累计撰写
176
篇文章
累计收到
528
条评论
首页
栏目
技术教程
个人日记
原创技术
学习日记
php
c
前端html/css/js
java
Mysql
算法日记
数据结构
java web
Spring框架
生活随笔
我的项目
页面
友情链接
壁纸
推荐
联系站长
搜索到
50
篇与
的结果
2026-10-11
云服务器搭建个人代理:部署、分流与订阅配置
文末有可以直接交给 AI 的 Skill(提示词)。把它和服务器连接信息交给能执行 SSH 命令的 AI,并提供操作权限,就能让它完成部署和检查。这套代理我挺早之前就搭过,最近换了台机器,又从头折腾了一遍,顺手把部署、分流和订阅配置整理出来。用途很简单:让指定请求经过自己的服务器。比如想从北京的网络访问某个服务,就用北京的服务器做出口。一、部署准备我用的是 2 核 2GB 的 Ubuntu 服务器,能通过 SSH 登录,并有 sudo 权限。电脑上可以提前装好 Clash Verge。服务器上的 Shadowsocks 负责转发请求,Python 服务提供订阅文件;Clash Verge 导入订阅后,按规则选择网络出口。二、搭建步骤1. 检查系统和端口SSH 登录后,先看系统、内存和端口占用:cat /etc/os-release free -h sudo ss -lntup本文使用 TCP 80、TCP 443 和 UDP 443。如果端口已被网站等服务占用,先调整本次部署端口,后面的配置也要同步修改。2. 安装并配置代理服务安装 Shadowsocks 和订阅服务需要的 Python:sudo apt update sudo apt install -y shadowsocks-libev python3先生成节点密码,再编辑 /etc/shadowsocks-libev/config.json:python3 -c 'import secrets; print(secrets.token_urlsafe(32))' sudo install -d -m 755 /etc/shadowsocks-libev sudo touch /etc/shadowsocks-libev/config.json sudo chmod 600 /etc/shadowsocks-libev/config.json sudoedit /etc/shadowsocks-libev/config.json填入刚才生成的随机密码,不要复用 SSH 密码:{ "server": "0.0.0.0", "server_port": 443, "password": "这里替换成独立生成的随机密码", "timeout": 300, "method": "aes-256-gcm", "mode": "tcp_and_udp", "fast_open": false }再创建 systemd 覆盖配置,通过 LoadCredential 加载这个私有文件:sudo install -d -m 755 /etc/systemd/system/shadowsocks-libev.service.d sudoedit /etc/systemd/system/shadowsocks-libev.service.d/self-proxy.conf[Service] LoadCredential=ss-config:/etc/shadowsocks-libev/config.json ExecStart= ExecStart=/usr/bin/ss-server -c %d/ss-config Restart=on-failure RestartSec=5s这里沿用 Ubuntu 软件包的服务;其他系统先用 systemctl cat shadowsocks-libev 核对。空的 ExecStart= 用来清除原启动命令。保存以后启动:sudo systemctl daemon-reload sudo systemctl enable --now shadowsocks-libev # 已经运行过的服务,要重启才会读取新配置。 sudo systemctl restart shadowsocks-libev3. 放行防火墙端口在云控制台的「防火墙」或「安全组」中放行以下端口:用途协议、端口说明登录管理TCP 22能固定管理来源时,限制到自己的来源 IP下载订阅TCP 80对应本文的 HTTP 订阅服务代理连接TCP 443网页等 TCP 请求会用到UDP 转发UDP 443需要 UDP 时单独放行TCP、UDP 443 分别添加。控制台的“HTTPS”只是 TCP 443 的规则模板,这里跑的仍是 Shadowsocks。用 sudo ufw status 检查系统防火墙;若已启用,也要放行这些端口,并保留 SSH 规则。4. 配置客户端和分流规则准备下面这份 client.yaml,填入服务器地址和节点密码。下一步会用它生成订阅;“北京节点”可以改成自己的名称。mixed-port: 7890 allow-lan: false bind-address: 127.0.0.1 mode: rule log-level: info ipv6: false proxies: - name: 北京节点 type: ss server: YOUR_SERVER_IP port: 443 cipher: aes-256-gcm password: "与服务端完全一致的节点密码" udp: true proxy-groups: - name: 个人代理 type: select proxies: - 北京节点 - DIRECT rules: # 本机、局域网照常直连。 - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve # 把 example.com 换成你真正需要指定出口的业务域名。 - DOMAIN-SUFFIX,example.com,个人代理 # 这一条用于后面的出口检查;不需要时可以删除。 - DOMAIN,api.ipify.org,个人代理 - MATCH,DIRECT规则从上往下匹配:指定域名走服务器,其余直连。缺少的业务域名,可以从 Clash Verge 的「连接」页面查找、补充。5. 生成订阅地址订阅链接指向的就是上面的 YAML。我用了一个 Python 小服务,只响应一条随机路径,其他地址返回 404。保存订阅配置把上一节的 YAML 存到服务器的 /root/proxy-client/client.yaml:sudo install -d -m 700 /root/proxy-client sudoedit /root/proxy-client/client.yaml sudo chmod 600 /root/proxy-client/client.yaml首次部署时,生成独立的随机订阅路径:sudo python3 - <<'PY' import json import os import secrets from pathlib import Path # 创建文件时就限制权限,避免先写入密码再修改权限。 os.umask(0o077) # 这是首次初始化;已有配置时停止,避免意外更换订阅地址。 folder = Path('/etc/self-proxy') folder.mkdir(mode=0o700, exist_ok=True) folder.chmod(0o700) target = folder / 'subscription.json' if target.exists(): raise SystemExit('订阅配置已存在,请按更新流程处理。') settings = { 'path': '/s/' + secrets.token_urlsafe(32) + '/config.yaml', 'yaml': Path('/root/proxy-client/client.yaml').read_text(), } target.write_text(json.dumps(settings, ensure_ascii=False)) target.chmod(0o600) print('订阅配置已生成。') PY创建订阅服务把下面的程序保存到 /usr/local/lib/self-proxy/subscription_server.py:sudo install -d -m 755 /usr/local/lib/self-proxy sudoedit /usr/local/lib/self-proxy/subscription_server.py sudo chmod 644 /usr/local/lib/self-proxy/subscription_server.pyimport hmac import json import os from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from pathlib import Path # 配置含节点密码,由 systemd 按服务身份提供私有副本。 credential = Path(os.environ['CREDENTIALS_DIRECTORY']) / 'subscription' settings = json.loads(credential.read_text()) allowed_path = settings['path'].encode('utf-8') body = settings['yaml'].encode('utf-8') class Handler(BaseHTTPRequestHandler): server_version = 'Subscription' sys_version = '' def setup(self): super().setup() self.connection.settimeout(10) def log_message(self, *_args): # URL 中包含访问凭据,不写入访问日志。 pass def respond(self, include_body): valid = hmac.compare_digest(self.path.encode('utf-8'), allowed_path) payload = body if valid else b'Not found\n' self.send_response(200 if valid else 404) content_type = 'text/yaml; charset=utf-8' if valid else 'text/plain' self.send_header('Content-Type', content_type) self.send_header('Content-Length', str(len(payload))) self.send_header('Cache-Control', 'no-store') self.send_header('X-Content-Type-Options', 'nosniff') self.end_headers() if include_body: self.wfile.write(payload) def do_GET(self): self.respond(True) def do_HEAD(self): self.respond(False) server = ThreadingHTTPServer(('0.0.0.0', 80), Handler) server.daemon_threads = True server.serve_forever()设置开机启动保存服务单元 /etc/systemd/system/self-proxy-subscription.service:sudoedit /etc/systemd/system/self-proxy-subscription.service[Unit] Description=Personal proxy subscription After=network-online.target Wants=network-online.target [Service] Type=simple DynamicUser=true LoadCredential=subscription:/etc/self-proxy/subscription.json ExecStart=/usr/bin/python3 /usr/local/lib/self-proxy/subscription_server.py Restart=on-failure RestartSec=5s CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ProtectKernelTunables=true ProtectKernelModules=true ProtectControlGroups=true RestrictSUIDSGID=true RestrictAddressFamilies=AF_INET AF_INET6 TasksMax=64 MemoryMax=128M [Install] WantedBy=multi-user.target启动服务并设为开机启动:sudo systemctl daemon-reload sudo systemctl enable --now self-proxy-subscription获取订阅地址订阅链接的格式是:http://YOUR_SERVER_IP/s/YOUR_TOKEN/config.yaml读取 /etc/self-proxy/subscription.json 的 path 字段,前面加上服务器的 HTTP 地址,就是完整链接。它能下载节点密码,不要公开。HTTP 会明文传输订阅,随机路径只能防猜测。长期使用建议配域名和证书,改成 HTTPS;TCP 443 已被代理占用,需要另行安排端口。6. 导入订阅并验证连接在 Clash Verge 的「订阅」页粘贴地址,点击「导入」并启用。在「代理」页选中节点,再开启系统代理和规则模式。在本机下载订阅文件,用 Mihomo 检查:mihomo -t -f client.yaml没有 mihomo 命令时,换成 Clash Verge 内置核心的路径。检查通过后,测试实际请求:curl --proxy http://127.0.0.1:7890 https://api.ipify.org确认分组中选中了服务器。上面的规则会让这个请求走代理,返回的出口应与服务器一致。服务器上也复查一下服务状态和监听端口:systemctl is-active shadowsocks-libev self-proxy-subscription systemctl is-enabled shadowsocks-libev self-proxy-subscription sudo ss -lntup这次两个服务均为 active、enabled;订阅 GET、HEAD 返回 200,根路径返回 404。已配置开机启动,未重启机器验证。7. 更新订阅配置修改 /root/proxy-client/client.yaml 后,用下面的命令同步内容并重启服务,订阅链接不变:sudo python3 - <<'PY' import json import os import tempfile from pathlib import Path # 只更新 YAML,保留原来的随机订阅路径。 os.umask(0o077) target = Path('/etc/self-proxy/subscription.json') settings = json.loads(target.read_text()) settings['yaml'] = Path('/root/proxy-client/client.yaml').read_text() # 在同一目录写临时文件,完成后原子替换,避免留下半份配置。 temporary = None try: with tempfile.NamedTemporaryFile(mode='w', encoding='utf-8', dir=target.parent, delete=False) as f: temporary = Path(f.name) temporary.chmod(0o600) json.dump(settings, f, ensure_ascii=False) os.replace(temporary, target) finally: if temporary is not None: temporary.unlink(missing_ok=True) PY sudo systemctl restart self-proxy-subscription最后在 Clash Verge 中刷新订阅。三、踩坑记录问题原因和处理服务运行正常,连接却超时腾讯云防火墙漏放了 443。服务监听正常,不代表公网能连进来;云防火墙和系统防火墙要分别检查。配置文件的读取权限软件包启用了 DynamicUser,不能直接读 root 的 600 文件。用 LoadCredential 交给服务,无需放宽密码文件权限。UDP 要单独测试。这次五次转发测试成功三次、超时两次,当时能通但不稳定。网页能打开,只能说明 TCP 这一路正常。四、20Mbps 与 200Mbps 套餐对比这次重新部署,还有个原因:旧机器用的是入门型套餐,标称带宽 20Mbps;新买的锐驰型写着 200Mbps 峰值带宽。我平时主要看网页、用 AI 工具,想知道换机器后能不能明显顺畅一些。所以搭好之后,我用同一台电脑、同一个网络,对两台机器做了一轮短时测试:测试项目旧入门型:20Mbps新锐驰型:200Mbps 峰值TCP 443 连接耗时中位数,10 次约 621ms约 616msHTTPS 小请求成功次数7/88/8TCP 耗时测的是连接服务器端口,两台很接近。新机这轮 HTTPS 请求全部成功,但样本太少,不能据此判断长期稳定性。文件下载试了几轮,都没在超时前完成,没有得到可靠的吞吐速度,不能给两台排快慢。200Mbps 是峰值,也不代表每次都能跑满。这轮也没有覆盖不同运营商和全天时段。对我这样的日常用途,还是得看常用网络下的体验,不能只按套餐数字判断提升。附:交给 AI 执行的 Skill把下面整段交给能执行 SSH 命令的 AI,补充服务器连接方式和目标域名。登录凭据单独提供。Skill 新部署使用 self-proxy-ss 服务,配置集中在 /etc/self-proxy/,从 state.json 更新;正文沿用发行版服务,两套路径不要混用。已有部署会先检查并保留原密码、订阅地址。--- name: deploy-private-shadowsocks description: 在用户授权的 Linux 服务器部署个人 Shadowsocks 节点及可导入 Clash/Mihomo 的私密订阅,适用于首次部署、修复和同步已有配置。 --- # 个人 Shadowsocks 与私密订阅 使用现有 SSH、文件传输和命令执行工具完成部署;本文件自包含,按以下结构生成所需脚本,不依赖另一个 Skill。 ## 输入与授权 1. 收集必填项:SSH 主机、端口、账户和认证方式;root 或 sudo 权限;实际公网 IP;使用目的、需要代理的域名及最终兜底策略。 2. 可选项:节点名、SS 端口(默认 TCP 443)、是否启用 UDP、订阅域名/证书/端口。拒绝把文档示例地址、私网地址或占位值用于公网部署。 3. 先核对已有授权,复用用户明确同意的安装、服务调整和端口开放范围;只询问真正缺失且影响执行的信息,不重复索要确认。 4. SSH 密钥优先;核验已知主机密钥,首次连接通过用户或云控制台可信指纹核对。指纹变化先停止,不以关闭校验绕过。 5. SSH 密码只交给安全输入通道,不写脚本、命令参数、日志或交付文件;SS 密码单独随机生成,绝不复用登录密码。 6. 订阅协议不明确时优先使用带受信证书的 HTTPS;可以使用域名证书,也可以使用客户端信任且覆盖公网 IP 的证书。 7. 无可用 HTTPS 时,说明 HTTP 会明文传送订阅内容,其中包含节点地址和密码;随机路径不能加密传输。取得或复用明确的 HTTP 授权后才开放公网 HTTP。 8. 没有安装客户端测试工具的授权时,使用已有工具或把测试标记为待完成,不擅自给另一台设备安装软件。 ## 只读检查与变更边界 - 检查系统版本、`ss-server`、Python 3、systemd、sudo、磁盘空间及已有代理/网站/防火墙配置;查看 `ss -lntup` 中 TCP/UDP 80、443 和拟用端口。 - 已实测组合是 Ubuntu 26.04、发行版 `shadowsocks-libev` 3.3.5、`aes-256-gcm`;其他版本先验证软件参数与 systemd 功能,不把这一组合当通用保证。 - TCP HTTPS 443 与同一地址上的 TCP SS 443 会冲突:选择不同端口或地址。已有网站占用 80 时,采用经授权的反向代理路径或另选端口,不能停掉网站腾位。 - 使用发行版包管理器安装缺失依赖。若新装软件包自动启动了默认代理服务,只在确认它是本次新增且未承载用户业务后停止、禁用该默认实例。 - 修改前保存受影响文件、权限、服务 active/enabled 状态及防火墙规则到 `/root/self-proxy-backup/TIMESTAMP/`(目录 0700,秘密文件 0600)。不用清空防火墙或覆盖整站配置。 - 云安全组与主机防火墙分别检查;保留 SSH,仅开放选定的 SS TCP、已授权的 SS UDP 和订阅入口。没有云控制权就列出用户待操作项,不声称已开放。 - 变更失败即停止连续重试,保留诊断并还原本次配置和防火墙增量;恢复 active/enabled 状态,原本运行的受影响服务需重启以刷新凭据快照,原本停用的保持停用;清理本次新增单元并复核线上结果。 - 发现端口/服务归属不明、指纹变化或授权不足时停止相关变更,继续独立的只读检查。 ## 固定文件结构与幂等生成 - `/etc/self-proxy/`:root:root、0700;`state.json`、`ss.json`、`client.yaml`、`subscription.json` 均 root:root、0600。 - `/usr/local/lib/self-proxy/subscription_server.py`:root:root、0644;生成前确认该路径没有其他任务的文件。 - `/etc/systemd/system/self-proxy-ss.service`、`self-proxy-subscription.service`:root:root、0644。 - `state.json` 是生成源:保存 `public_ip`、`ss_port`、`node_name`、`method`、`password`、`udp`、`proxy_domains`、`fallback`、`subscription_path`、`subscription_url`、`listen_host`、`listen_port`。 - 首次用 Python `secrets.token_urlsafe(32)` 分别生成独立密码和 token;路径固定为 `/s/TOKEN/config.yaml`。重跑读取现有状态,除非明确要求轮换,否则保持密码、token 和用户配置。 - 生成脚本设 `umask(0o077)`,使用 JSON 序列化和 YAML 安全引用;可用 `json.dumps` 生成 YAML 字符串。临时文件在同目录写完、校验、chmod 后 `os.replace` 原子替换。 - 若只有旧配置,先读取并迁移实际参数;不能因缺少状态文件而自动重置凭据。秘密只在内存或受保护文件间流转,关闭命令回显,不打印配置全文。 `ss.json` 结构如下,替换所有大写占位值;UDP 未授权时 `mode` 使用 `tcp_only`: ~~~json {"server":"0.0.0.0","server_port":SS_PORT,"password":"SS_PASSWORD","method":"aes-256-gcm","timeout":300,"mode":"tcp_and_udp","fast_open":false} ~~~ ## 客户端配置与分流 按用户用途生成完整可独立导入的 `client.yaml`;节点参数与 `ss.json` 同源,`udp` 与实际开放情况一致: ~~~yaml mixed-port: 7890 allow-lan: false bind-address: 127.0.0.1 mode: rule log-level: info ipv6: false proxies: - name: "NODE_NAME" type: ss server: "YOUR_SERVER_IP" port: SS_PORT cipher: aes-256-gcm password: "SS_PASSWORD" udp: UDP_ENABLED proxy-groups: - name: "个人代理" type: select proxies: ["NODE_NAME"] rules: - DOMAIN-SUFFIX,TARGET_DOMAIN,个人代理 - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve - MATCH,FALLBACK ~~~ - `proxy_domains` 每项生成明确的 `DOMAIN` 或 `DOMAIN-SUFFIX` 规则;这些规则优先于地域和兜底规则。没有明确目标域名时先补齐用途,不能凭空猜测。 - `FALLBACK` 仅取用户选择的 `DIRECT` 或 `个人代理`。北京等中国大陆出口场景不得以宽泛 `GEOIP,CN,DIRECT` 使目标绕过代理;服务器所在地区决定出口地区,分流规则不能改变它。 - 有地域直连需求时,在目标域名规则之后添加并验证;同时说明 GeoIP 数据文件/下载依赖,不让隐式数据下载成为未披露的运行条件。 - 客户端若不能向内核提供域名,域名规则可能无法命中;结合实际客户端 DNS/嗅探/TUN 设置检查,不能仅凭配置顺序宣称分流已生效。 ## 订阅服务实现规范 生成标准库 Python 服务:用 `BaseHTTPRequestHandler` 与 `ThreadingHTTPServer`,禁止目录服务、文件路径拼接和写入接口。 - 从 `Path(os.environ["CREDENTIALS_DIRECTORY"])/"subscription"` 读取 JSON,结构为 `{"path":"/s/TOKEN/config.yaml","yaml":"完整 client.yaml 文本","listen_host":"0.0.0.0","listen_port":80}`。 - 启动时把 YAML 编码为 UTF-8 字节快照;使用 `hmac.compare_digest` 比较原始请求路径与固定路径,查询参数、尾斜线、编码变体均不归一化放行。 - 正确路径的 GET 返回 200 和完整 YAML;HEAD 返回相同状态及长度但不发正文。其余 URL 返回 404;POST/PUT/DELETE 等非读取方法统一拒绝且不产生写入。 - 返回 `Content-Type: text/yaml; charset=utf-8`、准确 `Content-Length`、`Cache-Control: no-store`、`X-Content-Type-Options: nosniff`;错误响应使用纯文本。 - 覆盖 `log_message` 禁止记录请求路径,避免 token 进入访问日志;设置连接超时及守护工作线程。日志仅保留不含 URL、密码和 YAML 的启动/错误摘要。 - 获准 HTTP 时默认绑定 `0.0.0.0:80`。HTTPS 反向代理时绑定 `127.0.0.1:未占用端口`,只在受信 TLS 入口公开固定路径,入口与上游均禁用含 token 的访问日志和缓存。 - HTTPS 证书覆盖实际订阅主机;检查完整证书链和续期。不得用 `curl -k` 或关闭客户端校验冒充受信 HTTPS 验收。 ## systemd 单元 SS 单元使用以下核心模板;`ss-server` 的实际路径以安装结果为准: ~~~ini [Unit] Description=Personal Shadowsocks After=network-online.target Wants=network-online.target [Service] Type=simple DynamicUser=true LoadCredential=ss-config:/etc/self-proxy/ss.json ExecStart=/usr/bin/ss-server -c %d/ss-config Restart=on-failure RestartSec=5s CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true RestrictSUIDSGID=true RestrictAddressFamilies=AF_INET AF_INET6 TasksMax=64 MemoryMax=128M [Install] WantedBy=multi-user.target ~~~ 订阅单元复制上述模板的沙箱、重启及启动依赖,改 `Description`,并将两行替换为: ~~~ini LoadCredential=subscription:/etc/self-proxy/subscription.json ExecStart=/usr/bin/python3 /usr/local/lib/self-proxy/subscription_server.py ~~~ `DynamicUser` 不直接读取 root 0600 源文件;systemd 通过 `LoadCredential` 向进程提供只读凭据副本。非特权高端口服务可移除绑定低端口能力。 ## 应用、同步与验收 1. 本地检查生成脚本语法、JSON、YAML;运行 `systemd-analyze verify` 检查两个单元。明确区分静态检查与真实联网测试。 2. 先写好 `ss.json`、`client.yaml`,再将同一份 YAML 文本写入 `subscription.json["yaml"]`;校验二者逐字一致,其他字段从状态文件生成。 3. 执行 `systemctl daemon-reload`,再 `systemctl enable --now self-proxy-ss self-proxy-subscription`。已有运行服务仅在内容变化时重启;修改快照后必须 restart 订阅服务,单改 YAML 不会生效。 4. 从服务器外部下载私密订阅,验证 HTTP 状态/HTTPS 证书和 HEAD,并核对响应正文与生成的 `client.yaml` 哈希一致;使用受保护的工具参数或 0600 curl 配置文件避免 URL 进入进程参数、历史和日志。 5. 检查错误 token、`/`、追加查询参数、尾斜线等异常 URL 返回 404;测试非读取方法被拒绝,并确认日志不包含 token。 6. 有已授权的 Mihomo 工具时,在隔离目录执行 `mihomo -t -f client.yaml`;临时启用仅回环监听的客户端,在验证副本中把出口查询目标强制交给 `个人代理`,核对返回 IP 与预期服务器出口。另用原始规则测试用户目标域名,检查实际命中规则。 7. 独立测试 UDP:在验证副本中强制 UDP 测试端点走 `个人代理`,通过支持 SS UDP 的客户端向可控回显端点发送随机负载,或经 SOCKS5 UDP ASSOCIATE 发出真实 DNS 查询并收到匹配响应;记录超时、响应与代理路径证据。TCP 成功不能证明 UDP 可用。 8. 核对两服务 `is-enabled`、`is-active` 和监听端口;没有重启服务器授权时不重启机器,用 enabled 状态说明已配置开机启动,不声称已完成重启验证。 9. 逐项报告:外部订阅下载、Mihomo 语法、实际代理出口、目标分流、真实 UDP 往返、异常 URL、开机启动配置。没有工具/授权的项目写“未验证”和具体缺项,不能把 running 当作可用。 10. 通过用户授权的私密渠道交付订阅 URL、客户端配置和端口/更新方法;公开博客、代码仓库和截图只保留占位符,不公开真实 IP、密码或 token。清理本次临时秘密文件,保留受保护的部署状态及回滚备份。
2026年10月11日
38 阅读
0 评论
0 点赞
2026-05-04
鸿蒙安装 Google Play 应用:microG 方案实践
华为被制裁后,鸿蒙设备无法使用谷歌移动服务(GMS),很多海外应用装了也跑不起来。本文分享一套轻量方案:用开源项目 microG 伪装 GMS 签名,配合 Aurora Store 下载应用,无需虚拟机、不损耗性能,三步搞定。适合想用华为平板刷 Twitter、看 YouTube、玩国际服游戏的用户。
2026年05月04日
846 阅读
1 评论
0 点赞
2025-10-29
GAIA 测评体系
GAIA 测的不是“会不会聊天”,而是“能不能把活干完”。文中总结 GAIA 的分级、评分方式,以及企业如何用类似思路去验证智能助手是否真的可靠。
2025年10月29日
135 阅读
0 评论
0 点赞
2025-03-05
AI简历开发-自定义指令实现图片懒加载
本文记录了如何在 Vue3 项目中使用 IntersectionObserver 和自定义指令实现图片懒加载,有效减少页面请求数量,提高访问体验。同时,介绍 Vue3 指令的生命周期钩子及使用示例,帮助开发者更高效地优化前端性能。
2025年03月05日
197 阅读
0 评论
0 点赞
2025-02-23
AI简历-做了个简历生成的项目
本平台提供一个全面的简历编辑工具,结合了AI简历润色和灵活的模板切换功能。用户可以在线编辑简历、实时预览并导出为PDF,同时支持导入导出数据。该平台开源,欢迎前端开发者参与贡献,持续优化和更新。
2025年02月23日
1,105 阅读
4 评论
8 点赞
2025-02-20
AI简历开发 - 记录如何实现纯前端切换简历多模板
本文详细讲解了如何利用 Pinia 进行模板持久化存储,并通过 Vite 的 import.meta.glob 批量动态导入模板,实现按需加载和动态组件切换,确保用户可以流畅地更换简历模板,提高用户体验和性能优化。
2025年02月20日
191 阅读
0 评论
0 点赞
2025-02-10
JS进阶-作用域
本文详细解析了JavaScript中的局部作用域和全局作用域,强调局部作用域对变量污染的防护和内存管理的重要性。我们探讨了作用域链的查找机制,以及垃圾回收机制的两种主要方式和触发时机。此外,闭包的定义与实际应用场景被重点讨论,展示了如何通过闭包实现数据隐藏和防止内存泄漏。最后,文章还介绍了变量提升和函数提升的概念,帮助读者更好地理解JavaScript的执行机制。
2025年02月10日
156 阅读
0 评论
0 点赞
2023-08-21
SimpleWrite 使用文档
SimpleWrite 使用文档本文是给已经购买了SimpleWrite—简洁优雅的Emlog个人博客主题 的用户所观看的,要是您尚未购买该主题,可以先移步至该文章先了解本主题,然后决定是否购买。首先,感谢您对SimpleWrite主题的支持,该主题是我所开发的第一款emlog的博客主题,该主题致力于打造一个完善个人博客系统,实现完善的个人博客功能,包括文章、说说、相册等模块,相信使用后,您一定会爱上这款主题!正文开始SimpleWrite使用教程emlog 安装首先,先安装emlog,具体教程请前往 emlog官网,安装emlog教程在这里就不再赘述,具体请参考官方文档!SimpleWrite 模板安装若您是从emlog官网购买的主题,直接进入网站后台,应用商店处进行进行安装即可。若您是通过其它渠道获取到安装包,直接前往网站后台 "外观"->"模板" 然后点击右上角的安装模板,上传主题压缩包进去即可完成安装。个人信息设置至此,您已经完成模板的安装。然后前往 系统->设置->个人信息 对个人信息进行修改,包括头像、昵称、邮箱、个人描述等,这些信息将影响网站首页中输出您的个人信息。设置完成后,下图中的信息将会按照您设置的输出!模板设置想要对模板进行更多设置?前往 外观->模板->设置中进行更多设置。在这里您可以设置文章列表动画、文章标题字体、网站全局主题色等等...你想设置的这里都能!说说、相册功能的使用下面是本主题的特色功能的使用。说说、相册功能的使用:想要发布说说/相册,首先按照下面的方式,选择对应的分类模板,然后新建分类。新建完毕后,前往 主题设置->页面设置 处,在说说、相册中选择刚刚创建的两个分类:这一步可以帮助程序知道你说说、相册所在的地址,便于前台导航!那么,该如何发布说说/相册呢?非常简单!只需要像平时发布文章一样发布,然后分类选择即可!例如你想发布说说,就写好说说的标题,说说内容(说说内容会展示在说说的页面中,最多获取文章内容中三张图并进行展示),然后选择分类,选择已经创建好的说说分类,这样就发布了一条说说!当你想发布相册内容的时候,可以在发布文章的时候上传图片,发布的时候选择相册分类即可,相册就会自动将文章中的图片都提取出来,在相册页面中展示!相册上传的时候,建议图片描述填写一下,因为相册页面会在图片下方展示图片描述!不想说说、相册的文章显示在文章列表中?要是您不希望您发布的说说和相册文章不展示在首页或者搜索等列表结果中,您可以前往模板设置中,关闭按钮即可!页面的设置SimpleWrite中内置了多种页面的模板(更新中)您可以前往 页面->页面模板 选择对应的页面即可,然后您可以自定义将其添加进导航栏中。导航栏此处就是SimpleWrite中的导航栏,您在网站后台设置的导航栏在此处都会显示!侧边栏您可以在 边栏中 调整边栏顺序、增减...以便获得您喜欢的边栏展示方式!全局主题色调全局主题色调在模板设置中可以自行设置自定义字体字体可以在模板设置中进行自行设置字体即可!
2023年08月21日
494 阅读
1 评论
3 点赞
2023-04-21
关于vue中v-for中使用bootstrap 5的modal弹框出现的问题
关于vue中v-for中使用bootstrap 5的modal弹框出现的问题
2023年04月21日
1,018 阅读
1 评论
3 点赞
2023-04-19
Vue监听路由中传参的变化-关于watch的使用方式
Vue监听路由中传参的变化
2023年04月19日
392 阅读
0 评论
2 点赞
2023-04-15
Mysql 3306端口被占用解决方案
Mysql 3306端口被占用解决方案
2023年04月15日
562 阅读
1 评论
1 点赞
2023-04-15
【Typecho插件】ShowAllViews 统计你所有文章阅读数
【Typecho插件】ShowAllViews 统计你所有文章阅读数
2023年04月15日
1,322 阅读
2 评论
8 点赞
2023-04-13
devc++控制台输出中文乱码解决方案
devc++控制台输出中文乱码解决方案
2023年04月13日
724 阅读
1 评论
4 点赞
2023-04-05
【Emlog插件】FriendLinks
FriendLinks是一个便于emlog访客可以更见简单便捷地进行申请友链,并且对友链进行集中展示的插件。
2023年04月05日
783 阅读
0 评论
3 点赞
2023-02-21
【Typecho插件】ChatgptWrite
ChatgptWrite 是一个方便你在typecho使用chatgpt进行文章创作的插件!
2023年02月21日
3,158 阅读
13 评论
5 点赞
1
2
...
4
友情链接
文章阅读:
网站地图