<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>菜鸟自习生</title><link>https://blog.sdjy.eu.org/</link><description>Good Luck To You!</description><item><title>Lucky stun穿透 + Cloudflare 实现无公网 IPv4 访问、端口隐藏与 v4或v6 分流</title><link>https://blog.sdjy.eu.org/?id=49</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;h1 id=&quot;h1-Lucky20stunu7A7Fu900F20+20Cloudflare20u5B9Eu73B0u65E0u516Cu7F5120IPv420u8BBFu95EEu3001u7AEFu53E3u9690u85CFu4E0E20v4u6216v620u5206u6D41-1&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;Lucky stun穿透 + Cloudflare 实现无公网 IPv4 访问、端口隐藏与 v4或v6 分流&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;Lucky stun穿透 + Cloudflare 实现无公网 IPv4 访问、端口隐藏与 v4或v6 分流&lt;/h1&gt;&lt;h2 id=&quot;h2-u524Du8A00-2&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;前言&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;前言&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;本人为网络技术小白，本文内容基于网络大佬分享的知识整理融合，仅作个人备忘。&lt;/li&gt;&lt;li&gt;核心目标：家庭设备仅有公网 IPv6、无公网 IPv4 时，实现外网 IPv4 环境访问、IPv6 环境自动分流，且统一使用不带端口的泛域名访问。&lt;/li&gt;&lt;/ul&gt;
&lt;h2 id=&quot;h2-u4E00u3001u524Du7F6Eu51C6u5907-5&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;一、前置准备&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;一、前置准备&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;网络环境：家庭宽带有公网 IPv6，路由器拨号（推荐，减少 NAT 层数和端口转发配置）。&lt;/li&gt;&lt;li&gt;NAT 类型：Lucky 的 STUN 穿透页面测试，NAT1 最佳，NAT3 通常可用，NAT4 需搜索降低层级方法。lucky 的 stun 页面可以测试，如果不是就不用看本篇文章了&lt;/li&gt;&lt;li&gt;域名与 CF 托管：拥有一个域名（推荐付费，免费二级域名可能存在问题），并托管至 Cloudflare（简称 CF），本文以 123.xyz为例。&lt;/li&gt;&lt;li&gt;软件基础：已安装 Lucky，会使用其动态解析、反向代理功能&lt;/li&gt;&lt;/ol&gt;
&lt;h2 id=&quot;h2-u4E8Cu3001Cloudflareu914Du7F6E-10&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;二、Cloudflare配置&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;二、Cloudflare配置&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;点击DNS记录，添加一条A记录，名称填入通配符星号 * 。ipv4随便填一个即可，不产生实际作用，这里填入的8.8.8.8。代理状态勾选上，点亮小黄云。&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;这里解释一下这样设置的作用。CF代理了 *.123.xyz，以后访问如emby.123.xyz的时候，首先就会请求到CF这里来，然后根据我们后面会添加的规则，进行v4或者v6的重定向。&lt;/p&gt;
&lt;p&gt;注意如果之前已经有了这条二级泛域名的解析，直接勾选代理即可。同时删除或者关闭lucky的这一条动态域名配置。&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;A记录.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c40033ae123.png&quot;&gt;&lt;br&gt;2. 进入“规则”，点击“创建规则”，选择“重定向规则”。&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;创建重定向规则.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c4009dc6a34.png&quot;&gt;&lt;br&gt;3. 配置v4重定向规则&lt;br&gt;①规则名称为了区别，添加v4后缀&lt;br&gt;②选择自定义筛选表达式。&lt;br&gt;③然后按图示配置字段，运算符，和值。第一栏是之前DNS解析添加的泛域名，*.123.xyz；第二栏可以不配置，这里是一种示意，如果某个以&amp;nbsp;.123.xyz&amp;nbsp;结尾的域名已经作特殊使用了，就排除一下；第三栏填入的值 0.0.0.0/0，表示匹配所有的ipv4地址。&lt;br&gt;④重定向类型选择“动态”&lt;br&gt;⑤表达式填入下面的一段代码。中间的 ipv4 是为了区别于 ipv6，实现分流，端口号6211在v4重定向规则中随便填入，后面会通过lucky的webhook同步成stun穿透获取的公网端口&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wildcard_replace(http.request.full_uri, &quot;*://*.123.xyz/*&quot;, &quot;https://${2}.ipv4.123.xyz:6211/${3}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;⑥状态代码选择307或者302（一般是302，但某些应用中使用时，307才有效；具体差异我不懂）。&lt;br&gt;⑦勾选保留查询字符串&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;v4规则设置.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c401d6646ad.png&quot;&gt;&lt;br&gt;4. 配置v6重定向规则&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;直接从v4重定向规则复制，修改一下规则名称，修改ip源地址为2000::/3，URL重定向表达式，把ipv4替换为ipv6，端口号改为lucky反向代理监听地址&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;v6重定向规则.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c4029550a54.png&quot;&gt;&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;V6规则设置.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c402998d1c7.png&quot;&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;创建API令牌&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;点击页面右上角》配置文件》API令牌》创建令牌》（最底下）自定义令牌。&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;①名称说明用途即可&lt;br&gt;②权限添加 “账户》规则策略》编辑”&lt;br&gt;③权限添加 “区域》单一重定向》编辑”&lt;br&gt;④账户资源添加 “包括》你自己的账户”&lt;br&gt;⑤区域资源添加 “包括》特定区域》你的域名”&lt;br&gt;继续以显示摘要》创建令牌》复制令牌，保存到一个合适的位置，后面要用。&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;配置.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c403d7a30f9.png&quot;&gt;&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;创建令牌.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c4043a653ef.png&quot;&gt;&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;令牌设置.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c404039c059.png&quot;&gt;&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;准备创建令牌.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c40403128a0.png&quot;&gt;&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;显示创建令牌.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c403ff6bed5.png&quot;&gt;&lt;br&gt;以上是CF端的准备工作。总结一下：我们添加了一条二级泛域名解析*.123.xyz，由CF代理，然后创建了两条重定向规则，根据不同的访问ip来源，再分别重定向到v4或v6的地址上去。接下来是lucky端的配置，需要用到三级泛域名*.ipv4.123.xyz和*.ipv6.123.xyz，以及账户ID，区域ID，以及具有编辑账户规则策略和区域重定向规则权限的API令牌。&lt;/p&gt;
&lt;h2 id=&quot;h2-Luckyu914Du7F6E-50&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;Lucky配置&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;Lucky配置&lt;/h2&gt;&lt;p&gt;我用的lucky版本是3.0，如果版本太过老旧，建议先升级到最新版。如果原来有二级泛域名*.123.xyz的解析，一定要先删除或者关闭，同时在CF的DNS解析记录也要删除。&lt;/p&gt;
&lt;p&gt;1.配置DDNS（域名动态解析）&lt;br&gt;如果之前不是用的CF做动态解析，这里简单说一下配置方法：&lt;br&gt;首先也是要在CF创建一个API令牌，权限：区域》DNS》编辑；区域资源：包括》特定区域》123.xyz。然后保存好令牌。&lt;br&gt;编辑已有任务或者添加一个任务；托管商选择CF；Token填入刚刚创建的API令牌；{ipv4Addr}和{ipv6Addr}的开关都打开；添加同步记录；记录名填*.ipv4.123.xyz，记录类型选择A；再添加一条同步记录，记录名填*.ipv6.123.xyz，记录类型选择AAAA。&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;ddns.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c405df31643.png&quot;&gt;&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;ddns成功.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/25/69c40643d6c87.png&quot;&gt;&lt;br&gt;2. 配置web服务的反向代理&lt;br&gt;这里默认读者已经会配置反向代理，并且已经配置有反向代理服务了。那么编辑已有的反向代理服务，前端地址中，添加两条带ipv4和ipv6字段的地址，后端地址保持不变。&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;反向代理.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/26/69c4069a03526.png&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;h2-u6DFBu52A0Stunu7A7Fu900F-62&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;添加Stun穿透&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;添加Stun穿透&lt;/h2&gt;&lt;p&gt;打开重定向规则的页面进入编辑状态，然后按F12–网络，点击保存按钮右侧就会出现一个API地址，把它复制出来备用，如图所示&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;id.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/26/69c40918bca66.png&quot;&gt;&lt;br&gt;只需要把复制出来的地址替换前面的部分：&lt;br&gt;&lt;a href=&quot;https://dash.cloudflare.com/api/v4&quot;&gt;https://dash.cloudflare.com/api/v4&lt;/a&gt;&lt;br&gt;替换成&lt;br&gt;&lt;a href=&quot;https://api.cloudflare.com/client/v4&quot;&gt;https://api.cloudflare.com/client/v4&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;h3-u4E0Bu9762u662Fu6DFBu52A0stunu7684u5177u4F53u5185u5BB9-69&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;下面是添加stun的具体内容&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;下面是添加stun的具体内容&lt;/h3&gt;&lt;p&gt;现在创建一个stun穿透任务&lt;/p&gt;
&lt;p&gt;①取一个描述作用的名称&lt;br&gt;②穿透类型选择TCP，UDP也可以&lt;br&gt;③穿透通道本地端口填一个没有使用的，或者填0，会使用随机端口&lt;br&gt;④开启防火墙自动放行&lt;br&gt;⑤目标地址：哪个设备要使用这个穿透就填谁的ip。这里，是供lucky的反向代理用的，lucky装在路由器上，就填192.168.31.1&lt;br&gt;⑥目标端口，就填lucky反向代理的监听端口&lt;br&gt;⑦打开WebHook开关，下面内容就复用上面创建的最有一条手动任务。请求体有所不同的是，端口号改成了lucky提供的变量#{port}，表示传入stun穿透获取到的公网端口。&lt;br&gt;⑧调用成功填入”success”: true&lt;/p&gt;
&lt;p&gt;接口地址：就是F12复制出来并替换前面部分的地址&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://api.cloudflare.com/client/v4/zones/区域ID/rulesets/重定向规则集ID/rules/重定向规则ID
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;请求方式：PATCH&lt;/p&gt;
&lt;p&gt;请求头：Authorization: Bearer 创建的重定向API令牌&lt;br&gt;Content-Type: application/json&lt;/p&gt;
&lt;p&gt;请求体：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;description&quot;: &quot;stun-重定向-v4&quot;,
  &quot;expression&quot;: &quot;(http.host wildcard \&quot;*.123.xyz\&quot; and not http.host contains \&quot;nas.123.xyz\&quot; and ip.src in {0.0.0.0/0})&quot;,
  &quot;action&quot;: &quot;redirect&quot;,
  &quot;action_parameters&quot;: {
    &quot;from_value&quot;: {
      &quot;status_code&quot;: 307,
      &quot;target_url&quot;: {
        &quot;expression&quot;: &quot;wildcard_replace(http.request.full_uri, \&quot;*://*.123.xyz/*\&quot;, \&quot;https://${2}.ipv4.123.xyz:#{port}/${3}\&quot;)&quot;
      },
      &quot;preserve_query_string&quot;: true
    }
  }
} 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;记得把请求体中的域名替换成你自己的。&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;stun设置.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/26/69c40bd6de233.png&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;h3-u6D4Bu8BD5-109&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;测试&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;测试&lt;/h3&gt;&lt;p&gt;可以点击“WebHook手动触发测试”，看一下CF规则页面是否修改，lucky是否返回成功。保存后，stun穿透开始运行，最终成功的情况如下图。看CF规则页面的表达式中的端口是否变成了stun穿透获取的公网端口&lt;br&gt;若测试成功在最下面的地方会有”success”: true显示。&lt;br&gt;最后点一下关闭按钮再打开，这个非常的重要，不然webhook不会自动更新的&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;stun.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/26/69c40d15c943e.png&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;h3-u6D4Bu8BD5u6210u679Cu53CAu540Eu7EEDu5DE5u4F5C-115&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;测试成果及后续工作&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;测试成果及后续工作&lt;/h3&gt;&lt;p&gt;现在在浏览器输入emby.123.xyz，应该就可以跳转到emby.ipv4.123.xyz:动态端口  这个地址了。如果是在v6环境下访问，比如手机流量，那么会自动跳转到emby.ipv6.123.xyz:15556。&lt;/p&gt;
&lt;/body&gt;</description><pubDate>Thu, 26 Mar 2026 00:03:24 +0800</pubDate></item><item><title>GitHub访问加速</title><link>https://blog.sdjy.eu.org/?id=48</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;h1 id=&quot;h1-u4FEEu653920Hosts20u6587u4EF6-1&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;修改 Hosts 文件&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;修改 Hosts 文件&lt;/h1&gt;&lt;p&gt;下载SwitchHosts这个工具定时修改host文件，下载地址：&lt;a href=&quot;https://github.com/oldj/SwitchHosts&quot;&gt;https://github.com/oldj/SwitchHosts&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;h2-u64CDu4F5Cu6B65u9AA4-3&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;操作步骤&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;操作步骤&lt;/h2&gt;&lt;p&gt;添加一条规则：&lt;/p&gt;
&lt;p&gt;方案名：GitHub（可以自行命名）&lt;br&gt;类型：远程&lt;br&gt;URL 地址：&lt;a href=&quot;https://gitlab.com/ineo6/hosts/-/raw/master/hosts&quot;&gt;https://gitlab.com/ineo6/hosts/-/raw/master/hosts&lt;/a&gt;&lt;br&gt;自动更新：1个小时（时间可自行调整）&lt;br&gt;这样就可以和最新的hosts保持同步。&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;ScreenShot_2026-03-08_014654_834.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/03/08/69ac64e481dd9.png&quot;&gt;&lt;br&gt;附另一个URL：&lt;a href=&quot;https://raw.hellogithub.com/hosts&quot;&gt;https://raw.hellogithub.com/hosts&lt;/a&gt;&lt;/p&gt;
&lt;/body&gt;</description><pubDate>Sun, 08 Mar 2026 01:42:32 +0800</pubDate></item><item><title>Python 第三方库国内镜像下载地址</title><link>https://blog.sdjy.eu.org/?id=47</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Python 第三方库国内镜像下载地址&lt;br&gt;由于 Python 服务器在国外，因此使用 pip 安装第三方模块或者库的时候，下载速度特别慢，经常出现如下报错：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;$ socket.timeout: The read operation timed out
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;为提升下载速度，可以使用国内镜像下载，常用的国内镜像有：&lt;/p&gt;
&lt;p&gt;豆瓣&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;https://pypi.douban.com/simple
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;阿里云&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;https://mirrors.aliyun.com/pypi/simple
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;清华大学&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;https://pypi.tuna.tsinghua.edu.cn/simple
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;中国科技大学&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;https://pypi.mirrors.ustc.edu.cn/simple
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用方法为在 pip 命令后加 -i URL 方法，以从阿里云下载 pandas 库为例：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;$ pip install pandas -i https://mirrors.aliyun.com/pypi/simple
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在Pycharm中添加镜像源的位置：&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;2e6404cc44eb57ccf8a75526eb2ed355.jpeg&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2026/02/16/6991f1662c398.jpeg&quot;&gt;&lt;br&gt;————————————————&lt;br&gt;版权声明：本文为CSDN博主「量化Mike」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。&lt;br&gt;原文链接：&lt;a href=&quot;https://blog.csdn.net/weixin_43529465/article/details/121798634&quot;&gt;https://blog.csdn.net/weixin_43529465/article/details/121798634&lt;/a&gt;&lt;/p&gt;
&lt;/body&gt;</description><pubDate>Mon, 16 Feb 2026 00:12:13 +0800</pubDate></item><item><title>如何通过 DNS HTTPS 记录实现 Web 服务端口隐藏</title><link>https://blog.sdjy.eu.org/?id=46</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;在家庭或办公网络由于ISP限制等原因，常常无法使用标准的443端口搭建HTTPS服务，这给自建Web服务带来了诸多不便。借助DNS的SVCB/HTTPS记录（又称DNS HTTPS记录）以及现代浏览器的支持，可以让Web服务运行在非标准端口（如66、8443等）时，用户无需输入端口号，即可通过域名直接访问到你的Web服务，实现“端口隐藏”。本文介绍这种方案的原理、配置和现实中的实际例子，并特别说明目前的浏览器兼容性。&lt;/p&gt;
&lt;h1 id=&quot;h1-u4E00u3001u5DE5u4F5Cu539Fu7406-3&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;一、工作原理&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;一、工作原理&lt;/h1&gt;&lt;p&gt;SVCB（Service Binding）及 HTTPS 记录是 DNS 的新类型，用于告知客户端如何访问服务的详细参数，比如支持的协议、优先端口等。当浏览器收到这类记录并支持相应标准时，就能够自动切换到你声明的端口（如66），而用户依旧输入标准域名，无需关心端口细节。&lt;/p&gt;
&lt;p&gt;流程大致如下：&lt;/p&gt;
&lt;p&gt;服务器监听非443的HTTPS端口（如66）&lt;br&gt;DNS中为域名添加HTTPS记录，声明端口号&lt;br&gt;支持该标准的浏览器（目前主要是Firefox）识别记录并转向目标端口&lt;br&gt;用户体验与标准 &lt;a href=&quot;https://yourdomain.com/&quot;&gt;https://yourdomain.com/&lt;/a&gt; 完全一致&lt;/p&gt;
&lt;h1 id=&quot;h1-u4E8Cu3001u670Du52A1u5668u548C20DNS20u7AEFu914Du7F6E-12&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;二、服务器和 DNS 端配置&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;二、服务器和 DNS 端配置&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;配置 Web 服务监听非标准端口&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;以 Lucky为例，Web服务规则监听66端口并启用TLS.&lt;/p&gt;
&lt;p&gt;确保 &lt;a href=&quot;https://hideport.lucky666.cn:66/&quot;&gt;https://hideport.lucky666.cn:66/&lt;/a&gt; 能正常访问。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;设置 DNS HTTPS 记录&lt;br&gt;假设目标域名为 hideport.lucky666.cn，通过LuckyDDNS 在支持 SVCB/HTTPS 记录的 DNS 服务商（如 Cloudflare）处添加如下记录：&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;记录类型：HTTPS&lt;br&gt;记录名：hideport.lucky666.cn&lt;br&gt;记录内容：1 . alpn=”h3,h2“  port=”66”&lt;/p&gt;
&lt;h1 id=&quot;h1-u4E09u3001u5B9Eu9645u6848u4F8Bu6F14u793A-28&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;三、实际案例演示&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;三、实际案例演示&lt;/h1&gt;&lt;p&gt;假设你已经完成上述配置，则有如下情况：&lt;/p&gt;
&lt;p&gt;你的 Web 服务实际运行在 &lt;a href=&quot;https://hideport.lucky666.cn:66/（端口66，需保证证书及防火墙放行）&quot;&gt;https://hideport.lucky666.cn:66/（端口66，需保证证书及防火墙放行）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在 DNS 中为 hideport.lucky666.cn 配置了：&lt;/p&gt;
&lt;p&gt;HTTPS 1 . alpn=”h3,h2” port=”66”&lt;br&gt;用户使用新版 Firefox 浏览器，打开 &lt;a href=&quot;https://hideport.lucky666.cn/，无需手动输入端口号，浏览器自动感知端口并访问66端口&quot;&gt;https://hideport.lucky666.cn/，无需手动输入端口号，浏览器自动感知端口并访问66端口&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Web 服务器端日志可以看到实际命中66端口请求&lt;/p&gt;
&lt;p&gt;例如，在Firefox地址栏直接输入：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://hideport.lucky666.cn/&quot;&gt;https://hideport.lucky666.cn/&lt;/a&gt;&lt;br&gt;浏览器将会正确无感跳转至66端口并展示内容。&lt;/p&gt;
&lt;h1 id=&quot;h1-u56DBu3001u5BA2u6237u7AEFu8BBEu7F6E-47&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;四、客户端设置&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;四、客户端设置&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;确保浏览器支持 DoH（DNS over HTTPS）&lt;br&gt;以 Firefox 为例：&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;打开“设置”→“网络设置”→启用“DNS over HTTPS”&lt;br&gt;建议选择 Cloudflare 等受信任的 DoH 服务商&lt;br&gt;2. 访问测试&lt;br&gt;此时直接在地址栏输入 &lt;a href=&quot;https://hideport.lucky666.cn/，Firefox&quot;&gt;https://hideport.lucky666.cn/，Firefox&lt;/a&gt; 会自动根据 DNS 记录访问指定的66端口，域名栏不会显示端口号，用户体验无缝。&lt;/p&gt;
&lt;h1 id=&quot;h1-u4E94u3001u517Cu5BB9u6027u8BF4u660EuFF08u91CDu70B9uFF09-56&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;五、兼容性说明（重点）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;五、兼容性说明（重点）&lt;/h1&gt;&lt;p&gt;目前，各大浏览器对 DNS HTTPS 记录的支持进展不同：&lt;/p&gt;
&lt;p&gt;Firefox 新版本（v89及以后）已完整支持自动端口发现和跳转，无需用户干预&lt;br&gt;Chrome、Edge、Safari 目前尚未实现通过 DNS HTTPS 记录自动切换端口的功能。即使配置了记录，这些浏览器访问时仍旧只会尝试标准443端口（需手动指定端口号才能访问）&lt;br&gt;未来随着标准普及，主流浏览器有望支持该特性；但当前如需全终端兼容，仍建议 Web 服务监听443端口&lt;br&gt;部署建议：&lt;/p&gt;
&lt;p&gt;家庭网络等场景无法使用443端口时，本方案可提升体验&lt;br&gt;面向所有终端的公开站点，建议继续使用443端口&lt;br&gt;部署后请务必在目标浏览器上测试&lt;/p&gt;
&lt;h1 id=&quot;h1-u516Du3001u6CE8u610Fu4E8Bu9879u4E0Eu98CEu9669-67&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;六、注意事项与风险&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;六、注意事项与风险&lt;/h1&gt;&lt;p&gt;安全性：隐藏端口不能代替安全加固，只适合“信息隐藏”或安全分层&lt;br&gt;SEO：部分搜索引擎或采集器无法采集配置了端口隐藏的站点，影响站点曝光&lt;br&gt;DNS 普及度：国内大多 DNS 服务商暂不支持 HTTPS/SVCB 记录，选型需留意&lt;br&gt;证书配置：务必保证证书完整覆盖主域名，且服务端66端口位于受信防火墙之内&lt;/p&gt;
&lt;h1 id=&quot;h1-u4E03u3001u603Bu7ED3-72&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;七、总结&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;七、总结&lt;/h1&gt;&lt;p&gt;借助 DNS HTTPS 记录与支持新标准的现代浏览器，可以实现在客户端自动“隐藏”非443端口的 Web 服务访问。对于无法获得标准443端口但又希望提供新一代无端口号展示HTTPS访问体验的家庭或小型办公网络场景，本方案非常适用。当前仅 Firefox 支持自动端口发现，Chrome 及其他主流浏览器尚不支持自动跳转端口，部署和推广时需充分注意兼容性。&lt;/p&gt;
&lt;p&gt;希望本文为有相关需求的朋友提供技术思路和实际操作示例&lt;/p&gt;
&lt;/body&gt;</description><pubDate>Mon, 15 Dec 2025 16:50:23 +0800</pubDate></item><item><title>使用Vercel部署反代VPS的ip+端口</title><link>https://blog.sdjy.eu.org/?id=45</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;如果你手里有一台 VPS，上面跑了各种服务（比如 Portainer、Alist、Halo 博客等），通常我们只能通过&amp;nbsp;&lt;a href=&quot;http://1.2.3.4:8080&quot;&gt;http://1.2.3.4:8080&lt;/a&gt;&amp;nbsp;这种“裸奔”的方式访问。这不仅难记，而且没有 HTTPS，非常不安全，甚至会被部分浏览器标记为不安全站点。通常我们会想到用 Nginx 做反代，但配置 SSL 证书、续签、配置&amp;nbsp;nginx.conf&amp;nbsp;对很多非运维人员来说还是挺繁琐的。&lt;br&gt;今天介绍一种零成本、无需维护服务器、且最稳健的方案：利用 Vercel 进行代理访问。&lt;br&gt;&lt;span style=&quot;color: #01b3bc&quot;&gt;本身 Vercel 也支持node项目部署，这里只用 Vercel 进行代理访问应用最大的优点就是：1. 不用翻墙访问 2. 速度快&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;h2-u6B65u9AA4u4E00uFF1Au73AFu5883u51C6u5907-4&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;步骤一：环境准备&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤一：环境准备&lt;/h2&gt;&lt;p&gt;在开始之前，我们需要在本地安装 Vercel 的部署工具。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装 Node.js如果你的电脑还没有 Node.js，请先去&amp;nbsp;官网下载&amp;nbsp;并安装（LTS 版本即可）&lt;/li&gt;&lt;li&gt;安装 Vercel CLI打开终端（CMD 或 Terminal），运行以下命令全局安装 Vercel 命令行工具：&lt;/li&gt;&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npm&amp;nbsp;install&amp;nbsp;-g&amp;nbsp;vercel
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完成后，验证版本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vercel&amp;nbsp;--version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看到版本号说明安装成功。&lt;/p&gt;
&lt;h2 id=&quot;h2-u6B65u9AA4u4E8CuFF1Au9879u76EEu7ED3u6784u89C4u5212-16&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;步骤二：项目结构规划&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤二：项目结构规划&lt;/h2&gt;&lt;p&gt;假设我们需要代理两个服务： &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;网盘服务 (Alist) ：&lt;a href=&quot;http://123.123.123.123:5244&quot;&gt;http://123.123.123.123:5244&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;Docker面板 (Portainer) ：&lt;a href=&quot;http://123.123.123.123:9000&quot;&gt;http://123.123.123.123:9000&lt;/a&gt;&lt;br&gt;为了方便管理，建议在本地创建一个总文件夹，然后为每个服务创建独立的子文件夹：&lt;/li&gt;&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;My-Vercel-Proxies/          # 总目录
├── alist-proxy/           # 项目 A
│   └── vercel.json
└── portainer-proxy/       # 项目 B
    └── vercel.json
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-u6B65u9AA4u4E09uFF1Au7F16u5199u914Du7F6Eu6587u4EF6-28&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;步骤三：编写配置文件&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤三：编写配置文件&lt;/h2&gt;&lt;p&gt;这个方案最爽的地方在于：不需要写一行代码，只需要复制粘贴 JSON 配置。1. 配置项目 A (Alist)&lt;br&gt;进入&amp;nbsp;alist-proxy&amp;nbsp;文件夹，新建&amp;nbsp;vercel.json&amp;nbsp;文件，填入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;version&quot;: 2,
  &quot;routes&quot;: [
    {
      &quot;src&quot;: &quot;/(.*)&quot;,
      &quot;dest&quot;: &quot;http://116.205.228.147:15244/$1&quot;
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;配置项目 B (Portainer)&lt;br&gt;进入&amp;nbsp;portainer-proxy&amp;nbsp;文件夹，新建&amp;nbsp;vercel.json&amp;nbsp;文件，填入：&lt;/li&gt;&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;version&quot;: 2,
  &quot;routes&quot;: [
    {
      &quot;src&quot;: &quot;/(.*)&quot;,
      &quot;dest&quot;: &quot;http://116.205.228.147:9000/$1&quot;
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;⚠️ 注意： •  将 IP 和端口替换为你自己的真实地址。&lt;/p&gt;
&lt;h2 id=&quot;h2-u6B65u9AA4u56DBuFF1Au90E8u7F72u4E0Au7EBF-57&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;步骤四：部署上线&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤四：部署上线&lt;/h2&gt;&lt;p&gt;现在我们将这两个项目分别推送到 Vercel&lt;br&gt;先使用 vercel login 进行登录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vercel login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会弹出登陆页面&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;部署项目 A&lt;br&gt;在终端进入&amp;nbsp;alist-proxy&amp;nbsp;目录，执行：&lt;/li&gt;&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;vercel&amp;nbsp;-A&amp;nbsp;vercel.json&amp;nbsp;--prod&amp;nbsp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;首次部署会有交互式问答，一路回车即可：&lt;br&gt;Set up and deploy?&amp;nbsp;&lt;br&gt;-&amp;gt;&amp;nbsp;Y&lt;br&gt;Which scope?&amp;nbsp;&lt;br&gt;-&amp;gt;&amp;nbsp;回车&amp;nbsp;(选你的账号)&lt;br&gt;Link to existing project?&amp;nbsp;&lt;br&gt;-&amp;gt;&amp;nbsp;N&lt;br&gt;Project name?&amp;nbsp;&lt;br&gt;-&amp;gt;&amp;nbsp;回车&amp;nbsp;(默认叫 alist-proxy)&lt;br&gt;In which directory?&amp;nbsp;&lt;br&gt;-&amp;gt;&amp;nbsp;回车&lt;br&gt;Want to modify settings?&amp;nbsp;&lt;br&gt;-&amp;gt;&amp;nbsp;N&lt;br&gt;等待十几秒，看到&amp;nbsp;Production: &lt;a href=&quot;https://alist-proxy-xxxxxxxxxx.vercel.app&quot;&gt;https://alist-proxy-xxxxxxxxxx.vercel.app&lt;/a&gt;&amp;nbsp;即部署成功。&lt;br&gt;2. 部署项目 B&lt;br&gt;同理，进入&amp;nbsp;portainer-proxy&amp;nbsp;目录，再次执行&amp;nbsp;vercel&amp;nbsp;命令。这次 Vercel 会将其识别为一个新的独立项目。部署完成后，你将获得第二个域名，例如&amp;nbsp;&lt;a href=&quot;https://portainer-proxy-xxxxxxx.vercel.app。&quot;&gt;https://portainer-proxy-xxxxxxx.vercel.app。&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;h2-u6B65u9AA4u4E94uFF1Au7ED1u5B9Au81EAu5B9Au4E49u57DFu540DuFF08u53EFu9009uFF09-86&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;步骤五：绑定自定义域名（可选）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤五：绑定自定义域名（可选）&lt;/h2&gt;&lt;p&gt;如果你不想用 Vercel 提供的&amp;nbsp;.vercel.app&amp;nbsp;域名，可以绑定自己的域名。&lt;br&gt;1.登录 Vercel 网页控制台。&lt;br&gt;2.点击对应的项目（如&amp;nbsp;alist-proxy）。&lt;br&gt;3.进入&amp;nbsp;Settings&amp;nbsp;-&amp;gt;&amp;nbsp;Domains。&lt;br&gt;4.输入你的子域名（如&amp;nbsp;pan.yourdomain.com）。&lt;br&gt;5.去你的域名服务商（阿里云/腾讯云/Cloudflare）添加一条 CNAME 记录指向提供的CNAME即可。&lt;/p&gt;
&lt;h1 id=&quot;h1-u603Bu7ED3-93&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;总结&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;总结&lt;/h1&gt;&lt;p&gt;Vercel 毕竟是 Serverless 平台，不适合 需要长连接（WebSocket）的项目，并且免费版对于流量以及请求次数都有最大限制，只适用于个人项目&lt;/p&gt;
&lt;/body&gt;</description><pubDate>Thu, 11 Dec 2025 07:11:46 +0800</pubDate></item><item><title>飞牛docker部署v2ray让指定容器走它</title><link>https://blog.sdjy.eu.org/?id=44</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;V2ray&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;version: '3.9'
services:
  v2raya:
    image: mzz2017/v2raya
    volumes:
      - '/etc/v2raya:/etc/v2raya'
    environment:
      - V2RAYA_LOG_FILE=/tmp/v2raya.log
      - V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray
    container_name: v2raya
    restart: always
    ports:
      - '20170-20172:20170-20172'
      - '2017:2017'
    networks:  # 显式指定网络
      v2raya_net:  # 使用自定义网络

networks:  # 定义网络配置
  v2raya_net:
    driver: bridge
    ipam:
      config:
        - subnet: &quot;192.168.96.0/24&quot;  # 自定义子网
          gateway: &quot;192.168.96.1&quot;    # 自定义网关
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;斯玛特&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;version: '3.8'

services:
  smart-v1:
    image: instituteiptv/smart-v1:latest
    container_name: smart-v1
    restart: always
    ports:
      - &quot;5052:5050&quot;
    environment:
      - SMART_FILE=/app/smart.txt
      - SMART_CUSTOM_TOKEN=设置你的token
      - http_proxy=http://192.168.96.1:20171
      - https_proxy=http://192.168.96.1:20171
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;v2ray中的设置如图&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;QQ20251102-172547.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2025/11/02/690723b279f89.png&quot;&gt;&lt;br&gt;然后选择节点启动即可&lt;/p&gt;
&lt;/body&gt;</description><pubDate>Sun, 02 Nov 2025 16:51:22 +0800</pubDate></item><item><title>自动更新所有docker容器项目的工具</title><link>https://blog.sdjy.eu.org/?id=43</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;services:
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_INTERVAL=3600   # 设置为每小时检查一次（3600秒）
      - WATCHTOWER_CLEANUP=true    # 自动清理未使用的旧镜像
    restart: always
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;V2ray中的设置&lt;br&gt;&lt;img style=&quot;max-width:100%;&quot; title=&quot;QQ20251102-172547.png&quot; alt=&quot;null&quot; src=&quot;https://img.sdjy.eu.org/2025/11/02/690723b279f89.png&quot;&gt;&lt;br&gt;导入节点然后启动即可&lt;/p&gt;
&lt;/body&gt;</description><pubDate>Sun, 02 Nov 2025 16:51:22 +0800</pubDate></item><item><title>宝塔企业开心</title><link>https://blog.sdjy.eu.org/?id=42</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;通用安装脚本（适用于多个系统）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if [ -f /usr/bin/curl ];then curl -sSO http://io.bt.sb/install/install_panel.sh;else wget -O install_panel.sh http://io.bt.sb/install/install_panel.sh;fi;bash install_panel.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CentOS 安装命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum install -y wget &amp;amp;&amp;amp; wget -O install.sh http://io.bt.sb/install/install_6.0.sh &amp;amp;&amp;amp; sh install.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;yum install -y wget &amp;amp;&amp;amp; wget -O install.sh http://io.bt.sb/install/install_6.0.sh &amp;amp; sh install.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ubuntu/Debian 安装命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget -O install.sh http://io.bt.sb/install/install-ubuntu_6.0.sh &amp;amp;&amp;amp; sudo bash install.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fedora 安装命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget -O install.sh http://io.bt.sb/install/install_6.0.sh &amp;amp;&amp;amp; bash install.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;试验性安装命令（CentOS/Ubuntu/Debian，独立运行环境 py3.7）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -sSO http://io.bt.sb/install/install_panel.sh &amp;amp;&amp;amp; bash install_panel.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;curl -sSO http://io.bt.sb/install/install_panel.sh &amp;amp; bash install_panel.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Linux面板 9.5.0 升级企业版命令&lt;br&gt;适用于所有官方版 / 开心版 / 低版本，升级到 9.5.0 开心版：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl https://io.bt.sb/install/update_panel.sh|bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/body&gt;</description><pubDate>Wed, 29 Oct 2025 01:49:24 +0800</pubDate></item><item><title>广州代理源码</title><link>https://blog.sdjy.eu.org/?id=41</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
// 定义频道映射关系
$channelMap = [
    'gzzh' =&amp;gt; '31', // 广州综合
    'gzxw' =&amp;gt; '32', // 广州新闻
    'ngds' =&amp;gt; '33', // 4K南国都市
    'gzfz' =&amp;gt; '34'  // 广州法治
];

// 获取API数据
$apiUrl = 'https://gzbn.gztv.com:7443/plus-cloud-manage-app/liveChannel/queryLiveChannelList?type=1';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
curl_close($ch);

// 解析JSON数据
$data = json_decode($response, true);
if ($data['code'] != 200 || empty($data['data'])) {
    die('无法获取频道数据');
}

// 创建频道URL映射
$channelUrls = [];
$channelNames = [];
foreach ($data['data'] as $channel) {
    $channelUrls[$channel['stationNumber']] = $channel['httpUrl'];
    $channelNames[$channel['stationNumber']] = $channel['name'];
}

// 处理请求
if (isset($_GET['list'])) {
    // 显示频道列表
    header('Content-Type: text/plain; charset=utf-8');
    $output = [];
    foreach ($channelMap as $key =&amp;gt; $stationNumber) {
        if (isset($channelNames[$stationNumber])) {
            $serverUrl = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];
            $output[] = $channelNames[$stationNumber] . ',' . $serverUrl . '?id=' . $key;
        }
    }
    echo implode(&quot;\n&quot;, $output);
} elseif (isset($_GET['id'])) {
    $id = $_GET['id'];
    if (isset($channelMap[$id])) {
        $stationNumber = $channelMap[$id];
        if (isset($channelUrls[$stationNumber])) {
            header(&quot;Location: &quot; . $channelUrls[$stationNumber]);
            exit;
        }
    }
    die('无效的频道ID');
} else {
    // 默认显示使用说明
    header('Content-Type: text/plain; charset=utf-8');
    echo &quot;广州电视台直播源\n\n&quot;;
    echo &quot;使用方法:\n&quot;;
    echo &quot;1. 访问 http://&quot;.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'].&quot;?list 查看频道列表\n&quot;;
    echo &quot;2. 访问 http://&quot;.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'].&quot;?id=频道ID 跳转到对应直播源\n&quot;;
    echo &quot;\n示例:\n&quot;;
    echo &quot;http://&quot;.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'].&quot;?id=gzzh\n&quot;;
    echo &quot;\n当前可用的频道ID:\n&quot;;
    echo implode(&quot;,&quot;, array_keys($channelMap));
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/body&gt;</description><pubDate>Tue, 28 Oct 2025 04:28:16 +0800</pubDate></item><item><title>小白也可以轻松学会的PHP运行教程+项目分享</title><link>https://blog.sdjy.eu.org/?id=40</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Docker一键部署并运行：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;docker run -d --name php-runtime --restart=always -p 5080:80 -p 5090:8080 -e ADMIN_USER=admin -e ADMIN_PASS=123456 -v php-runtime_repo:/var/www/repo livecodesvip/php-runtime:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;前面端口如有冲突可更改，帐号：admin，123456这里是登陆密码可更改&lt;br&gt;然后执行自动更新Docker容器的指令：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;docker run -d --name watchtower --restart=always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower php-runtime  --cleanup --interval 3600
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解释：Docker容器内部的80和8080端口分别为PHP运行端口和前端界面运行端口，ADMIN_USER和ADMIN_PASS随便修改，5080和5090自己映射到宿主机的端口也可以随便修改，前提是宿主机这两个端口没有被使用，采用如上命令部署后，直接访问：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;http://ip:5090
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就可以打开前端管理界面，前端管理界面登录需要的账号和密码就是你设置的对应我的admin和123456，输入账号密码点击登录，然后就可以进行上传和管理PHP文件等操作，比如你直接在主目录上传php，那么访问则是：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;http://ip:5080/xxx.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你在主目录下新建了文件夹，在新建的文件夹内部上传了PHP，比如新建文件夹test，那么访问就是：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;http://ip:5080/test/xxx.php
&lt;/code&gt;&lt;/pre&gt;
&lt;/body&gt;</description><pubDate>Mon, 27 Oct 2025 21:02:51 +0800</pubDate></item></channel></rss>