<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>拾遗</title>
  
  
  <link href="https://shyi.org/atom.xml" rel="self"/>
  
  <link href="https://shyi.org/"/>
  <updated>2025-06-17T07:23:09.946Z</updated>
  <id>https://shyi.org/</id>
  
  <author>
    <name>Shyi</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>搭建mosdns和tpclash</title>
    <link href="https://shyi.org/posts/41092/"/>
    <id>https://shyi.org/posts/41092/</id>
    <published>2023-12-02T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.946Z</updated>
    
    <content type="html"><![CDATA[<p>20250617 UPDATE:</p><p>mosdns比较依赖于上游DNS，尤其是现在国外DNS间歇性阻断，导致使用体验很差需要定期对上游DNS进行更新，使用成本较高，故下面配置不再维护。<br>推荐使用PaoPaoDNS + AdGuard Home</p><p>mosdns和tpclash实现DNS防泄露和DNS防污染，如果要实现上述两种效果<del><strong>请使用nameserver修改版</strong></del> 请使用<strong>本地配置版</strong>，想要什么配置只需要修改<code>/data/clash_config/default_config.yaml</code>，本人使用为Debian10.</p><p>优点：没有openclash和openwrt花里胡哨，省心</p><p>缺点：规则需要放在github上，稍微有点麻烦</p><p>使用方法：1. 开系统代理，mixed端口7890，socks端口7891。<br>2. 改路由IP为这个IP，但是<strong>DNS要胡填一个</strong>，否则分流会失败。<br>2. Web-ui的密码是<code>tpclash</code>。</p><h2 id="1-tpclash"><a href="#1-tpclash" class="headerlink" title="1. tpclash"></a>1. tpclash</h2><p>tpclash已删库，下载链接：<a href="https://mega.nz/folder/Aq8khBTT#s_jn20oqnvdjp5QhJb6K1A">mega</a> </p><h3 id="安装tpclash"><a href="#安装tpclash" class="headerlink" title="安装tpclash"></a>安装tpclash</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">chmod</span> u+x tpclash<br>./tpclash install<br></code></pre></td></tr></table></figure><p>可执行文件位置：&#x2F;usr&#x2F;local&#x2F;bin&#x2F;tpclash 与 &#x2F;usr&#x2F;local&#x2F;bin&#x2F;tpclash.sh</p><p>本地配置文件：&#x2F;etc&#x2F;clash.yaml</p><h3 id="修改clash-yaml"><a href="#修改clash-yaml" class="headerlink" title="修改clash.yaml"></a>修改clash.yaml</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/clash.yaml<br><br><span class="hljs-comment"># 修改为你的配置</span><br></code></pre></td></tr></table></figure><h3 id="远程配置文件"><a href="#远程配置文件" class="headerlink" title="远程配置文件"></a>远程配置文件</h3><p>修改：vim &#x2F;usr&#x2F;local&#x2F;bin&#x2F;tpclash.sh</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/usr/bin/bash</span><br><br>/usr/local/bin/tpclash --auto-fix tun -i <span class="hljs-string">&quot;60m&quot;</span> -c <span class="hljs-string">&quot;https://example.com/clash.yaml&quot;</span><br></code></pre></td></tr></table></figure><h3 id="卸载tpclash"><a href="#卸载tpclash" class="headerlink" title="卸载tpclash"></a>卸载tpclash</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl stop tpclash<br>tpclash uninstall<br></code></pre></td></tr></table></figure><h3 id="命令"><a href="#命令" class="headerlink" title="命令"></a>命令</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">重载配置<br>systemctl daemon-reload<br>启动<br>systemctl start tpclash<br>重启<br>systemctl restart tpclash<br>开机自启<br>systemctl <span class="hljs-built_in">enable</span> tpclash<br></code></pre></td></tr></table></figure><p>常用命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl start tpclash  <span class="hljs-comment"># 启动服务</span><br>systemctl status tpclash <span class="hljs-comment"># </span><br>systemctl stop tpclash  <span class="hljs-comment"># 停止服务</span><br>systemctl restart tpclash  <span class="hljs-comment"># 重启服务</span><br>systemctl <span class="hljs-built_in">enable</span> tpclash  <span class="hljs-comment"># 开启自启动</span><br>systemctl <span class="hljs-built_in">disable</span> tpclash  <span class="hljs-comment"># 关闭自启动</span><br>journalctl -fu tpclash  <span class="hljs-comment"># 查看日志</span><br>systemctl daemon-reload  <span class="hljs-comment"># 重载服务配置</span><br></code></pre></td></tr></table></figure><h2 id="2-mosdns"><a href="#2-mosdns" class="headerlink" title="2. mosdns"></a>2. mosdns</h2><p>release: <a href="https://github.com/IrineSistiana/mosdns/releases">https://github.com/IrineSistiana/mosdns/releases</a><br>wiki: <a href="https://irine-sistiana.gitbook.io/mosdns-wiki/mosdns-v5">https://irine-sistiana.gitbook.io/mosdns-wiki/mosdns-v5</a></p><h3 id="创建相关配置文件"><a href="#创建相关配置文件" class="headerlink" title="创建相关配置文件"></a>创建相关配置文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cp</span> mosdns /usr/local/bin/<br><span class="hljs-comment"># 创建配置文件</span><br><span class="hljs-built_in">mkdir</span> -p /etc/mosdns/rules<br><span class="hljs-built_in">touch</span> config.yaml<br><span class="hljs-built_in">mv</span> config.yaml /etc/mosdns/<br><span class="hljs-comment">#cp direct-list.txt cn.txt /etc/mosdns/rules/</span><br><br><span class="hljs-comment"># custom_for_cndns.txt与cn.txt自动使用cn_edns</span><br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/anti-ad-domains.txt<br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/cn.txt<br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/direct-list.txt<br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/hosts<br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/custom_for_cndns.txt<br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/custom_for_worlddns.txt<br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/ddnslist.txt<br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/custom_black_list.txt<br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/custom_for_jp_edns.txt<br><span class="hljs-built_in">touch</span> /etc/mosdns/rules/custom_for_us_edns.txt<br><br><span class="hljs-comment"># custom_for_jp_edns.txt</span><br><span class="hljs-comment"># regexp:github</span><br></code></pre></td></tr></table></figure><p>运行测试一次：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">/usr/local/bin/mosdns start -c /etc/mosdns/config.yaml -d /etc/mosdns<br></code></pre></td></tr></table></figure><h3 id="更新rules"><a href="#更新rules" class="headerlink" title="更新rules"></a>更新rules</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> &gt; /etc/mosdns/rules/update_rules &lt;&lt;<span class="hljs-string">&#x27;EOF&#x27;</span><br><span class="hljs-comment">#!/bin/bash</span><br><br>mirror_proxy=<span class="hljs-string">&quot;&quot;</span>  <span class="hljs-comment">#以/结尾，比如: https://ghproxy.com/</span><br>mosdns_working_dir=<span class="hljs-string">&quot;/etc/mosdns&quot;</span><br><span class="hljs-built_in">mkdir</span> -p /tmp/mosdns &amp;&amp; curl <span class="hljs-variable">$&#123;mirror_proxy&#125;</span>https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/direct-list.txt &gt; /tmp/mosdns/direct-list.txt &amp;&amp; curl <span class="hljs-variable">$&#123;mirror_proxy&#125;</span>https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt &gt; /tmp/mosdns/anti-ad-domains.txt &amp;&amp; curl <span class="hljs-variable">$&#123;mirror_proxy&#125;</span>https://raw.githubusercontent.com/Loyalsoldier/geoip/release/text/cn.txt &gt; /tmp/mosdns/cn.txt &amp;&amp; \<span class="hljs-built_in">cp</span> -rf /tmp/mosdns/*.txt <span class="hljs-variable">$&#123;mosdns_working_dir&#125;</span>/rules &amp;&amp; <span class="hljs-built_in">rm</span> -rf /tmp/mosdns/* &amp;&amp; <span class="hljs-built_in">echo</span> <span class="hljs-string">&#x27;update successful&#x27;</span><br>mosdns service restart<br>EOF<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">chmod</span> u+x /etc/mosdns/rules/update_rules<br><br><span class="hljs-comment"># 手动更新</span><br>/etc/mosdns/rules/update_rules<br><br><span class="hljs-comment"># 每日4点自动更新规则</span><br>crontab -e<br><br>0 4 * * * /etc/mosdns/rules/update_rules<br></code></pre></td></tr></table></figure><h3 id="新建服务"><a href="#新建服务" class="headerlink" title="新建服务"></a>新建服务</h3><p> 位于<code>/etc/systemd/system/mosdns.service</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> &gt; /etc/systemd/system/mosdns.service &lt;&lt;<span class="hljs-string">&#x27;EOF&#x27;</span><br>[Unit]<br>Description=mosdns daemon, DNS server.<br>After=network-online.target<br><br>[Service]<br>Type=simple<br>Restart=always<br>ExecStart=/usr/local/bin/mosdns start -c /etc/mosdns/config.yaml -d /etc/mosdns<br><br>[Install]<br>WantedBy=multi-user.target<br>EOF<br></code></pre></td></tr></table></figure><h3 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl daemon-reload<br>systemctl <span class="hljs-built_in">enable</span> mosdns<br>systemctl start mosdns<br>systemctl restart mosdns<br>systemctl status mosdns<br>journalctl -fu mosdns  <span class="hljs-comment"># 查看实时日志</span><br><span class="hljs-built_in">tail</span> -f /etc/mosdns/mosdns.log<br></code></pre></td></tr></table></figure><p><strong>可以实现白名单使用国内DNS，白名单外使用国外DNS，如果使用国外CDN返回的结果为国内IP，则使用国内DNS重新解析，避免DNS泄露与污染。</strong></p><p>国外版mosdns config.yaml，国内版mosdns只需要将国外的DNS地址换成可用的纯净的DNS地址即可。推荐doh.apad.pro和dns.66a.net。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">log:</span><br>  <span class="hljs-attr">level:</span> <span class="hljs-string">error</span><br>  <span class="hljs-attr">production:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">file:</span> <span class="hljs-string">&quot;./mosdns.log&quot;</span><br><br><span class="hljs-attr">plugins:</span><br><span class="hljs-comment"># 定期更新中国域名列表到配置目录</span><br><span class="hljs-comment"># https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/direct-list.txt</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">cn_domainList</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;domain_set&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">files:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/direct-list.txt&quot;</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/custom_for_cndns.txt&quot;</span><br><br><span class="hljs-comment"># https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">block_domains</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;domain_set&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">files:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/anti-ad-domains.txt&quot;</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/custom_black_list.txt&quot;</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">custom_world_list</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;domain_set&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">files:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/custom_for_worlddns.txt&quot;</span><br>        <br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">jp_edns_list</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;domain_set&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">files:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/custom_for_jp_edns.txt&quot;</span><br>        <br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">us_edns_list</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;domain_set&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">files:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/custom_for_us_edns.txt&quot;</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">ddnslist</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;domain_set&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">files:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/ddnslist.txt&quot;</span><br><br><span class="hljs-comment"># 定期更新IP列表到配置目录</span><br><span class="hljs-comment"># https://raw.githubusercontent.com/Loyalsoldier/geoip/release/text/cn.txt</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">cn_ipList</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;ip_set&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">files:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/cn.txt&quot;</span><br><br><span class="hljs-comment"># google support ECS </span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">ecs_DNS</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;forward&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">upstreams:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">google_doh</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;https://dns.google/dns-query&quot;</span><br>          <span class="hljs-comment">#dial_addr: &quot;8.8.8.8&quot;</span><br>          <span class="hljs-attr">bootstrap:</span> <span class="hljs-string">&quot;8.8.8.8&quot;</span><br>          <span class="hljs-comment">#socks5: &quot;127.0.0.1:7890&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">google_dot</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;tls://dns.google&quot;</span><br>          <span class="hljs-comment">#dial_addr: &quot;8.8.8.8&quot;</span><br>          <span class="hljs-attr">bootstrap:</span> <span class="hljs-string">&quot;8.8.8.8&quot;</span><br>          <span class="hljs-comment">#socks5: &quot;127.0.0.1:7890&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br><span class="hljs-comment"># 国外DNS</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">world_DNS</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;forward&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">concurrent:</span> <span class="hljs-number">2</span><br>      <span class="hljs-attr">upstreams:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">cloudflare_doh</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;https://one.one.one.one/dns-query&quot;</span><br>          <span class="hljs-attr">dial_addr:</span> <span class="hljs-string">&quot;1.0.0.1&quot;</span><br>          <span class="hljs-attr">bootstrap:</span> <span class="hljs-string">&quot;8.8.8.8&quot;</span><br>          <span class="hljs-comment">#socks5: &quot;127.0.0.1:7890&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">quad9_dot</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;tls://dns10.quad9.net&quot;</span><br>          <span class="hljs-attr">bootstrap:</span> <span class="hljs-string">&quot;8.8.8.8&quot;</span><br>          <span class="hljs-comment">#socks5: &quot;127.0.0.1:7890&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">opendns_doh</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;https://doh.opendns.com/dns-query&quot;</span><br>          <span class="hljs-attr">bootstrap:</span> <span class="hljs-string">&quot;8.8.8.8&quot;</span><br>          <span class="hljs-comment">#socks5: &quot;127.0.0.1:7890&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br><span class="hljs-comment"># 国内DNS</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">cn_DNS</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;forward&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">concurrent:</span> <span class="hljs-number">2</span><br>      <span class="hljs-comment"># 为什么不使用阿里腾讯114等知名DNS？因为它们是根据请求者IP来返回解析结果。</span><br>      <span class="hljs-attr">upstreams:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">OneDNS</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;udp://52.80.52.52&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">CNNIC_SDNS</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;udp://1.2.4.8&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">OneDNS_dot</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;tls://dot-pure.onedns.net&quot;</span><br>          <span class="hljs-attr">bootstrap:</span> <span class="hljs-string">&quot;223.6.6.6&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">DNSπ</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;tls://101.226.4.6&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br><span class="hljs-comment"># 国内mosdns请使用DoT、DoH等加密方式</span><br><span class="hljs-comment">#        - tag: dnspod_doh</span><br><span class="hljs-comment">#          addr: &quot;https://doh.pub/dns-query&quot;</span><br><span class="hljs-comment">#          bootstrap: &quot;223.6.6.6&quot;</span><br><span class="hljs-comment">#          enable_pipeline: true</span><br><span class="hljs-comment">#          insecure_skip_verify: false</span><br><br><span class="hljs-comment">#        - tag: ali_dot</span><br><span class="hljs-comment">#          addr: &quot;tls://223.5.5.5&quot;</span><br><span class="hljs-comment">#          insecure_skip_verify: false</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">cn_fallback_DNS</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;forward&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">concurrent:</span> <span class="hljs-number">2</span><br>      <span class="hljs-attr">upstreams:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">dnspod_doh</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;https://doh.pub/dns-query&quot;</span><br>          <span class="hljs-attr">bootstrap:</span> <span class="hljs-string">&quot;223.6.6.6&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">360_doh</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;https://doh.360.cn/dns-query&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">ali_dot</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;tls://223.5.5.5&quot;</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">easymosdns_doh</span><br>          <span class="hljs-attr">addr:</span> <span class="hljs-string">&quot;https://doh.apad.pro/dns-query&quot;</span><br>          <span class="hljs-attr">bootstrap:</span> <span class="hljs-string">&quot;223.6.6.6&quot;</span><br>          <span class="hljs-attr">enable_pipeline:</span> <span class="hljs-literal">true</span><br>          <span class="hljs-attr">insecure_skip_verify:</span> <span class="hljs-literal">false</span><br><br><span class="hljs-comment"># cache</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">cache</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;cache&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">size:</span> <span class="hljs-number">65535</span><br>      <span class="hljs-attr">dump_file:</span> <span class="hljs-string">&quot;./cache.dump&quot;</span><br>      <span class="hljs-attr">lazy_cache_ttl:</span> <span class="hljs-number">86400</span><br>      <span class="hljs-attr">dump_interval:</span> <span class="hljs-number">600</span><br><br><span class="hljs-comment"># hosts</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">custom_hosts</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;hosts&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">files:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./rules/hosts&quot;</span><br><br><span class="hljs-comment"># 修改 TTL</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">modify_ddns_ttl</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">ttl</span> <span class="hljs-number">1</span><span class="hljs-number">-5</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">modify_ttl</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">ttl</span> <span class="hljs-number">5</span><span class="hljs-number">-10</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">modify_black_ttl</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">ttl</span> <span class="hljs-number">600</span><span class="hljs-number">-3600</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">modify_resp_ttl</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">qname</span> <span class="hljs-string">$ddnslist</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">mark</span> <span class="hljs-number">123</span>   <span class="hljs-comment"># 123为q-ddns ，456为q-bloke</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">qname</span> <span class="hljs-string">$block_domains</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">mark</span> <span class="hljs-number">456</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">mark</span> <span class="hljs-number">123</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_ddns_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">mark</span> <span class="hljs-number">456</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_black_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;!mark 123&quot;</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;!mark 456&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_ttl</span><br><br><span class="hljs-comment"># 国外解析</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">world_resolve</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">$world_DNS</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_resp_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">query_summary</span> <span class="hljs-string">world_DNS</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">accept</span><br><br><span class="hljs-comment"># 国内解析</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">cn_resolve</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">ecs</span> <span class="hljs-number">123.112</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">$cn_DNS</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_resp_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">query_summary</span> <span class="hljs-string">cn_DNS</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">cn_fallback_resolve</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">ecs</span> <span class="hljs-number">123.112</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">$cn_fallback_DNS</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_resp_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">query_summary</span> <span class="hljs-string">cn_fallback_DNS</span><br><br><span class="hljs-comment"># ecs_for_jp github</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">ecs_jp_resolve</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">ecs</span> <span class="hljs-number">1.5</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">$ecs_DNS</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_resp_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">query_summary</span> <span class="hljs-string">ecs_jp_resolve</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">accept</span><br><br><span class="hljs-comment"># ecs_for_us</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">ecs_us_resolve</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">ecs</span> <span class="hljs-number">4.80</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">$ecs_DNS</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_resp_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">query_summary</span> <span class="hljs-string">ecs_us_resolve</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">accept</span><br><br><span class="hljs-comment"># ecs_for_cn</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">ecs_cn_resolve</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">ecs</span> <span class="hljs-number">123.112</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">$ecs_DNS</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_resp_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">query_summary</span> <span class="hljs-string">ecs_cn_resolve</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">accept</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">match_block_domain</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">black_hole</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span> <span class="hljs-string">::1</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">query_summary</span> <span class="hljs-string">block_domains</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">custom_hosts_resp</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_resp_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">query_summary</span> <span class="hljs-string">custom_hosts</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">accept</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">hit_cache_resp</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">modify_resp_ttl</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">query_summary</span> <span class="hljs-string">hit_cache</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">accept</span><br><br><span class="hljs-comment"># 拒绝</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">query_is_reject</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;qname $block_domains&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">match_block_domain</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">qtype</span> <span class="hljs-number">65</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">reject</span> <span class="hljs-number">5</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">accept</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">fallback_world</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;fallback&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">primary:</span> <span class="hljs-string">ecs_cn_resolve</span>    <span class="hljs-comment"># 主可执行插件的 tag</span><br>      <span class="hljs-attr">secondary:</span> <span class="hljs-string">world_resolve</span>   <span class="hljs-comment"># 副可执行插件的 tag</span><br>      <span class="hljs-attr">threshold:</span> <span class="hljs-number">1500</span>             <span class="hljs-comment"># 无响应回滚阈值。单位毫秒。默认 500 。</span><br>      <span class="hljs-attr">always_standby:</span> <span class="hljs-literal">false</span>      <span class="hljs-comment"># 副可执行插件始终待命。 </span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">fallback_cn</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;fallback&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">primary:</span> <span class="hljs-string">cn_resolve</span>             <span class="hljs-comment"># 主可执行插件的 tag</span><br>      <span class="hljs-attr">secondary:</span> <span class="hljs-string">cn_fallback_resolve</span>  <span class="hljs-comment"># 副可执行插件的 tag</span><br>      <span class="hljs-attr">threshold:</span> <span class="hljs-number">2000</span>                 <span class="hljs-comment"># 无响应回滚阈值。单位毫秒。默认 500 。</span><br>      <span class="hljs-attr">always_standby:</span> <span class="hljs-literal">false</span>           <span class="hljs-comment"># 副可执行插件始终待命。 </span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">fallback_cn_seq</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">$fallback_cn</span><br>      <span class="hljs-comment">#- matches: &quot;has_wanted_ans&quot;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;resp_ip $cn_ipList&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">accept</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">fallback_world_seq</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">$fallback_world</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">accept</span><br><br><span class="hljs-comment"># 解析流程</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">resolve_process</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;sequence&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">prefer_ipv4</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">$custom_hosts</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">goto</span> <span class="hljs-string">custom_hosts_resp</span><br><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;!qname $ddnslist&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">$cache</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;has_resp&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">goto</span> <span class="hljs-string">hit_cache_resp</span><br><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;qname $jp_edns_list || github.com&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">ecs_jp_resolve</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;qname $us_edns_list&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">ecs_us_resolve</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;qname $custom_world_list || $ddnslist&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">goto</span> <span class="hljs-string">fallback_world_seq</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">query_is_reject</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">matches:</span> <span class="hljs-string">&quot;qname $cn_domainList&quot;</span><br>        <span class="hljs-attr">exec:</span> <span class="hljs-string">jump</span> <span class="hljs-string">fallback_cn_seq</span><br> <br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">exec:</span> <span class="hljs-string">goto</span> <span class="hljs-string">fallback_world_seq</span><br><br><span class="hljs-comment"># DNS服务</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">udp_server</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;udp_server&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">entry:</span> <span class="hljs-string">resolve_process</span><br>      <span class="hljs-attr">listen:</span> <span class="hljs-string">&quot;127.0.0.1:53&quot;</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">tcp_server</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;tcp_server&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">entry:</span> <span class="hljs-string">resolve_process</span><br>      <span class="hljs-attr">listen:</span> <span class="hljs-string">&quot;127.0.0.1:53&quot;</span><br>        <span class="hljs-comment">#cert: &quot;&quot; # 配置 cert 和 key 后会启用 TLS (DoT),别忘记修改为853端口。</span><br>        <span class="hljs-comment">#key:  &quot;&quot; </span><br>        <span class="hljs-comment">#idle_timeout: 10       # 空连接超时。单位秒。默认 10。</span><br><br><span class="hljs-comment">#  - tag: quic_server</span><br><span class="hljs-comment">#    type: &quot;quic_server&quot;</span><br><span class="hljs-comment">#    args:</span><br><span class="hljs-comment">#      entry: resolve_process  # 可执行插件的 tag。</span><br><span class="hljs-comment">#      listen: &quot;0.0.0.0:853&quot; # 监听地址。</span><br><span class="hljs-comment">#      cert: &quot;&quot;</span><br><span class="hljs-comment">#      key:  &quot;&quot; </span><br><span class="hljs-comment">#      idle_timeout: 30       # 空连接超时。单位秒。默认 30。</span><br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tag:</span> <span class="hljs-string">server_http</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">&quot;http_server&quot;</span><br>    <span class="hljs-attr">args:</span><br>      <span class="hljs-attr">entries:</span>                 <span class="hljs-comment"># []extry</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-attr">path:</span> <span class="hljs-string">/dns-query</span>     <span class="hljs-comment"># 本路径执行</span><br>          <span class="hljs-attr">exec:</span> <span class="hljs-string">resolve_process</span> <span class="hljs-comment"># 可执行插件的 tag。</span><br>      <span class="hljs-attr">src_ip_header:</span> <span class="hljs-string">&quot;X-Real-IP&quot;</span>  <span class="hljs-comment"># 从 HTTP 头获取用户 IP。</span><br>      <span class="hljs-attr">listen:</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span><span class="hljs-string">:4588</span> <span class="hljs-comment"># 监听地址。</span><br>      <span class="hljs-attr">cert:</span> <span class="hljs-string">&quot;&quot;</span> <span class="hljs-comment"># 留空 cert 和 key 后会禁用 TLS。 </span><br>      <span class="hljs-attr">key:</span> <span class="hljs-string">&quot;&quot;</span><br>      <span class="hljs-attr">idle_timeout:</span> <span class="hljs-number">10</span> <span class="hljs-comment"># 空连接超时。单位秒。默认 30。</span><br></code></pre></td></tr></table></figure><p>建议国内域名解析使用国内服务器进行解析，否则有时就算加上edns解析出来还是国外IP。</p><p>国外mosdns和国内mosdns配置的区别在于，国外的IP使用国内知名DNS解析国内域名有可能会获取到国外的节点，会使访问速度变慢，所以国外mosdns要使用非知名DNS解析来获取国内域名IP。</p><p>建议使用国内mosdns（可以使用DOT）和国外mosdns（只能使用DOH）搭配使用，国内的负责解析国内域名（速度快），国外的负责无污染的域名解析（安全）。</p><p>如果<strong>本地搭建的话请使用DoT、DoH等加密方式</strong>。</p><blockquote><p>PS. DoT 853端口活了不到2个小时，建议拿国内服务器中转。<br>安卓的私人DNS需要使用DoT。</p></blockquote><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-comment">#listen 80;</span><br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> ssl http2;<br>    <span class="hljs-attribute">server_name</span> domain; <span class="hljs-comment">#多个域名中间空格隔开</span><br>    <span class="hljs-attribute">ssl_certificate</span>        crt; <br>    <span class="hljs-attribute">ssl_certificate_key</span>    key;<br><br>   <span class="hljs-section">location</span> /dns-query &#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:4588/dns-query;<br>        <span class="hljs-attribute">proxy_set_header</span>  X-Real-IP  <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">access_log</span> /www/wwwlogs/dns-query.log;<br>        <span class="hljs-attribute">error_log</span> /www/wwwlogs/dns-query.err.log;<br>   &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="域名匹配规则"><a href="#域名匹配规则" class="headerlink" title="域名匹配规则"></a>域名匹配规则</h3><blockquote><p>  以 <code>domain:</code> 开头，域匹配。e.g: <code>domain:google.com</code> 会匹配自身 <code>google.com</code>，以及其子域名 <code>www.google.com</code>, <code>maps.l.google.com</code> 等。</p><p>  以 <code>full:</code> 开头，完整匹配。e.g: <code>full:google.com</code> 只会匹配自身。</p><p>  以 <code>keyword:</code> 开头，关键字匹配。e.g: <code>keyword:google.com</code> 会匹配包含这个字段的域名，如 <code>google.com.hk</code>, <code>www.google.com.hk</code>。</p><p>  以 <code>regexp:</code> 开头，正则匹配(<a href="https://github.com/google/re2/wiki/Syntax">Golang 标准</a>)。e.g: <code>regexp:.+\.google\.com$</code>。</p><p>  匹配方式按如下顺序生效: <code>full</code> &gt; <code>domain</code> &gt; <code>regexp</code> &gt; <code>keyword</code>。</p><p>  性能:</p><p>  <code>domain</code> 和 <code>full</code> 匹配使用 HashMap，复杂度 O(1)。每 1w 域名约占用 1M 内存。</p><p>  <code>keyword</code> 和 <code>regexp</code> 匹配需遍历，复杂度 O(n)。</p></blockquote><blockquote><p>PS. tun模式tpclash会自动开启转发</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">echo</span> 1 &gt; /proc/sys/net/ipv4/ip_forward<br></code></pre></td></tr></table></figure><h2 id="3-效果"><a href="#3-效果" class="headerlink" title="3. 效果"></a>3. 效果</h2><p><a href="https://browserleaks.com/dns">https://browserleaks.com/dns</a></p><p><a href="https://www.dnsleaktest.com/">https://www.dnsleaktest.com/</a></p><p><a href="https://ipleak.net/">https://ipleak.net/</a></p><p><img src="https://img.shyi.org/images/75fab04e4a839f9366ccd9ea7bb3959f.png"></p><p><img src="https://img.shyi.org/images/eb6770419b95a43a2458ff7e92f95782.png"></p><h2 id="4-国内外常用DNS"><a href="#4-国内外常用DNS" class="headerlink" title="4. 国内外常用DNS"></a>4. 国内外常用DNS</h2><h3 id="国内"><a href="#国内" class="headerlink" title="国内"></a>国内</h3><h4 id="腾讯-DNS"><a href="#腾讯-DNS" class="headerlink" title="腾讯 DNS"></a>腾讯 DNS</h4><p>支持 ECS </p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">119.29</span><span class="hljs-number">.29</span><span class="hljs-number">.29</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//1.12.12.12/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//120.53.53.53/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//doh.pub/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//sm2.doh.pub/dns-query (国密)</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//dot.pub</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//1.12.12.12</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//120.53.53.53</span><br></code></pre></td></tr></table></figure><h4 id="阿里-DNS"><a href="#阿里-DNS" class="headerlink" title="阿里 DNS"></a>阿里 DNS</h4><p>支持 ECS </p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">223.5</span><span class="hljs-number">.5</span><span class="hljs-number">.5</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">223.6</span><span class="hljs-number">.6</span><span class="hljs-number">.6</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//223.5.5.5/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//223.6.6.6/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//dns.alidns.com/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//dns.alidns.com</span><br></code></pre></td></tr></table></figure><h4 id="CNNIC-SDNS"><a href="#CNNIC-SDNS" class="headerlink" title="CNNIC SDNS"></a>CNNIC SDNS</h4><p>Only UDP</p><p>国外服务器解析得到国内IP</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">IPv4</span>: <span class="hljs-number">1.2.4.8</span><br></code></pre></td></tr></table></figure><h4 id="DNS-派"><a href="#DNS-派" class="headerlink" title="DNS 派"></a>DNS 派</h4><p>支持ECS、DoT</p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">101.226</span><span class="hljs-number">.4</span><span class="hljs-number">.6</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">218.30</span><span class="hljs-number">.118</span><span class="hljs-number">.6</span>  (电信/移动/铁通)<br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">123.125</span><span class="hljs-number">.81</span><span class="hljs-number">.6</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">140.207</span><span class="hljs-number">.198</span><span class="hljs-number">.6</span>  (联通)<br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//101.226.4.6</span><br></code></pre></td></tr></table></figure><h4 id="oneDNS"><a href="#oneDNS" class="headerlink" title="oneDNS"></a>oneDNS</h4><p><a href="https://www.onedns.net/personal">https://www.onedns.net/personal</a></p><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs nix"><span class="hljs-params">IPv4:</span> <span class="hljs-number">52.80</span>.<span class="hljs-number">66.66</span><br><span class="hljs-params">IPv4:</span> <span class="hljs-number">52.80</span>.<span class="hljs-number">66.66</span><br><span class="hljs-params">IPv4:</span> <span class="hljs-number">117.50</span>.<span class="hljs-number">11.11</span>  (不稳定)<br><span class="hljs-params">DoT:</span> tls:<span class="hljs-symbol">//dot-pure.onedns.net</span>  (纯享版)<br><span class="hljs-params">DoT:</span> tls:<span class="hljs-symbol">//dot.onedns.net</span>  (拦截版)<br><span class="hljs-params">DoH:</span> https:<span class="hljs-symbol">//doh.onedns.net/dns-query</span>  <span class="hljs-comment"># DoH测试无法使用</span><br><span class="hljs-params">DoH:</span> https:<span class="hljs-symbol">//doh-pure.onedns.net/dns-query</span>  <span class="hljs-comment"># DoH测试无法使用</span><br></code></pre></td></tr></table></figure><h4 id="EasyMosdns"><a href="#EasyMosdns" class="headerlink" title="EasyMosdns"></a>EasyMosdns</h4><p><a href="https://apad.pro/dns-doh/">https://apad.pro/dns-doh/</a></p><p>【境内域名】使用AliDNS本地查询，部分域名使用DNSPod补充查询</p><p>【境外域名】使用GoogleDNS与CloudflareDNS通过加密隧道远程查询</p><p>无污染、支持EDNS，解析精准度极高，IP分流远程加密查询上游DNS，保护隐私，境外域名拦截垃圾广告，境内域名无拦截，多级DNS缓存，加速全球域名查询响应。</p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//doh.apad.pro/dns-query</span><br></code></pre></td></tr></table></figure><h3 id="国外"><a href="#国外" class="headerlink" title="国外"></a>国外</h3><h4 id="Cloudflare-DNS"><a href="#Cloudflare-DNS" class="headerlink" title="Cloudflare DNS"></a>Cloudflare DNS</h4><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">1.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">1.1</span><span class="hljs-number">.1</span><span class="hljs-number">.1</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//1.1.1.1/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//1.0.0.1/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//cloudflare-dns.com/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//one.one.one.one/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//1.1.1.1</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//1.0.0.1</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//one.one.one.one</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//1dot1dot1dot1.cloudflare-dns.com</span><br></code></pre></td></tr></table></figure><h4 id="Google-DNS"><a href="#Google-DNS" class="headerlink" title="Google DNS"></a>Google DNS</h4><p>支持EDNS</p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">8.8</span><span class="hljs-number">.8</span><span class="hljs-number">.8</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">8.8</span><span class="hljs-number">.4</span><span class="hljs-number">.4</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//8.8.8.8/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//8.8.4.4/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//dns.google/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//8.8.8.8</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//8.8.4.4</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//dns.google</span><br></code></pre></td></tr></table></figure><h4 id="IBM-Quad9"><a href="#IBM-Quad9" class="headerlink" title="IBM Quad9"></a>IBM Quad9</h4><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-meta">#推荐：Malware Blocking、DNSSEC Validation（这是最典型的配置）</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">9.9</span><span class="hljs-number">.9</span><span class="hljs-number">.9</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">149.112</span><span class="hljs-number">.112</span><span class="hljs-number">.112</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//dns.quad9.net/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//9.9.9.9</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//dns.quad9.net</span><br><br><span class="hljs-meta">#使用 ECS 保护：恶意软件阻止、DNSSEC 验证、启用 ECS</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">9.9</span><span class="hljs-number">.9</span><span class="hljs-number">.11</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">149.112</span><span class="hljs-number">.112</span><span class="hljs-number">.11</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//dns11.quad9.net/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//9.9.9.11</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//dns11.quad9.net</span><br><br><span class="hljs-meta">#不安全：没有恶意软件阻止，没有 DNSSEC 验证（仅限专家！）</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">9.9</span><span class="hljs-number">.9</span><span class="hljs-number">.10</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">149.112</span><span class="hljs-number">.112</span><span class="hljs-number">.10</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//dns10.quad9.net/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//9.9.9.10</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//dns10.quad9.net</span><br></code></pre></td></tr></table></figure><h4 id="OpenDNS"><a href="#OpenDNS" class="headerlink" title="OpenDNS"></a>OpenDNS</h4><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">208.67</span><span class="hljs-number">.222</span><span class="hljs-number">.222</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">208.67</span><span class="hljs-number">.220</span><span class="hljs-number">.220</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//doh.opendns.com/dns-query</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//doh.familyshield.opendns.com/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//208.67.222.222</span><br></code></pre></td></tr></table></figure><h4 id="AdGuard-DNS"><a href="#AdGuard-DNS" class="headerlink" title="AdGuard DNS"></a>AdGuard DNS</h4><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-meta">#无过滤，不拦截</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">94.140</span><span class="hljs-number">.14</span><span class="hljs-number">.140</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">94.140</span><span class="hljs-number">.15</span><span class="hljs-number">.15</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//dns-unfiltered.adguard.com/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//dns-unfiltered.adguard.com</span><br><span class="hljs-symbol">DoQ:</span> quic:<span class="hljs-comment">//dns-unfiltered.adguard.com</span><br> <br><span class="hljs-meta">#过滤广告和跟踪</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">94.140</span><span class="hljs-number">.14</span><span class="hljs-number">.14</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">94.140</span><span class="hljs-number">.15</span><span class="hljs-number">.15</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//dns.adguard.com/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//dns.adguard.com</span><br><span class="hljs-symbol">DoQ:</span> quic:<span class="hljs-comment">//dns.adguard.com</span><br> <br><span class="hljs-meta">#家庭过滤：开启安全搜索和安全模式选项、拦截成人内容，并且屏蔽广告和跟踪器</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">94.140</span><span class="hljs-number">.14</span><span class="hljs-number">.15</span><br><span class="hljs-symbol">IPv4:</span> <span class="hljs-number">94.140</span><span class="hljs-number">.15</span><span class="hljs-number">.16</span><br><span class="hljs-symbol">DoH:</span> https:<span class="hljs-comment">//dns-family.adguard.com/dns-query</span><br><span class="hljs-symbol">DoT:</span> tls:<span class="hljs-comment">//dns-family.adguard.com</span><br><span class="hljs-symbol">DoQ:</span> quic:<span class="hljs-comment">//dns-family.adguard.com</span><br></code></pre></td></tr></table></figure><h2 id="5-参考或引用"><a href="#5-参考或引用" class="headerlink" title="5. 参考或引用"></a>5. 参考或引用</h2><blockquote><p>  <a href="https://irine-sistiana.gitbook.io/mosdns-wiki/mosdns-v5">https://irine-sistiana.gitbook.io/mosdns-wiki/mosdns-v5</a></p><p>  <a href="https://blog.0ne.day/i/mosdns-dns-c-0KfHuTo35/">https://blog.0ne.day/i/mosdns-dns-c-0KfHuTo35/</a></p><p>  <a href="https://hgl2.com/2023/install-mosdns-in-macos/">https://hgl2.com/2023/install-mosdns-in-macos/</a></p><p>  <a href="https://github.com/Loyalsoldier/v2ray-rules-dat/tree/release">https://github.com/Loyalsoldier/v2ray-rules-dat/tree/release</a></p><p>  <a href="https://github.com/privacy-protection-tools/anti-AD">https://github.com/privacy-protection-tools/anti-AD</a></p><p>  <a href="https://github.com/Loyalsoldier/geoip/tree/release/text">https://github.com/Loyalsoldier/geoip/tree/release/text</a></p><p>  <a href="https://github.com/pmkol/easymosdns">https://github.com/pmkol/easymosdns</a></p><p>  <a href="https://ip.cn/dns.html">https://ip.cn/dns.html</a></p><p>  <a href="https://www.cccitu.com/2205354.html">https://www.cccitu.com/2205354.html</a></p><p>  <a href="https://github.com/kkkgo/PaoPaoDNS">https://github.com/kkkgo/PaoPaoDNS</a></p><p>  <a href="https://github.com/pmkol/easymosdns">https://github.com/pmkol/easymosdns</a></p></blockquote>]]></content>
    
    
    <summary type="html">使用mosdns和tpclash实现dns防泄露和dns防污染</summary>
    
    
    
    <category term="DNS" scheme="https://shyi.org/categories/DNS/"/>
    
    
    <category term="mosdns" scheme="https://shyi.org/tags/mosdns/"/>
    
    <category term="tpclash" scheme="https://shyi.org/tags/tpclash/"/>
    
    <category term="DNS" scheme="https://shyi.org/tags/DNS/"/>
    
  </entry>
  
  <entry>
    <title>安卓微信聊天记录备份本地硬盘</title>
    <link href="https://shyi.org/posts/43259/"/>
    <id>https://shyi.org/posts/43259/</id>
    <published>2023-11-02T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<p>当前安卓微信版本8.0.40</p><p>手机断网，使用系统自带的备份微信。一定要断网。</p><p>导入备份到电脑，MIUI的在MIUI&#x2F;backup&#x2F;AllBackup&#x2F;备份的日期&#x2F; 下</p><p>使用winhex将（不包含）41 4E 前的数据删除，然后保存</p><p>文件链接 <a href="https://www.mediafire.com/folder/c6xs0a8yd1pda/wechat_history">mediafire</a>, <a href="https://mega.nz/folder/439m2TCR#T2ZL_g8b_LUI0JIbeIv8zg">mega</a></p><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs mipsasm"><span class="hljs-symbol">wechat_history:</span>.<br>│  abe.<span class="hljs-keyword">jar </span> <span class="hljs-comment"># 解包工具</span><br>│  <span class="hljs-keyword">android-wechat-bak.md </span> <span class="hljs-comment"># wechat-backup作者blog，可以参考</span><br>│  DB.<span class="hljs-keyword">Browser.for.SQLite-3.12.2-win64.zip </span> <span class="hljs-comment"># SQLite数据库软件，可以查看数据库内容</span><br>│  <span class="hljs-keyword">jdk-11.0.20_windows-x64_bin.exe </span> <span class="hljs-comment"># jdk11</span><br>│  WinHex_20.<span class="hljs-number">8</span>_<span class="hljs-built_in">SR</span><span class="hljs-number">-4</span>_Single.exe  <span class="hljs-comment"># 用来删除41 4E 前的数据</span><br>│<br>└─wechat-<span class="hljs-keyword">backup-v1.0.0 </span> <span class="hljs-comment"># 创建web用来查看微信数据，在最下方的github里面下载</span><br>      wechat-<span class="hljs-keyword">backup_arm64_v1.0.0.tar.gz</span><br><span class="hljs-keyword"></span>      wechat-<span class="hljs-keyword">backup_linux_v1.0.0.tar.gz</span><br><span class="hljs-keyword"></span>      wechat-<span class="hljs-keyword">backup_windows_v1.0.0.tar.gz</span><br></code></pre></td></tr></table></figure><p>安装java 11、下载abe.jar</p><p>然后执行 <code>java -jar abe.jar unpack 微信.bak weixin.tar</code></p><p>解压weixin.tar</p><ol><li><p>收集下面这些数据，然后放在同一个文件夹下比如weixin_run：</p><ul><li>image2 文件夹：里面存放着所有的微信聊天图片，位置在：apps&#x2F;com.tencent.mm&#x2F;r&#x2F;MicroMsg&#x2F;[32位字母]&#x2F;image2</li><li>voice2 文件夹：里面存放着所有的微信语音，位置在：apps&#x2F;com.tencent.mm&#x2F;r&#x2F;MicroMsg&#x2F;[32位字母]&#x2F;voice2</li><li>video 文件夹：里面存放着所有的微信视频，位置在：apps&#x2F;com.tencent.mm&#x2F;r&#x2F;MicroMsg&#x2F;[32位字母]&#x2F;video</li><li>avatar 文件夹：里面存放着所有的微信头像，位置在：apps&#x2F;com.tencent.mm&#x2F;r&#x2F;MicroMsg&#x2F;[32位字母]&#x2F;avatar</li><li>Download 文件夹: 微信的聊天发送的文件存放在这里，位置在：&#x2F;sdcard&#x2F;Android&#x2F;data&#x2F;com.tencent.mm&#x2F;MicroMsg&#x2F;Download</li><li>EnMicroMsg.db: 微信的数据库文件，位置在：apps&#x2F;com.tencent.mm&#x2F;r&#x2F;MicroMsg&#x2F;[32位字母]&#x2F;EnMicroMsg.db</li><li>WxFileIndex.db: 微信的文件索引数据库文件，位置在：apps&#x2F;com.tencent.mm&#x2F;r&#x2F;MicroMsg&#x2F;[32位字母]&#x2F;WxFileIndex.db</li></ul></li></ol><figure class="highlight avrasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs avrasm"><span class="hljs-symbol">weixin_run:</span>.<br>│  EnMicroMsg<span class="hljs-meta">.db</span> 替换为-&gt; EnMicroMsg_plain<span class="hljs-meta">.db</span><br>│  WxFileIndex<span class="hljs-meta">.db</span> 替换为-&gt; WxFileIndex_plain<span class="hljs-meta">.db</span><br>│─image2 <br>│─voice2 <br>│─video<br>│─avatar<br>└─Download<br></code></pre></td></tr></table></figure><blockquote><p>  最后需要将EnMicroMsg.db和WxFileIndex.db解码成EnMicroMsg_plain.db和WxFileIndex_plain.db，删除原来的就可以了</p></blockquote><ol start="2"><li><p>获取DB访问密码</p><p><strong>MD5(IMEI+auth_uin)</strong> 前 7 位即是访问密码，如果是大写的要转换成小写字母，不要+号</p><p><strong>auth_uin</strong>在 apps&#x2F;com.tencent.mm&#x2F;sp&#x2F;auth_info_key_prefs.xml</p><p>IMEI 可以在设置里看，MIUI的使用<strong>1234567890ABCDEF</strong>代替</p></li><li><p>使用docker解密数据库和转码音乐（可以使用虚拟机或者其他Linux）</p></li></ol><p>​解密数据库</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run --<span class="hljs-built_in">rm</span> -v /home/user/weixin:/wcdb greycodee/wcdb-sqlcipher -f WxFileIndex.db -k 密码<br>docker run --<span class="hljs-built_in">rm</span> -v /home/user/weixin:/wcdb greycodee/wcdb-sqlcipher -f EnMicroMsg.db -k 密码<br></code></pre></td></tr></table></figure><p>​转码音乐</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run --<span class="hljs-built_in">rm</span> -v /home/user/weixin/voice2:/media greycodee/silkv3-decoder<br></code></pre></td></tr></table></figure><ol start="4"><li>搞定，运行 <code>wechat-backup.exe -f weixin_run</code></li></ol><blockquote><p>  <a href="https://www.oracle.com/de/java/technologies/javase/jdk11-archive-downloads.html">JDK 11</a></p><p>  <a href="https://github.com/greycodee/wechat-backup">wechat-backup</a></p><p>  <a href="https://greycode.top/posts/android-wechat-bak">解密安卓微信聊天信息存储</a></p><p>  <a href="https://github.com/nelenkov/android-backup-extractor">abe</a></p></blockquote>]]></content>
    
    
    <summary type="html">微信聊天记录持久化备份本地硬盘，释放手机存储空间。</summary>
    
    
    
    
    <category term="Docker" scheme="https://shyi.org/tags/Docker/"/>
    
    <category term="Wechat" scheme="https://shyi.org/tags/Wechat/"/>
    
  </entry>
  
  <entry>
    <title>kms</title>
    <link href="https://shyi.org/posts/43292/"/>
    <id>https://shyi.org/posts/43292/</id>
    <published>2023-08-17T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.946Z</updated>
    
    <content type="html"><![CDATA[<p>同样效果的开源项目：#Windows激活</p><blockquote><p>  <a href="https://github.com/zbezj/HEU_KMS_Activator">https://github.com/zbezj/HEU_KMS_Activator</a></p><p>  <a href="https://github.com/TheMCHK/HWIDGEN">https://github.com/TheMCHK/HWIDGEN</a></p></blockquote><h2 id="kms服务器列表："><a href="#kms服务器列表：" class="headerlink" title="kms服务器列表："></a>kms服务器列表：</h2><p><a href="https://www.coolhub.top/tech-articles/kms_list.html">https://www.coolhub.top/tech-articles/kms_list.html</a></p><p><a href="https://www.kms.pub/rank.html">https://www.kms.pub/rank.html</a></p><h2 id="kms激活检测："><a href="#kms激活检测：" class="headerlink" title="kms激活检测："></a>kms激活检测：</h2><p><a href="https://www.kms.pub/check.html">https://www.kms.pub/check.html</a></p><h2 id="kms秘钥："><a href="#kms秘钥：" class="headerlink" title="kms秘钥："></a>kms秘钥：</h2><p><a href="https://docs.microsoft.com/en-us/windows-server/get-started/kmsclientkeys">https://docs.microsoft.com/en-us/windows-server/get-started/kmsclientkeys</a></p><p>搭建kms服务器：</p><p><a href="https://github.com/SystemRage/py-kms">https://github.com/SystemRage/py-kms</a></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">py-kms:</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;pykmsorg/py-kms:latest&#x27;</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">&#x27;py-kms&#x27;</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">&#x27;unless-stopped&#x27;</span><br>    <span class="hljs-comment"># user: &#x27;1000:1000&#x27;</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;1688:1688&#x27;</span><br></code></pre></td></tr></table></figure><p><a href="https://github.com/Wind4/vlmcsd">https://github.com/Wind4/vlmcsd</a></p><p><a href="https://github.com/dnomd343/kms-server">https://github.com/dnomd343/kms-server</a></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">kms-server:</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">&#x27;unless-stopped&#x27;</span><br>    <span class="hljs-attr">network_mode:</span> <span class="hljs-string">&#x27;host&#x27;</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;dnomd343/kms-server:latest&#x27;</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">&#x27;kms-server&#x27;</span><br>    <span class="hljs-comment"># user: &#x27;1000:1000&#x27;</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;KMS_PORT=1688&#x27;</span>  <span class="hljs-comment"># 自定义端口</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;HTTP_PORT=1689&#x27;</span>  <span class="hljs-comment"># 自定义端口</span><br></code></pre></td></tr></table></figure><p>Office Tool Plus：<a href="https://otp.landian.vip/zh-cn/download.html">https://otp.landian.vip/zh-cn/download.html</a></p><p>只能激活<strong>批量版</strong>的 Windows 和 Office</p><p>卸载原来的office：</p><p><img src="https://img.shyi.org/images/8616bd3ce1563e3de282a7a8bba772ce.png"></p><p>安装office：</p><p><img src="https://img.shyi.org/images/65d2f9ca65ed274cac828ce54f0057b6.png"></p><p>激活office：</p><p><img src="https://img.shyi.org/images/8e2f6dadbee2e10dfdb74a2510f6f495.png"></p><blockquote><p>  激活的时候如果遇到报错一般有几种情况</p><ol><li><p>网络方面原因：kms主机设置为域名+端口的形式，比如设置为本站的 <code>kms.shyi.org:1688</code> 。</p><p>关闭代理或者更换kms服务器地址。</p></li><li><p>卸载并清理之前的office然后关机重启。参考前面的 <code>卸载原来的office</code></p></li></ol></blockquote><h2 id="命令行"><a href="#命令行" class="headerlink" title="命令行"></a>命令行</h2><p>密钥</p><blockquote><p>  <a href="https://gist.github.com/jerodg/502bd80a715347662e79af526c98f187">https://gist.github.com/jerodg/502bd80a715347662e79af526c98f187</a></p></blockquote><h3 id="激活Windows"><a href="#激活Windows" class="headerlink" title="激活Windows"></a>激活Windows</h3><ol><li><p>如果你的系统是<strong>零售版</strong>(Retail简写 RTL或称 consumer edition)，请先到下方 KMS Client Setup Keys 处得到你的系统版本对应的 Key，并应用它以将系统转换成<strong>批量版</strong>(Volume简写 VOL 或 VL或称 business edition)</p></li><li><p>密钥来源于微软官方 <a href="https://docs.microsoft.com/en-us/windows-server/get-started/kmsclientkeys">https://docs.microsoft.com/en-us/windows-server/get-started/kmsclientkeys</a></p></li><li><p><strong>以管理员身份</strong>运行「CMD」或者「PowerShell」，运行以下命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">wmic os get caption  <span class="hljs-comment"># 查看系统版本</span><br>slmgr /upk  <span class="hljs-comment"># 卸载密钥</span><br>slmgr /ipk &lt;密钥&gt;  <span class="hljs-comment"># 安装密钥</span><br>slmgr /skms kms.shyi.org:1688  <span class="hljs-comment"># 设置kms服务器</span><br>slmgr /ato  <span class="hljs-comment"># 激活</span><br>slmgr /xpr  <span class="hljs-comment"># 查询过期时间</span><br>slmgr /dlv  <span class="hljs-comment"># 检查激活状态</span><br>slmgr /help  <span class="hljs-comment"># 命令解释</span><br></code></pre></td></tr></table></figure></li></ol><h3 id="激活office"><a href="#激活office" class="headerlink" title="激活office"></a>激活office</h3><p>OFFICE必须是VOL版本（批量版）</p><p>可以去<a href="http://msdn.itellyou.cn/">msdn.itellyou.cn</a>下载</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs bash">64位执行如下命令:<br><span class="hljs-built_in">cd</span> <span class="hljs-string">&quot;C:\Program Files\Microsoft Office\Office16&quot;</span><br>cscript ospp.vbs /sethst:kms.shyi.org  <span class="hljs-comment"># 默认是1688端口</span><br>cscript ospp.vbs /setprt:1688  <span class="hljs-comment"># 设置端口</span><br>cscript ospp.vbs /act  <span class="hljs-comment"># 激活</span><br><br>32位执行如下命令:<br><span class="hljs-built_in">cd</span> <span class="hljs-string">&quot;C:\Program Files (x86)\Microsoft Office\Office16&quot;</span><br>cscript ospp.vbs /sethst:kms.shyi.org<br>cscript ospp.vbs /setprt:1688<br>cscript ospp.vbs /act<br><br>cscript ospp.vbs /dstatus  <span class="hljs-comment"># 查询office激活状态</span><br>cscript ospp.vbs /help  <span class="hljs-comment"># 命令解释</span><br>cscript ospp.vbs /unpkey:xxxxx  <span class="hljs-comment"># 卸载原本的激活码【xxxxx为密钥后五位】</span><br>cscript ospp.vbs /inpkey:FXYTK-NJJ8C-GB6DW-3DYQT-6F7TH<br>cscript ospp.vbs /cachst:FALSE  <span class="hljs-comment"># 关闭缓存</span><br>cscript ospp.vbs /dhistorykms  <span class="hljs-comment"># Display KMS clientactivation history.排查错误</span><br></code></pre></td></tr></table></figure><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs nix">cscript <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\P</span>rogram Files<span class="hljs-char escape_">\M</span>icrosoft Office<span class="hljs-char escape_">\O</span>ffice16<span class="hljs-char escape_">\o</span>spp.vbs&quot;</span> <span class="hljs-symbol">/dstatus</span>  <span class="hljs-comment"># 查询office激活状态</span><br>cscript <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\P</span>rogram Files<span class="hljs-char escape_">\M</span>icrosoft Office<span class="hljs-char escape_">\O</span>ffice16<span class="hljs-char escape_">\o</span>spp.vbs&quot;</span> <span class="hljs-operator">/</span>sethst:kms.shyi.org  <span class="hljs-comment"># 默认是1688端口</span><br>cscript <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\P</span>rogram Files<span class="hljs-char escape_">\M</span>icrosoft Office<span class="hljs-char escape_">\O</span>ffice16<span class="hljs-char escape_">\o</span>spp.vbs&quot;</span> <span class="hljs-operator">/</span>setprt:<span class="hljs-number">1688</span>  <span class="hljs-comment"># 设置端口</span><br>cscript <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\P</span>rogram Files<span class="hljs-char escape_">\M</span>icrosoft Office<span class="hljs-char escape_">\O</span>ffice16<span class="hljs-char escape_">\o</span>spp.vbs&quot;</span> <span class="hljs-symbol">/act</span>  <span class="hljs-comment"># 激活</span><br>cscript <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\P</span>rogram Files<span class="hljs-char escape_">\M</span>icrosoft Office<span class="hljs-char escape_">\O</span>ffice16<span class="hljs-char escape_">\o</span>spp.vbs&quot;</span> <span class="hljs-symbol">/help</span>  <span class="hljs-comment"># 命令解释</span><br>cscript <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\P</span>rogram Files<span class="hljs-char escape_">\M</span>icrosoft Office<span class="hljs-char escape_">\O</span>ffice16<span class="hljs-char escape_">\o</span>spp.vbs&quot;</span> <span class="hljs-operator">/</span>inpkey:FXYTK-NJJ8C-GB6DW-<span class="hljs-number">3</span>DYQT-<span class="hljs-number">6</span>F7TH<br></code></pre></td></tr></table></figure><p>开机自动运行</p><p><code>Win+R</code> -&gt; <code>taskschd.msc</code> -&gt; <code>任务计划程序库</code>  -&gt; <code>创建基本任务</code> -&gt; … -&gt; <code>启动程序</code></p><p>  程序或脚本：<code>cscript</code> </p><p>  添加参数（可选）： <code>&quot;C:\Program Files\Microsoft Office\Office16\ospp.vbs&quot; /act</code></p><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nix">cscript <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\P</span>rogram Files<span class="hljs-char escape_">\M</span>icrosoft Office<span class="hljs-char escape_">\O</span>ffice16<span class="hljs-char escape_">\o</span>spp.vbs&quot;</span> <span class="hljs-operator">/</span>act<br></code></pre></td></tr></table></figure><blockquote><p>  <a href="https://moe.best/kms.html">https://moe.best/kms.html</a></p><p>  office镜像下载：<a href="https://kms.cangshui.net/3/">https://kms.cangshui.net/3/</a></p><p>  <a href="https://www.sixyin.com/506.html">https://www.sixyin.com/506.html</a></p><p>  <a href="https://blog.wxlost.com/kms.html">https://blog.wxlost.com/kms.html</a></p><p>  <a href="https://blog.03k.org/post/kms.html">https://blog.03k.org/post/kms.html</a></p></blockquote>]]></content>
    
    
    <summary type="html">使用kms激活Windows和office，搭建kms服务器</summary>
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Docker" scheme="https://shyi.org/tags/Docker/"/>
    
    <category term="kms" scheme="https://shyi.org/tags/kms/"/>
    
    <category term="otp" scheme="https://shyi.org/tags/otp/"/>
    
  </entry>
  
  <entry>
    <title>Actions自动部署 Hexo 博客到Github</title>
    <link href="https://shyi.org/posts/38888/"/>
    <id>https://shyi.org/posts/38888/</id>
    <published>2023-07-20T03:57:57.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<p>之前在本地电脑上部署hexo博客，就是每次更新太麻烦了，在网上看到有很多人使用Action自动更新博客感觉很方便。</p><h3 id="1-复制必要文件"><a href="#1-复制必要文件" class="headerlink" title="1. 复制必要文件"></a>1. 复制必要文件</h3><h4 id="本地目录结构"><a href="#本地目录结构" class="headerlink" title="本地目录结构"></a>本地目录结构</h4><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs nix">blog<br>    .deploy_git<span class="hljs-symbol">/</span><br>    .github<span class="hljs-symbol">/</span><br>    node_modules<span class="hljs-symbol">/</span><br>    public<span class="hljs-symbol">/</span><br>    source<span class="hljs-symbol">/</span><br>    themes<span class="hljs-symbol">/</span><br>    _config.fluid.yml<br>    _config.yml<br>    package.json<br>    等等<br></code></pre></td></tr></table></figure><p>我之前只在source下对博客文件进行git备份</p><h4 id="source结构"><a href="#source结构" class="headerlink" title="source结构"></a>source结构</h4><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs nix">source<br>    .git<span class="hljs-symbol">/</span><br>    _posts<span class="hljs-symbol">/</span><br>    <span class="hljs-number">404</span><span class="hljs-symbol">/</span><br>    about<span class="hljs-symbol">/</span><br>    .gitignore<br>    CNAME<br></code></pre></td></tr></table></figure><p>我现在想只更新source到github，然后actions自动生成静态html，本地只需要有个git环境就可以了。</p><p>先将blog文件夹下的一些必备文件复制到source里面</p><h4 id="复制"><a href="#复制" class="headerlink" title="复制"></a>复制</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">.gitignore。        -&gt; <span class="hljs-built_in">source</span>/blog.gitignore<br>_config.fluid.yml   -&gt; <span class="hljs-built_in">source</span>/_config.fluid.yml<br>_config.yml。       -&gt; <span class="hljs-built_in">source</span>/_config.yml<br>package.json。      -&gt; <span class="hljs-built_in">source</span>/package.json<br></code></pre></td></tr></table></figure><h3 id="2-新建仓库"><a href="#2-新建仓库" class="headerlink" title="2. 新建仓库"></a>2. 新建仓库</h3><p>新建两个仓库，建议都设置为私密的</p><blockquote><p>  blog-md ：私密，这个用来存储md文件，source文件夹对应的是blog-md，将source里面的文件上传到blog-md中</p><p>  blog-web： 这个用来存储html文件</p></blockquote><h4 id="生成秘钥"><a href="#生成秘钥" class="headerlink" title="生成秘钥"></a>生成秘钥</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">ssh-keygen -f github-deploy-key<br></code></pre></td></tr></table></figure><blockquote><p>  一路回车，会在当前文件夹生成github-deploy-key与github-deploy-key.pub</p><p>  将私钥 <code>github-deploy-key</code> 的文件内容添加到 <code>blog-md</code> 仓库的 <code>Settings</code> → <code>Secrets and variables</code> → <code>Actions</code> -&gt; <code>New repository secret</code> 页面上，<code>Name</code> 为 <code>HEXO_DEPLOY_PRI</code> （<strong>后面的代码要用到这个名称</strong>）。</p><p>  pub是公钥，将pub复制到gtihub的blog-web仓库的 <code>Settings → Deploy keys → Add deploy key</code> 页面上，<code>Title</code> 为 <code>HEXO_DEPLOY_PUB</code>，勾选 <code>Allow write access</code> 选项。</p></blockquote><h3 id="3-创建Workflow"><a href="#3-创建Workflow" class="headerlink" title="3. 创建Workflow"></a>3. 创建Workflow</h3><p>source下新建.github</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs jboss-cli">source<br>    <span class="hljs-string">.github/</span><br>        workflows/<br>            <span class="hljs-keyword">deploy</span>.yml<br>        script/<br>            blog-update.sh<br>    <span class="hljs-string">.git/</span><br></code></pre></td></tr></table></figure><h4 id="deploy-yml"><a href="#deploy-yml" class="headerlink" title="deploy.yml"></a>deploy.yml</h4><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">name:</span> <span class="hljs-string">CI</span><br><br><span class="hljs-comment"># 只监听 master 分支的改动</span><br><span class="hljs-attr">on:</span><br>  <span class="hljs-attr">push:</span><br>    <span class="hljs-attr">branches:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">master</span><br><br><span class="hljs-comment"># 自定义环境变量</span><br><span class="hljs-attr">env:</span><br>  <span class="hljs-attr">GIT_USER:</span> <span class="hljs-string">xxx</span>  <span class="hljs-comment"># 改成你自己的 GitHub 用户名</span><br>  <span class="hljs-attr">GIT_EMAIL:</span> <span class="hljs-string">xxx@gmail.com</span>  <span class="hljs-comment"># 改成你自己的 GitHub 注册邮箱</span><br>  <span class="hljs-attr">THEME_REPO:</span> <span class="hljs-string">fluid-dev/hexo-theme-fluid</span><br>  <span class="hljs-attr">THEME_BRANCH:</span> <span class="hljs-string">master</span><br><br><span class="hljs-attr">jobs:</span><br>  <span class="hljs-attr">build:</span><br>    <span class="hljs-attr">name:</span> <span class="hljs-string">Build</span> <span class="hljs-string">on</span> <span class="hljs-string">node</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">matrix.node_version</span> <span class="hljs-string">&#125;&#125;</span> <span class="hljs-string">and</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">matrix.os</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span><br>    <span class="hljs-attr">strategy:</span><br>      <span class="hljs-attr">matrix:</span><br>        <span class="hljs-attr">os:</span> [<span class="hljs-string">ubuntu-latest</span>]<br>        <span class="hljs-attr">node_version:</span> [<span class="hljs-number">18.</span><span class="hljs-string">x</span>]  <span class="hljs-comment"># 改成你本地的 Node.js 版本，可以用 `node --version` 命令查询</span><br><br>    <span class="hljs-attr">steps:</span>                                      <br>      <span class="hljs-comment"># 安装nodejs</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Use</span> <span class="hljs-string">Node.js</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">matrix.node_version</span> <span class="hljs-string">&#125;&#125;</span><br>        <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/setup-node@v3</span><br>        <span class="hljs-attr">with:</span><br>          <span class="hljs-attr">node-version:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">matrix.node_version</span> <span class="hljs-string">&#125;&#125;</span><br>      <br>      <span class="hljs-comment"># 安装 Hexo-cli，然后使用hexo init构建hexo文件结构</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Install</span> <span class="hljs-string">hexo</span> <span class="hljs-string">with</span> <span class="hljs-string">dependencies</span><br>        <span class="hljs-attr">run:</span> <span class="hljs-string">|</span><br><span class="hljs-string">          npm install -g hexo-cli</span><br><span class="hljs-string">          hexo init</span><br><span class="hljs-string">          npm install hexo-deployer-git --save</span><br><span class="hljs-string">          npm install hexo-generator-sitemap --save</span><br><span class="hljs-string">          npm install hexo-abbrlink --save</span><br><span class="hljs-string">          npm install hexo-generator-feed --save</span><br><span class="hljs-string"></span>      <br>      <span class="hljs-comment"># 获取博客源码，保存在source文件夹下，与hexo的文件结构一致</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Checkout</span><br>        <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v3</span><br>        <span class="hljs-attr">with:</span><br>          <span class="hljs-attr">ref:</span> <span class="hljs-string">master</span><br>          <span class="hljs-attr">path:</span> <span class="hljs-string">source</span><br>      <br>      <span class="hljs-comment"># 获取主题代码，保存在themes/fluid文件夹下，与hexo的文件结构一致</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Checkout</span> <span class="hljs-string">theme</span> <span class="hljs-string">repo</span><br>        <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v3</span><br>        <span class="hljs-attr">with:</span><br>          <span class="hljs-attr">repository:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">env.THEME_REPO</span> <span class="hljs-string">&#125;&#125;</span><br>          <span class="hljs-attr">ref:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">env.THEME_BRANCH</span> <span class="hljs-string">&#125;&#125;</span><br>          <span class="hljs-attr">path:</span> <span class="hljs-string">themes/fluid</span><br><br>      <span class="hljs-comment"># 安装依赖</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Install</span> <span class="hljs-string">hexo</span> <span class="hljs-string">with</span> <span class="hljs-string">dependencies</span>      <br>        <span class="hljs-attr">run:</span> <span class="hljs-string">|</span><br><span class="hljs-string">          mv source/_config.fluid.yml _config.fluid.yml</span><br><span class="hljs-string">          mv source/_config.yml _config.yml</span><br><span class="hljs-string">          mv source/package.json package.json</span><br><span class="hljs-string">          mv source/blog.gitignore .gitignore</span><br><span class="hljs-string">          npm install</span><br><span class="hljs-string"></span><br>      <span class="hljs-comment"># 配置环境</span><br>      <span class="hljs-comment"># ssh-kenscan github.com &gt;&gt; ~/.ssh/known_hosts   # 从 GitHub 获取公钥并保存到 known_hosts 文件</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Configuration</span> <span class="hljs-string">environment</span><br>        <span class="hljs-attr">env:</span><br>          <span class="hljs-attr">HEXO_DEPLOY_PRI:</span> <span class="hljs-string">$&#123;&#123;secrets.HEXO_DEPLOY_PRI&#125;&#125;</span><br>        <span class="hljs-attr">run:</span> <span class="hljs-string">|</span><br><span class="hljs-string">          sudo timedatectl set-timezone &quot;Asia/Shanghai&quot;</span><br><span class="hljs-string">          mkdir -p ~/.ssh/</span><br><span class="hljs-string">          echo &quot;$HEXO_DEPLOY_PRI&quot; &gt; ~/.ssh/id_rsa</span><br><span class="hljs-string">          chmod 600 ~/.ssh/id_rsa</span><br><span class="hljs-string">          ssh-keyscan github.com &gt;&gt; ~/.ssh/known_hosts          </span><br><span class="hljs-string">          git config --local user.name &quot;github-actions[bot]&quot;</span><br><span class="hljs-string">          git config --local user.email &quot;41898282+github-actions[bot]@users.noreply.github.com&quot;</span><br><span class="hljs-string"></span><br>      <span class="hljs-comment"># 生成并部署</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Deploy</span> <span class="hljs-string">hexo</span><br>        <span class="hljs-attr">run:</span> <span class="hljs-string">|</span><br><span class="hljs-string">          ls -a</span><br><span class="hljs-string">          pwd</span><br><span class="hljs-string">          hexo clean</span><br><span class="hljs-string">          hexo g -d</span><br><span class="hljs-string">          ls -a</span><br><span class="hljs-string"></span><br>      <span class="hljs-comment"># 部署后更新博客源码，用于添加 abbrlink，如果不用 abbrlink，需要删除</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Update</span> <span class="hljs-string">Blog</span><br>        <span class="hljs-attr">run:</span> <span class="hljs-string">|</span><br><span class="hljs-string">          cp _config.fluid.yml source/_config.fluid.yml</span><br><span class="hljs-string">          cp _config.yml source/_config.yml </span><br><span class="hljs-string">          cp package.json source/package.json</span><br><span class="hljs-string">          cp .gitignore source/blog.gitignore</span><br><span class="hljs-string">          sh &quot;$&#123;GITHUB_WORKSPACE&#125;/source/.github/script/blog-update.sh&quot;</span><br><span class="hljs-string"></span><br></code></pre></td></tr></table></figure><blockquote><p>  为啥上面一会mv一会cp呢？</p><ol><li>因为我要构建hexo的文件结构，要不然部署会失败。</li><li>有一些文件不能上传到web仓库里面，所以在部署前要移出，在判断是否更新博客源码时移入，不移入的话下回actions就会执行失败。</li></ol></blockquote><p>使用hexo-abbrlink会在md文件中添加abbrlink内容，所以需要将改变后的文件push到md仓库中。</p><h4 id="blog-update-sh"><a href="#blog-update-sh" class="headerlink" title="blog-update.sh"></a>blog-update.sh</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/sh</span><br><span class="hljs-built_in">cd</span> <span class="hljs-built_in">source</span><br><span class="hljs-keyword">if</span> [ -z <span class="hljs-string">&quot;<span class="hljs-subst">$(git status --porcelain)</span>&quot;</span> ]; <span class="hljs-keyword">then</span><br>    <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;nothing to update.&quot;</span><br><span class="hljs-keyword">else</span><br>    git add .<br>    git commit -m <span class="hljs-string">&quot;triggle by commit <span class="hljs-variable">$&#123;GITHUB_SHA&#125;</span>&quot;</span> -a<br>    git push origin master<br><span class="hljs-keyword">fi</span><br></code></pre></td></tr></table></figure><p>在_config.yml里面配置</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">deploy:</span><br>  <span class="hljs-attr">type:</span> <span class="hljs-string">&#x27;git&#x27;</span><br>  <span class="hljs-attr">repository:</span> <span class="hljs-string">git@github.com:用户名/blog-web.git</span><br>  <span class="hljs-attr">branch:</span> <span class="hljs-string">main</span><br></code></pre></td></tr></table></figure><h3 id="4-成功"><a href="#4-成功" class="headerlink" title="4. 成功"></a>4. 成功</h3><p><img src="https://img.shyi.org/images/921ab7a600d8db741d519fd61932ed23.png"></p><h3 id="5-push"><a href="#5-push" class="headerlink" title="5. push"></a>5. push</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add .<br>git commit -m <span class="hljs-string">&quot;actions test&quot;</span><br>git push | git push origin master<br></code></pre></td></tr></table></figure><h4 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h4><p>每次push前先pull。</p><p>当前blog系统：本地编写md -&gt; push md到blog-md -&gt; actions -&gt; push html到blog-web -&gt; 推送到vercel，即可通过域名访问。</p><p>error: remote origin already exists.</p><p>origin这个名称重复，</p><figure class="highlight dsconfig"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs dsconfig"><span class="hljs-string">git</span> <span class="hljs-string">remote</span> <span class="hljs-string">rm</span> <span class="hljs-string">origin</span><br><span class="hljs-string">git</span> <span class="hljs-string">remote</span> <span class="hljs-string">add</span> <span class="hljs-string">origin</span> <span class="hljs-string">https</span>://<span class="hljs-string">github</span>.<span class="hljs-string">com</span>/$&#123;&#123; <span class="hljs-string">github</span>.<span class="hljs-string">repository</span> &#125;&#125;.<span class="hljs-string">git</span><br><span class="hljs-comment"># $&#123;&#123; github.repository &#125;&#125; = your_user/your_app</span><br><br><span class="hljs-comment"># 也可以</span><br><span class="hljs-string">git</span> <span class="hljs-string">remote</span> <span class="hljs-built_in">set-url</span> <span class="hljs-string">origin</span> <span class="hljs-string">https</span>://<span class="hljs-string">github</span>.<span class="hljs-string">com</span>/<span class="hljs-string">your_user</span>/<span class="hljs-string">your_app</span>.<span class="hljs-string">git</span><br><br><span class="hljs-comment"># 也可以</span><br><span class="hljs-string">git</span> <span class="hljs-string">remote</span> <span class="hljs-string">add</span> <span class="hljs-string">NEW_NAME</span> <span class="hljs-string">https</span>://<span class="hljs-string">github</span>.<span class="hljs-string">com</span>/<span class="hljs-string">your_user</span>/<span class="hljs-string">your_app</span>.<span class="hljs-string">git</span><br>但是<span class="hljs-string">push</span>时也要换成 <span class="hljs-string">git</span> <span class="hljs-string">push</span> -<span class="hljs-string">f</span> -<span class="hljs-string">u</span> <span class="hljs-string">NEW_NAME</span> <span class="hljs-string">main</span><br></code></pre></td></tr></table></figure><p>fatal: unable to access ‘<a href="https://github.com/">https://github.com/</a>‘: the requested url returned error: 403</p><p>如果执行git push后出现403（更新md文件），需要打开对应md仓库，链接：<a href="https://github.com/">https://github.com/</a>&lt;用户名&gt;&#x2F;&lt;仓库名&gt;&#x2F;settings&#x2F;actions</p><p><img src="https://img.shyi.org/images/6af791228130e7a34ab104232d3a5d8d.png"></p><p>actions也可以使用https协议提交</p><figure class="highlight handlebars"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs handlebars"><span class="language-xml">git remote add origin &quot;https://$</span><span class="hljs-template-variable">&#123;&#123; <span class="hljs-name">github.actor</span> &#125;&#125;</span><span class="language-xml">:$</span><span class="hljs-template-variable">&#123;&#123; <span class="hljs-name">secrets.GITHUB_TOKEN</span> &#125;&#125;</span><span class="language-xml">@github.com/$</span><span class="hljs-template-variable">&#123;&#123; <span class="hljs-name">github.repository</span> &#125;&#125;</span><span class="language-xml">&quot;</span><br><span class="language-xml"># 或者</span><br><span class="language-xml">git remote set-url origin &quot;https://$</span><span class="hljs-template-variable">&#123;&#123; <span class="hljs-name">github.actor</span> &#125;&#125;</span><span class="language-xml">:$</span><span class="hljs-template-variable">&#123;&#123; <span class="hljs-name">secrets.GITHUB_TOKEN</span> &#125;&#125;</span><span class="language-xml">@github.com/$</span><span class="hljs-template-variable">&#123;&#123; <span class="hljs-name">github.repository</span> &#125;&#125;</span><span class="language-xml">&quot;</span><br></code></pre></td></tr></table></figure><p>也可以使用ssh，不推荐。</p><figure class="highlight dsconfig"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs dsconfig"><span class="hljs-string">git</span> <span class="hljs-string">remote</span> <span class="hljs-string">add</span> <span class="hljs-string">origin</span> <span class="hljs-string">ssh</span>://<span class="hljs-string">git</span>@<span class="hljs-string">github</span>.<span class="hljs-string">com</span>/$&#123;&#123; <span class="hljs-string">github</span>.<span class="hljs-string">repository</span> &#125;&#125;.<span class="hljs-string">git</span><br><span class="hljs-string">git</span> <span class="hljs-string">remote</span> <span class="hljs-built_in">set-url</span> <span class="hljs-string">origin</span> <span class="hljs-string">ssh</span>://<span class="hljs-string">git</span>@<span class="hljs-string">github</span>.<span class="hljs-string">com</span>/$&#123;&#123; <span class="hljs-string">github</span>.<span class="hljs-string">repository</span> &#125;&#125;.<span class="hljs-string">git</span><br></code></pre></td></tr></table></figure><p>参考文章：</p><blockquote><p>  <a href="https://blog.kukmoon.com/f8bb4ee/">https://blog.kukmoon.com/f8bb4ee/</a></p><p>  <a href="https://blog.csdn.net/qq_44275213/article/details/128857688">https://blog.csdn.net/qq_44275213/article/details/128857688</a></p><p>  <a href="https://docs.github.com/zh/actions/learn-github-actions/essential-features-of-github-actions">https://docs.github.com/zh/actions/learn-github-actions/essential-features-of-github-actions</a></p><p>  <a href="https://stackoverflow.com/questions/10904339/github-fatal-remote-origin-already-exists">https://stackoverflow.com/questions/10904339/github-fatal-remote-origin-already-exists</a></p><p>  <a href="https://stackoverflow.com/questions/7438313/pushing-to-git-returning-error-code-403-fatal-http-request-failed">https://stackoverflow.com/questions/7438313/pushing-to-git-returning-error-code-403-fatal-http-request-failed</a></p></blockquote>]]></content>
    
    
    <summary type="html">在本地电脑上部署hexo博客，就是每次更新太麻烦了，在网上看到有很多人使用Action自动更新博客感觉很方便</summary>
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Github Actions" scheme="https://shyi.org/tags/Github-Actions/"/>
    
    <category term="hexo" scheme="https://shyi.org/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>搭建一个分享文本的网站</title>
    <link href="https://shyi.org/posts/32904/"/>
    <id>https://shyi.org/posts/32904/</id>
    <published>2023-07-18T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<p>一个可分享的快速粘贴文本的容器Hasty Paste，如果写一些脚本的话会很方便。</p><p>docker-compose.yaml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&quot;3&quot;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">paste-bin:</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">ghcr.io/enchant97/hasty-paste:latest</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">hasty-paste</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">unless-stopped</span><br>    <span class="hljs-attr">user:</span> <span class="hljs-string">root</span>  <span class="hljs-comment"># 可选：(root同0:0) 1000:1000 </span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span><span class="hljs-string">:4579:8000</span> <br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/&lt;username&gt;/hasty-paste/data:/app/data</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-comment">#- &quot;ENABLE_PUBLIC_LIST=true&quot;  # 如果使用反向代理设置了安全访问则可以开启</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;TIME_ZONE=Asia/Shanghai&quot;</span><br></code></pre></td></tr></table></figure><blockquote><p>  一般为了安全，我们会将user设置为<strong>1000:1000</strong>，但是我们还需要对本地映射文件夹改变归属者，要不然访问会出错。</p><p>  <code>chown -R 1000:1000 /home/&lt;username&gt;/hasty-paste</code></p></blockquote><p>反向代理</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> ssl;<br>    <span class="hljs-attribute">server_name</span> xxxx;<br>    <span class="hljs-attribute">ssl_certificate</span>        crt/pem;<br>    <span class="hljs-attribute">ssl_certificate_key</span>    key;<br>    <br><span class="hljs-section">location</span> /new<br>    &#123;<br>        <span class="hljs-attribute">auth_basic</span> <span class="hljs-string">&quot;Please input password&quot;</span>; <span class="hljs-comment">#这里是验证时的提示信息  </span><br>    <span class="hljs-attribute">auth_basic_user_file</span> /home/&lt;username&gt;/ssl/password;<br>        <br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:4579;       <span class="hljs-comment"># 注意改成你实际使用的端口</span><br><span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$real</span>;<br>        <span class="hljs-comment"># 此方法可能不适合域名反代</span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-attribute">add_header</span> Cache-Control <span class="hljs-literal">no</span>-cache;<br>    &#125;<br>    <br>    <span class="hljs-section">location</span> /api/<br>    &#123;<br>        <span class="hljs-attribute">auth_basic</span> <span class="hljs-string">&quot;Please input password&quot;</span>; <span class="hljs-comment">#这里是验证时的提示信息  </span><br>    <span class="hljs-attribute">auth_basic_user_file</span> /home/&lt;username&gt;/ssl/password;<br>        <br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:4579;       <span class="hljs-comment"># 注意改成你实际使用的端口</span><br><span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$real</span>;<br>        <span class="hljs-comment"># 此方法可能不适合域名反代</span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-attribute">add_header</span> Cache-Control <span class="hljs-literal">no</span>-cache;<br>    &#125;<br>    <br>    <span class="hljs-section">location</span> / <br>    &#123;<br>      <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:4579;       <span class="hljs-comment"># 注意改成你实际使用的端口</span><br><span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$real</span>;<br>        <span class="hljs-comment"># 此方法可能不适合域名反代</span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-attribute">add_header</span> Cache-Control <span class="hljs-literal">no</span>-cache;<br><br>    &#125;<br>    <span class="hljs-attribute">access_log</span>  /www/wwwlogs/paste-bin.log main;  <span class="hljs-comment">#日志可以不写</span><br>    <span class="hljs-comment">#error_log   /www/wwwlogs/demo.com.error.log;</span><br>&#125;<br><br></code></pre></td></tr></table></figure><p>密码设置参考：<a href="https://shyi.org/posts/16650/#nginx%E7%94%9F%E6%88%90%E8%AE%BF%E9%97%AE%E5%AF%86%E7%A0%81%EF%BC%9A">跳转</a></p><p>参考：</p><blockquote><p><a href="https://enchantedcode.co.uk/hasty-paste/index.html">https://enchantedcode.co.uk/hasty-paste/index.html</a></p><p><a href="https://blog.laoda.de/archives/docker-compose-install-hasty-paste/">https://blog.laoda.de/archives/docker-compose-install-hasty-paste/</a></p></blockquote>]]></content>
    
    
    <summary type="html">一个可分享的快速粘贴文本的容器Hasty Paste，如果写一些脚本的话会很方便。</summary>
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="docker" scheme="https://shyi.org/tags/docker/"/>
    
    <category term="nginx" scheme="https://shyi.org/tags/nginx/"/>
    
    <category term="hasty-paste" scheme="https://shyi.org/tags/hasty-paste/"/>
    
  </entry>
  
  <entry>
    <title>常用的vim命令</title>
    <link href="https://shyi.org/posts/22319/"/>
    <id>https://shyi.org/posts/22319/</id>
    <published>2023-06-27T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<p>vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富，在程序员中被广泛使用。</p><p>本文主要是简单的介绍 <code>vim</code> 的使用</p><h2 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h2><ol><li>命令模式（Command mode）： 这是Vim的默认模式，在该模式下可以执行命令，例如保存文件、退出Vim等。按下Esc键可以从其他模式切换到命令模式。</li><li>编辑模式：<ol><li>插入模式（Insert mode）：插入模式像普通文本编辑器一样输入和编辑文本。按下<code>i</code>键可以从命令模式切换到插入模式。</li><li>附加模式（Append mode）：附加模式类似于插入模式，但是光标会位于当前字符的后面，而不是前面。按下<code>a</code>键可以从命令模式切换到附加模式。</li></ol></li><li>可视模式（Visual mode）：可视模式允许你选择文本块进行操作，例如复制、删除或修改选中的文本。按下<code>v</code>键可以从命令模式切换到可视模式。</li><li>命令行模式（Command-line mode）：命令行模式用于输入底部命令，例如保存文件、搜索文本等。按下冒号<code>:</code>键可以从命令模式切换到命令行模式。</li></ol><p>模式</p><p><img src="https://img.shyi.org/images/6b42cf6cb1929c2318bc27c4c8b179f1.png" alt="vim_mode"></p><p>不知道当前处于什么模式的话按下ESC就会回到命令模式。</p><h2 id="命令模式"><a href="#命令模式" class="headerlink" title="命令模式"></a>命令模式</h2><p>常用：</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><code class="hljs stylus"><span class="hljs-selector-tag">dd</span>删除（剪切）光标所在行<br>ndd删除（剪切）从光标处开始的n行<br>yy复制光标所在行<br>nyy复制从光标处开始的n行<br><span class="hljs-attribute">x</span>删除光标所在位置的字符<br><span class="hljs-selector-tag">p</span>粘贴（将删除或复制的数据粘贴到光标下一行）<br>P粘贴（将删除或复制的数据粘贴到光标上一行）<br>u撤销（后退）<br>Ctrl + <span class="hljs-attribute">r</span>重做上一次被撤销的操作（前进）<br><br>h/j/k/l将光标向左/下/上/右移动一个字符/行<br><br>w将光标向后移动一个词（以空格或标点符号分隔）<br><span class="hljs-selector-tag">b</span>将光标向前移动一个词<br><span class="hljs-number">0</span>（数字）  将光标移动到当前行的行首<br>$将光标移动到当前行的行尾<br>gg将光标移动到文件的第一行<br>G将光标移动到文件的最后一行<br><br>Ctrl+f向下滚动一页<br>Ctrl+<span class="hljs-selector-tag">b</span>向上滚动一页<br>Ctrl+d向下滚动半页<br>Ctrl+u向上滚动半页<br><br><span class="hljs-selector-tag">i</span>从当前光标插入<br>I 从当前所在行的第一个非空格符处插入（即从开头插入）<br><br><span class="hljs-selector-tag">a</span> 从当前光标的下一个字符处插入<br>A 从当前所在行的最后一个字符处插入（即从行末尾插入）<br><br>o 当前光标的下一行插入新的一行，光标移动到行首<br>O 当前光标的上一行插入新的一行，光标移动到行首<br><br><span class="hljs-attribute">r</span> 替换光标所在的字符<br>R 一直替换光标所在的字符，直到按下Esc键为止<br><br>ZZ 退出vim<br></code></pre></td></tr></table></figure><h2 id="命令行模式"><a href="#命令行模式" class="headerlink" title="命令行模式"></a>命令行模式</h2><p>常用命令</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs routeros">:wq保存数据并退出vim<br>:w将编辑的数据从内存写入硬盘<br>:w!若文件属性为只读，强制写入<br>:q退出vim环境<br>:q!强制退出，且不保存文件<br>:wq!强制保存并退出<br>:<span class="hljs-built_in">set</span> nu显示行号<br>:<span class="hljs-built_in">set</span> nonu不显示行号<br>:n光标移动到第n行<br>:%d清空当前文件<br>:w 文件名  将当前文件保存为指定的文件名<br><br>:<span class="hljs-built_in">set</span> noai不自动缩进，解决复制时的缩进问题<br>:<span class="hljs-built_in">set</span> paste粘贴模式，解决复制时的缩进问题<br>:<span class="hljs-built_in">set</span> number开启行号显示<br>:<span class="hljs-built_in">set</span> <span class="hljs-attribute">tabstop</span>=4设置制表符（Tab）的宽度为4个空格<br>:<span class="hljs-built_in">set</span> <span class="hljs-attribute">ff</span>=unix设置文件的行尾格式为Unix<br>:<span class="hljs-built_in">set</span> <span class="hljs-attribute">encoding</span>=utf-8设置文件的编码格式为UTF-8<br>:<span class="hljs-built_in">set</span> <span class="hljs-attribute">mouse</span>=a使用鼠标进行文本选择、滚动和其他操作<br>这些设置是临时的，如果要永久保存设置，可以将它们添加到Vim的配置文件（通常是~/.vimrc或~/.vim/vimrc）中<br></code></pre></td></tr></table></figure><p>搜索和替换</p><figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs ruby"><span class="hljs-symbol">:/pattern</span>在文件中向下搜索匹配指定模式的文本。<br><span class="hljs-symbol">:<span class="hljs-string">?p</span>attern</span>在文件中向上搜索匹配指定模式的文本。<br><span class="hljs-symbol">:s/old/new</span>将当前行第一个匹配到的old替换为new。<br><span class="hljs-symbol">:s/old/new/g</span>将当前行所有匹配到的old替换为new。<br><span class="hljs-symbol">:%s/old/new/g</span>将文件中所有匹配到的old替换为new。<br></code></pre></td></tr></table></figure><h2 id="可视模式"><a href="#可视模式" class="headerlink" title="可视模式"></a>可视模式</h2><figure class="highlight asciidoc"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs asciidoc">y复制选中的文本到剪贴板<br>d剪切选中的文本到剪贴板<br>p在光标位置粘贴剪贴板中的内容<br><br>&gt;向右缩进选中的文本<br>&lt;向左缩进选中的文本<br><span class="hljs-section">=自动对齐选中的文本</span><br><br>x删除选中的文本<br>s删除选中的文本，并进入插入模式以输入替换的文本<br>r替换选中的文本为输入的字符<br><br>J将选中的多行文本合并为一行<br>~反转选中文本的大小写<br>U将选中文本转换为大写<br>u将选中文本转换为小写<br></code></pre></td></tr></table></figure><p>额外</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs routeros"><span class="hljs-built_in">export</span> <span class="hljs-attribute">EDITOR</span>=<span class="hljs-string">&quot;/usr/bin/vim&quot;</span>  #用vim打开crontab<br>crontab -e  <br></code></pre></td></tr></table></figure><p>参考：</p><blockquote><p>  chatgpt</p><p>  <a href="https://www.jianshu.com/p/9e0007ca91b8">https://www.jianshu.com/p/9e0007ca91b8</a></p></blockquote>]]></content>
    
    
    <summary type="html">简单的介绍 vim 的使用</summary>
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="vim" scheme="https://shyi.org/tags/vim/"/>
    
  </entry>
  
  <entry>
    <title>搭建pandora(潘多拉)</title>
    <link href="https://shyi.org/posts/50848/"/>
    <id>https://shyi.org/posts/50848/</id>
    <published>2023-06-07T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.948Z</updated>
    
    <content type="html"><![CDATA[<p><del><a href="https://github.com/pengzhile/pandora">官方</a></del></p><p><a href="https://github.com/zhile-io/pandora">官方</a></p><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker pull pengzhile/pandora:latest<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run  -d \<br>  --name=<span class="hljs-string">&quot;pandora&quot;</span> \<br>  --restart=unless-stopped \<br>  -e PANDORA_CLOUD=cloud \<br>  -e PANDORA_SERVER=0.0.0.0:3001 \<br>  -p 3001:3001 \<br>  -v /home/&lt;username&gt;/pandora/data:/data \<br>pengzhile/pandora:latest<br><span class="hljs-comment"># 这里我使用-p 127.0.0.1:3001:3001</span><br></code></pre></td></tr></table></figure><p>docker-compose.yaml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">pandora:</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">&#x27;pandora&#x27;</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;pengzhile/pandora:latest&#x27;</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">&#x27;unless-stopped&#x27;</span><br>    <span class="hljs-attr">user:</span> <span class="hljs-string">&#x27;1000:1000&#x27;</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;PANDORA_CLOUD=cloud&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;PANDORA_SERVER=0.0.0.0:3001&#x27;</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;127.0.0.1:3001:3001&#x27;</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;/home/&lt;username&gt;/pandora/data:/data&#x27;</span><br></code></pre></td></tr></table></figure><h2 id="Docker环境变量"><a href="#Docker环境变量" class="headerlink" title="Docker环境变量"></a>Docker环境变量</h2><ul><li><code>PANDORA_ACCESS_TOKEN</code> 指定<code>Access Token</code>字符串。</li><li><code>PANDORA_TOKENS_FILE</code> 指定一个存放多<code>Access Token</code>的文件路径。</li><li><code>PANDORA_PROXY</code> 指定代理，格式：<code>protocol://user:pass@ip:port</code>。</li><li><code>PANDORA_SERVER</code> 以<code>http</code>服务方式启动，格式：<code>ip:port</code>。</li><li><code>PANDORA_API</code> 使用<code>gpt-3.5-turbo</code>API请求，<strong>你可能需要向<code>OpenAI</code>支付费用</strong>。</li><li><code>PANDORA_SENTRY</code> 启用<code>sentry</code>框架来发送错误报告供作者查错，敏感信息<strong>不会被发送</strong>。</li><li><code>PANDORA_VERBOSE</code> 显示调试信息，且出错时打印异常堆栈信息，供查错使用。</li><li>使用Docker方式，设置环境变量即可，无视上述<code>程序参数</code>。</li></ul><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span> <br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">server_name</span> domain;<br>    <span class="hljs-attribute">return</span> <span class="hljs-number">301</span> https://<span class="hljs-variable">$server_name</span><span class="hljs-variable">$request_uri</span>;<br>&#125;<br><br><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> ssl;<br>    <span class="hljs-attribute">server_name</span> domain;<br><span class="hljs-attribute">ssl_certificate</span>     crt/pem;<br><span class="hljs-attribute">ssl_certificate_key</span>   key;<br>    <span class="hljs-section">location</span> /<br>    &#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:3001;<br>        <span class="hljs-comment"># 反代gpt相关服务没有打字机效果开启下面</span><br>        <span class="hljs-comment"># proxy_buffering off;</span><br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> REMOTE-HOST <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-comment"># 此方法可能不适合域名反代</span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-attribute">add_header</span> Cache-Control <span class="hljs-literal">no</span>-cache;<br>    &#125;<br>    <span class="hljs-attribute">access_log</span>  /www/wwwlogs/domain.log;  <span class="hljs-comment">#日志可以不写</span><br>    <span class="hljs-comment">#error_log   /www/wwwlogs/domain.error.log;</span><br>&#125;<br></code></pre></td></tr></table></figure><ul><li>点击 <a href="https://chat.zhile.io/">https://chat.zhile.io</a></li><li>最新拿 <code>Access Token</code> 的技术原理，我记录在<a href="https://zhile.io/2023/05/19/how-to-get-chatgpt-access-token-via-pkce.html">这里</a>了。</li><li>也可以官方登录，然后访问 <a href="http://chat.openai.com/api/auth/session">chat.openai.com&#x2F;api&#x2F;auth&#x2F;session</a> 拿  <code>Access Token</code></li><li>使用<code>Access Token</code>方式登录，有效期 <code>14</code> 天,可以无代理直连。</li><li><a href="https://ai.fakeopen.com/auth">ai.fakeopen.com&#x2F;auth</a> 可以帮你安全有效拿到<code>Access Token</code>，无论是否第三方登录。</li><li>其中<code>accessToken</code>字段的那一长串内容即是<code>Access Token</code>。</li><li>不要泄露你的<code>Access Token</code>，使用它可以操纵你的账号。</li></ul><h2 id="help"><a href="#help" class="headerlink" title="help"></a>help</h2><ul><li>对话界面<strong>连敲两次</strong><code>Enter</code>发送你的输入给<code>ChatGPT</code>。</li><li>对话界面使用<code>/?</code>可以打印支持的操作命令。</li><li><code>/title</code> 重新设置当前对话的标题。</li><li><code>/select</code> 回到选择会话界面。</li><li><code>/reload</code> 重新加载当前会话所有内容，<code>F5</code>你能懂吧。</li><li><code>/regen</code> 如果对<code>ChatGPT</code>当前回答不满意，可以让它重新回答。</li><li><code>/continue</code> 让<code>ChatGPT</code>继续输出回复的剩余部分。</li><li><code>/edit</code> 编辑你之前的一个提问。</li><li><code>/new</code> 直接开启一个新会话。</li><li><code>/del</code> 删除当前会话，回到会话选择界面。</li><li><code>/token</code> 打印当前的<code>Access Token</code>，也许你用得上，但不要泄露。</li><li><code>/copy</code> 复制<code>ChatGPT</code>上一次回复的内容到剪贴板。</li><li><code>/copy_code</code> 复制<code>ChatGPT</code>上一次回复的代码到剪贴板</li><li><code>/clear</code> 清屏，应该不用解释。</li><li><code>/version</code> 打印<code>Pandora</code>的版本信息。</li><li><code>/exit</code> 退出<code>潘多拉</code>。</li></ul><blockquote><p>  <a href="https://github.com/pengzhile/pandora/blob/master/doc/wiki.md">https://github.com/pengzhile/pandora/blob/master/doc/wiki.md</a></p></blockquote>]]></content>
    
    
    <summary type="html">绕过 Cloudflare实现了网页版 ChatGPT 的主要操作</summary>
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="pandora" scheme="https://shyi.org/tags/pandora/"/>
    
  </entry>
  
  <entry>
    <title>搭建静态博客</title>
    <link href="https://shyi.org/posts/47666/"/>
    <id>https://shyi.org/posts/47666/</id>
    <published>2023-06-03T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.948Z</updated>
    
    <content type="html"><![CDATA[<p>hexo优点很多，缺点就是会下载一大堆node_modules，不乱装mod很少出错。</p><p>hugo优点就是快，依赖少，缺点是主题少，需要自己动手能力强。</p><p>下面记录自己踩的坑，避免之后重新安装浪费时间。</p><h3 id="hexo"><a href="#hexo" class="headerlink" title="hexo"></a>hexo</h3><p>安装nodejs、git</p><p>设置npm代理加块下载</p><figure class="highlight tcl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs tcl">npm config <span class="hljs-keyword">set</span> <span class="hljs-keyword">registry</span> <span class="hljs-keyword">http</span>://<span class="hljs-keyword">registry</span>.npm.taobao.org/<br>npm config <span class="hljs-keyword">set</span> <span class="hljs-keyword">registry</span> https://<span class="hljs-keyword">registry</span>.npmjs.org/<br>npm --<span class="hljs-keyword">registry</span> https://<span class="hljs-keyword">registry</span>.npm.taobao.org<br></code></pre></td></tr></table></figure><p>新建blog文件夹并进入</p><p>hexo init （需要访问github）</p><p>选择一个主题</p><p>  我选择的是fluid，去release下载解压后放到themes&#x2F;fluid里面，每个主题安装方法不同，如果是npm安装的话在node_modules里，git安装的话会在themes文件夹里</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">https:<span class="hljs-regexp">//gi</span>thub.com<span class="hljs-regexp">/fluid-dev/</span>hexo-theme-fluid/releases<br></code></pre></td></tr></table></figure><p>将fluid里面的 <code>_config.yml</code> 修改为 <code>_config.fluid.yml</code> 复制到blog根目录，修改<code>_config.yml</code>的 <code>theme: fluid</code></p><p>hexo g 生成文件无报错</p><p>如果出现错误 <code>Error: Cannot find module &#39;css&#39;</code> 执行</p><figure class="highlight ada"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ada">npm install css <span class="hljs-comment">--save</span><br></code></pre></td></tr></table></figure><p>修改blog根目录下的 <code>_config.yml</code></p><figure class="highlight nestedtext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs nestedtext"><span class="hljs-attribute">deploy</span><span class="hljs-punctuation">:</span><br>  <span class="hljs-attribute">type</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&#x27;git&#x27;</span><br>  <span class="hljs-attribute">repository</span><span class="hljs-punctuation">:</span> <span class="hljs-string">git@github.com:用户名/仓库名.git</span><br>  <span class="hljs-comment"># 如果有多个github账号改为</span><br>  <span class="hljs-comment">#repository: git@two.github.com:用户名/仓库名.git</span><br>  <span class="hljs-attribute">branch</span><span class="hljs-punctuation">:</span> <span class="hljs-string">main</span><br></code></pre></td></tr></table></figure><p>hexo d 部署到github上</p><p>ERROR Deployer not found: git</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">npm install hexo-deployer-git --save<br></code></pre></td></tr></table></figure><p>为了方便搜索引擎索引需要装以下插件，然后在_config.yml里添加</p><p><strong>hexo-generator-baidu-sitemap这个插件可能与其他插件冲突，慎重安装。</strong>出错后进入node_mod目录删除hexo-generator-baidu目录。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># npm i hexo-generator-baidu-sitemap --save # 百度用 ×</span><br>npm i hexo-generator-sitemap --save <span class="hljs-comment"># Google √</span><br><br>npm install hexo-abbrlink --save <span class="hljs-comment"># 优化路径 √</span><br><span class="hljs-comment"># 使用上面的就不需要使用下面的拼音了</span><br><span class="hljs-comment"># npm install hexo-permalink-pinyin --save # 生成中文拼音的永久链接 ×</span><br><br>npm install hexo-generator-feed --save <span class="hljs-comment"># 添加 RSS 订阅 √</span><br><br>npm install hexo-all-minifier --save <span class="hljs-comment"># 压缩 HTML, CSS, JS and Image √</span><br></code></pre></td></tr></table></figure><p><code>_config.yml</code>添加如下</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-comment"># 自动生成sitemap</span><br><span class="hljs-attr">sitemap:</span><br>  <span class="hljs-attr">path:</span> <span class="hljs-string">sitemap.xml</span><br><span class="hljs-comment">#baidusitemap:</span><br><span class="hljs-comment">#  path: baidusitemap.xml</span><br>  <br><span class="hljs-comment"># hexo-abbrlink</span><br><span class="hljs-attr">abbrlink:</span><br>  <span class="hljs-attr">alg:</span> <span class="hljs-string">crc16</span>      <span class="hljs-comment">#support crc16(default) and crc32</span><br>  <span class="hljs-attr">rep:</span> <span class="hljs-string">dec</span>        <span class="hljs-comment">#support dec(default) and hex</span><br>  <span class="hljs-attr">drafts:</span> <span class="hljs-literal">false</span>   <span class="hljs-comment">#(true)Process draft,(false)Do not process draft. false(default) </span><br>  <span class="hljs-comment"># Generate categories from directory-tree</span><br>  <span class="hljs-comment"># depth: the max_depth of directory-tree you want to generate, should &gt; 0</span><br>  <span class="hljs-attr">auto_category:</span><br>     <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span>  <span class="hljs-comment">#true(default)</span><br>     <span class="hljs-attr">depth:</span>        <span class="hljs-comment">#3(default)</span><br>     <span class="hljs-attr">over_write:</span> <span class="hljs-literal">false</span> <br>  <span class="hljs-attr">auto_title:</span> <span class="hljs-literal">false</span> <span class="hljs-comment">#enable auto title, it can auto fill the title by path</span><br>  <span class="hljs-attr">auto_date:</span> <span class="hljs-literal">false</span> <span class="hljs-comment">#enable auto date, it can auto fill the date by time today</span><br>  <span class="hljs-attr">force:</span> <span class="hljs-literal">false</span> <span class="hljs-comment">#enable force mode,in this mode, the plugin will ignore the cache, and calc the abbrlink for every post even it already had abbrlink. This only updates abbrlink rather than other front variables.</span><br><br><span class="hljs-attr">permalink:</span> <span class="hljs-string">posts/:abbrlink/</span> <br><span class="hljs-comment"># or</span><br><span class="hljs-attr">permalink:</span> <span class="hljs-string">posts/:abbrlink.html</span><br><br><span class="hljs-comment"># permalink_pinyin</span><br><span class="hljs-attr">permalink_pinyin:</span><br>  <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">separator:</span> <span class="hljs-string">&#x27;-&#x27;</span> <span class="hljs-comment"># default: &#x27;-&#x27;</span><br><br><span class="hljs-comment"># Extensions</span><br><span class="hljs-attr">plugins:</span><br>  <span class="hljs-string">hexo-generator-feed</span><br><span class="hljs-comment"># 添加 RSS 订阅</span><br><span class="hljs-attr">feed:</span><br>  <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">type:</span> <span class="hljs-string">atom</span><br>  <span class="hljs-attr">path:</span> <span class="hljs-string">atom.xml</span><br>  <span class="hljs-attr">limit:</span> <span class="hljs-number">30</span><br>  <span class="hljs-attr">hub:</span><br>  <span class="hljs-attr">content:</span><br>  <span class="hljs-attr">content_limit:</span> <span class="hljs-number">140</span><br>  <span class="hljs-attr">content_limit_delim:</span> <span class="hljs-string">&quot; &quot;</span><br>  <span class="hljs-attr">order_by:</span> <span class="hljs-string">-date</span><br><br><span class="hljs-comment"># Minifier</span><br><span class="hljs-attr">all_minifier:</span> <span class="hljs-literal">true</span><br></code></pre></td></tr></table></figure><p><code>_config.yml</code> 中的 updated_option</p><figure class="highlight avrasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs avrasm"><span class="hljs-symbol">mtime:</span> 使用md文件最后修改时间<br><span class="hljs-symbol">date:</span> 使用文章的日期<br><span class="hljs-symbol">empty:</span> 不显示更新时间<br></code></pre></td></tr></table></figure><p>建议每装一个mod，执行一下hexo g，如果无报错，直接执行 <code>hexo g -d</code> 即可。</p><figure class="highlight nestedtext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs nestedtext"><span class="hljs-attribute">并列分类，了解一下：</span><br><span class="hljs-attribute">categories</span><span class="hljs-punctuation">:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">[Linux]</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">[Tools]</span><br><br><span class="hljs-attribute">并列+子分类，再了解一下：</span><br><span class="hljs-attribute">categories</span><span class="hljs-punctuation">:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">[Linux, Hexo]</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">[Tools, PHP]</span><br></code></pre></td></tr></table></figure><p>我使用的方案是先上传到github私密仓库-&gt;自动同步到vercel-&gt;使用cloudflare。</p><h5 id="hugo"><a href="#hugo" class="headerlink" title="hugo"></a>hugo</h5><p>选择带extended的进行下载<br><a href="https://github.com/gohugoio/hugo/releases">https://github.com/gohugoio/hugo/releases</a> </p><p>新建blog-hugo文件夹，进入文件夹后 <code>hugo new site .</code> 生成初始文件</p><p>git clone <a href="https://github.com/dillonzq/LoveIt.git">https://github.com/dillonzq/LoveIt.git</a> themes&#x2F;LoveIt</p><p>config.toml添加 <code>theme = &quot;LoveIt&quot;</code> </p><p>hugo new posts&#x2F;first_post.md</p><p>hugo # 生成静态文件</p><p>hugo serve # 本地预览</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;hexo优点很多，缺点就是会下载一大堆node_modules，不乱装mod很少出错。&lt;/p&gt;
&lt;p&gt;hugo优点就是快，依赖少，缺点是主题少，需要自己动手能力强。&lt;/p&gt;
&lt;p&gt;下面记录自己踩的坑，避免之后重新安装浪费时间。&lt;/p&gt;
&lt;h3 id=&quot;hexo&quot;&gt;&lt;a hr</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="hexo" scheme="https://shyi.org/tags/hexo/"/>
    
    <category term="hugo" scheme="https://shyi.org/tags/hugo/"/>
    
  </entry>
  
  <entry>
    <title>使用gpg加密文件并备份</title>
    <link href="https://shyi.org/posts/50617/"/>
    <id>https://shyi.org/posts/50617/</id>
    <published>2023-06-02T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.946Z</updated>
    
    <content type="html"><![CDATA[<p>将服务器上重要文件加密并备份</p><h3 id="安装gpg"><a href="#安装gpg" class="headerlink" title="安装gpg"></a>安装gpg</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装gpg</span><br><span class="hljs-built_in">sudo</span> apt-get install gnupg<br><span class="hljs-comment"># 生成密钥</span><br>gpg --full-generate-key<br><span class="hljs-comment"># 选择RSA和4096位</span><br><span class="hljs-comment"># 输入您的姓名和电子邮件地址，这些信息将成为您的GPG密钥的标识符</span><br><span class="hljs-comment"># 输入一个安全的密码短语，它将用于保护您的私钥</span><br></code></pre></td></tr></table></figure><h4 id="导出私钥以及公钥"><a href="#导出私钥以及公钥" class="headerlink" title="导出私钥以及公钥"></a>导出私钥以及公钥</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 查看您的公钥</span><br>gpg --list-keys<br><span class="hljs-comment"># 查看您的私钥</span><br>gpg --list-secret-keys<br><span class="hljs-comment"># 导出公钥，--armor 选项将公钥导出为 ASCII 格式，方便地将复制到其他地方使用，key-id使用上面两个命令获取，一对公钥和私钥的key-id是一致的</span><br>gpg --<span class="hljs-built_in">export</span> --armor &lt;key-id&gt; &gt; public.key.asc<br><span class="hljs-comment"># 导出私钥</span><br>gpg --export-secret-keys --armor &lt;key-id&gt; &gt; private.key.asc<br></code></pre></td></tr></table></figure><h4 id="导入私钥以及公钥"><a href="#导入私钥以及公钥" class="headerlink" title="导入私钥以及公钥"></a>导入私钥以及公钥</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 导入私钥</span><br>gpg --import [private_key_file]<br><span class="hljs-comment"># 导入公钥</span><br>gpg --import [public_key_file]<br><br><span class="hljs-comment"># 为防止每次使用都会询问，所以设置一下对公/私钥的信任</span><br><span class="hljs-comment"># 获取公钥ID</span><br>gpg --list-keys<br>gpg --edit-key &lt;KEY-ID&gt;<br>&gt; trust<br><span class="hljs-comment"># 输入5</span><br>  1 = I don<span class="hljs-string">&#x27;t know or won&#x27;</span>t say<br>  2 = I <span class="hljs-keyword">do</span> NOT trust<br>  3 = I trust marginally<br>  4 = I trust fully<br>  5 = I trust ultimately<br>  m = back to the main menu<br><br>Your decision?  &gt; 5<br>&gt; y<br></code></pre></td></tr></table></figure><h4 id="gpg加密以及解密"><a href="#gpg加密以及解密" class="headerlink" title="gpg加密以及解密"></a>gpg加密以及解密</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 加密，生成文件名为filename.gpg</span><br>gpg -e -r recipient@example.com filename<br><br><span class="hljs-comment"># 加密，绝对路径</span><br>gpg --output /path/to/output/file.gpg --recipient &lt;recipient&gt; --encrypt /path/to/input/file<br><span class="hljs-comment"># 解密，绝对路径</span><br>gpg --output /path/to/output/file --decrypt /path/to/input/file.gpg<br></code></pre></td></tr></table></figure><h3 id="编写脚本"><a href="#编写脚本" class="headerlink" title="编写脚本"></a>编写脚本</h3><p>将下面文件保存成backup.sh</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 打包log</span><br>tar -zcf /root/temp/log.tar.gz /log/<br>gpg --output /root/temp/valu.tar.gz.gpg --recipient recipient@example.com --encrypt /root/temp/log.tar.gz<br><span class="hljs-built_in">mv</span> /root/temp/log.tar.gz.gpg /root/temp/$(<span class="hljs-built_in">date</span> +%Y-%m-%d_%H-%M-%S)_log.tar.gz.gpg<br><br><span class="hljs-comment"># 打包home</span><br>tar -zcf /root/temp/home.tar.gz /home/<br>gpg --output /root/temp/home.tar.gz.gpg --recipient recipient@example.com --encrypt /root/temp/home.tar.gz<br><span class="hljs-built_in">mv</span> /root/temp/home.tar.gz.gpg /root/temp/$(<span class="hljs-built_in">date</span> +%Y-%m-%d_%H-%M-%S)_home.tar.gz.gpg<br><br><span class="hljs-built_in">rm</span> /root/temp/*.tar.gz<br>rclone copy /root/temp/ jap:data<br><span class="hljs-built_in">rm</span> /root/temp/*<br></code></pre></td></tr></table></figure><h4 id="使用crontab执行备份"><a href="#使用crontab执行备份" class="headerlink" title="使用crontab执行备份"></a>使用crontab执行备份</h4><p>crontab -e</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs crontab">33 3 * * 1 bash backup.sh<br></code></pre></td></tr></table></figure><h3 id="安装rclone"><a href="#安装rclone" class="headerlink" title="安装rclone"></a>安装rclone</h3><ol><li>包管理器直接安装</li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt-get update<br><span class="hljs-built_in">sudo</span> apt-get install rclone<br></code></pre></td></tr></table></figure><ol start="2"><li>手动下载可执行文件</li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 下载，国内使用第二个</span><br>curl -o rclone.zip https://downloads.rclone.org/rclone-current-linux-amd64.zip <span class="hljs-comment">#速度可能很慢</span><br><span class="hljs-comment"># 高速</span><br>curl -o rclone.zip https://ghproxy.com/https://github.com/rclone/rclone/releases/download/v1.62.2/rclone-v1.62.2-linux-amd64.zip<br><br>unzip rclone.zip<br><span class="hljs-built_in">cd</span> rclone-*-linux-amd64<br><br><span class="hljs-comment"># 加入环境变量</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> rclone /usr/bin/<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> root:root /usr/bin/rclone<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chmod</span> 755 /usr/bin/rclone<br><br><span class="hljs-comment"># 感觉不是很必须</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /usr/local/share/man/man1<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> rclone.1 /usr/local/share/man/man1/<br><span class="hljs-built_in">sudo</span> mandb<br><br><span class="hljs-comment"># 清理多余文件</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">rm</span> rclone.zip<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">rm</span> -rf rclone-*-linux-amd64<br></code></pre></td></tr></table></figure><p>参考: <a href="https://shyi.org/posts/2221/#%E5%AE%89%E8%A3%85rclone">安装rclone</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">rclone config<br><span class="hljs-comment"># 选择自己的方式，这里选择的是webdav。</span><br><span class="hljs-comment"># 参考https://rclone.org/install/</span><br></code></pre></td></tr></table></figure><h4 id="rclone常用命令"><a href="#rclone常用命令" class="headerlink" title="rclone常用命令"></a>rclone常用命令</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">rclone copy /本地文件夹路径 远程webdav路径<br><span class="hljs-comment"># 例如下方，使用-P可以查看实时速度</span><br>rclone copy /home/user/photos remote:photos [-P]<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash">rclone copy <span class="hljs-built_in">source</span>:path dest:path：<span class="hljs-comment"># 将源路径中的文件复制到目标路径中。</span><br><br>rclone <span class="hljs-built_in">sync</span> <span class="hljs-built_in">source</span>:path dest:path：<span class="hljs-comment"># 将源路径和目标路径中的文件进行同步。</span><br><br>rclone move <span class="hljs-built_in">source</span>:path dest:path：<span class="hljs-comment"># 将源路径中的文件移动到目标路径中。</span><br><br>rclone delete remote:path：<span class="hljs-comment"># 删除远程路径中的文件。</span><br><br>rclone <span class="hljs-built_in">ls</span> remote:path：<span class="hljs-comment"># 列出远程路径中的文件。</span><br><br>rclone <span class="hljs-built_in">mkdir</span> remote:path：<span class="hljs-comment"># 在远程路径中创建一个新的目录。</span><br><br>rclone mount remote:path /local/mount/point：# 将远程路径挂载到本地文件系统中。<br></code></pre></td></tr></table></figure><h4 id="卸载rclone"><a href="#卸载rclone" class="headerlink" title="卸载rclone"></a>卸载rclone</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt autoremove rclone<br><span class="hljs-comment"># 删除rclone的配置文件，用户名”替换为您的用户名</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">rm</span> -rf /home/用户名/.config/rclone/<br></code></pre></td></tr></table></figure><p>参考：</p><p><a href="https://rclone.org/install/">rclone</a></p><p><a href="https://crontab.guru/">crontab</a></p><p><a href="https://account.teracloud.jp/RegistForm.php/index/">infinicloud</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;将服务器上重要文件加密并备份&lt;/p&gt;
&lt;h3 id=&quot;安装gpg&quot;&gt;&lt;a href=&quot;#安装gpg&quot; class=&quot;headerlink&quot; title=&quot;安装gpg&quot;&gt;&lt;/a&gt;安装gpg&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="rclone" scheme="https://shyi.org/tags/rclone/"/>
    
    <category term="gpg" scheme="https://shyi.org/tags/gpg/"/>
    
    <category term="tar" scheme="https://shyi.org/tags/tar/"/>
    
  </entry>
  
  <entry>
    <title>反代openai api</title>
    <link href="https://shyi.org/posts/25062/"/>
    <id>https://shyi.org/posts/25062/</id>
    <published>2023-06-01T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.946Z</updated>
    
    <content type="html"><![CDATA[<p>在本地搭建chatgpt-next-web需要设置反代</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-comment"># 设置白名单访问</span><br><span class="hljs-attribute">map</span> <span class="hljs-variable">$real</span> <span class="hljs-variable">$allowed</span> <br>&#123;<br>    <span class="hljs-attribute">default</span> <span class="hljs-number">0</span>;<br>    192.168.1.33 1;<br>&#125;<br><br><span class="hljs-section">server</span> <br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">server_name</span> example.com;<br>    <span class="hljs-attribute">return</span> <span class="hljs-number">301</span> https://<span class="hljs-variable">$server_name</span><span class="hljs-variable">$request_uri</span>;<br>&#125;<br><br><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span>                  <span class="hljs-number">443</span> ssl;<br>    <span class="hljs-attribute">server_name</span>             example.com;<br><span class="hljs-attribute">ssl_certificate</span> pem/crt;<br><span class="hljs-attribute">ssl_certificate_key</span> key;<br>    <span class="hljs-comment">#经过测试，反代https不是必须使用https，这里使用https还是为了安全而已。</span><br>    <br>    <span class="hljs-attribute">ssl_protocols</span> TLSv1.<span class="hljs-number">2</span> TLSv1.<span class="hljs-number">3</span>;<br><span class="hljs-attribute">ssl_ciphers</span> ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;<br>    <span class="hljs-attribute">ssl_prefer_server_ciphers</span> <span class="hljs-literal">on</span>;<br>    <span class="hljs-attribute">ssl_session_cache</span> shared:SSL:<span class="hljs-number">10m</span>;<br>    <span class="hljs-attribute">ssl_session_timeout</span> <span class="hljs-number">10m</span>;<br>    <span class="hljs-attribute">ssl_buffer_size</span> <span class="hljs-number">10k</span>;<br>    <span class="hljs-attribute">ssl_verify_depth</span> <span class="hljs-number">5</span>;<br>    <span class="hljs-attribute">ssl_stapling</span> <span class="hljs-literal">on</span>;<br>    <span class="hljs-attribute">ssl_stapling_verify</span> <span class="hljs-literal">on</span>;<br>    <span class="hljs-attribute">resolver</span> <span class="hljs-number">8.8.8.8</span> <span class="hljs-number">8.8.4.4</span> valid=<span class="hljs-number">300s</span>;<br>    <span class="hljs-attribute">resolver_timeout</span> <span class="hljs-number">30s</span>;<br><br>    <span class="hljs-comment"># 设置单个白名单</span><br>   <span class="hljs-comment"># if ($real != &quot;192.168.1.1&quot;) &#123;</span><br>   <span class="hljs-comment">#     return 403;</span><br>   <span class="hljs-comment"># &#125;</span><br>   <br>   <span class="hljs-attribute">if</span> (<span class="hljs-variable">$allowed</span> = <span class="hljs-number">0</span>) &#123;<br><span class="hljs-attribute">return</span> <span class="hljs-number">403</span>;<br>&#125;<br><br> <span class="hljs-section">location</span> / <br> &#123;<br>        <span class="hljs-attribute">proxy_pass</span>  https://api.openai.com;<br>        <span class="hljs-attribute">proxy_ssl_server_name</span> <span class="hljs-literal">on</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> Host api.openai.com;<br>        <span class="hljs-attribute">proxy_set_header</span> Connection <span class="hljs-string">&#x27;&#x27;</span>;<br>        <span class="hljs-attribute">proxy_http_version</span> <span class="hljs-number">1</span>.<span class="hljs-number">1</span>;<br>        <span class="hljs-attribute">chunked_transfer_encoding</span> <span class="hljs-literal">off</span>;<br>        <span class="hljs-attribute">proxy_buffering</span> <span class="hljs-literal">off</span>;<br>        <span class="hljs-attribute">proxy_cache</span> <span class="hljs-literal">off</span>;<br>        <span class="hljs-attribute">keepalive_timeout</span> <span class="hljs-number">600</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto <span class="hljs-variable">$scheme</span>;<br> &#125;<br>    <span class="hljs-comment">#access_log  /www/wwwlogs/site.log;  #日志可以不写</span><br>    <span class="hljs-comment">#error_log   /www/wwwlogs/site.error.log;</span><br>&#125;<br></code></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在本地搭建chatgpt-next-web需要设置反代&lt;/p&gt;
&lt;figure class=&quot;highlight nginx&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span c</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Nginx" scheme="https://shyi.org/tags/Nginx/"/>
    
  </entry>
  
  <entry>
    <title>Nginx获取用户真实ip</title>
    <link href="https://shyi.org/posts/43696/"/>
    <id>https://shyi.org/posts/43696/</id>
    <published>2023-05-28T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Nginx获取用户真实ip"><a href="#Nginx获取用户真实ip" class="headerlink" title="Nginx获取用户真实ip"></a>Nginx获取用户真实ip</h2><p>为了网站的正常运行，所以我们要对网站的访问做一些限制，如果网站没有使用CDN，也就是用户直接与服务器相连，网站的访问方式为：用户浏览器-&gt;服务器。</p><p>如果网站使用了CDN，那么网站的访问方式就变成了：用户浏览器-&gt;CDN-&gt;服务器，这个时候方案一就会对CDN的IP做出限制，起到了相反的作用。</p><p>如果是第一种，此时 $remote_addr显示的正是用户的IP，如果使用CDN，那么remote_addr显示的是CDN的IP，remote_addr获取到的 IP 是 Web 服务器 TCP 连接的 IP（这个不能伪造，如果伪造了源 IP，无法建立 TCP 连接，更不会有后面的 HTTP 请求）</p><p>X-Forwarded-For 是一个扩展头，用来表示 HTTP 请求端真实 IP。</p><figure class="highlight axapta"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs axapta"><span class="hljs-meta">#X-Forwarded-For请求头格式非常简单</span><br>X-Forwarded-For:<span class="hljs-keyword">client</span>, proxy1, proxy2<br></code></pre></td></tr></table></figure><blockquote><p>最远的为客户端IP，但是注意这个客户端IP是可以伪造的。有些CDN是提供realip(可能要企业用户才能使用，cf提供了<strong>CF-Connecting-IP</strong>，<strong>True-Client-IP</strong>（仅Enterprise计划）)，我们普通用户使用cf的话可以好好利用CF-Connecting-IP来获取用户真实IP。</p></blockquote><p>获取真实IP</p><p>map需要放入nginx.conf或者site.conf中非server段</p><ol><li><h3 id="通过CloudFlare的CDN-CF-Connecting-IP-获取真实IP（可信程度较高）"><a href="#通过CloudFlare的CDN-CF-Connecting-IP-获取真实IP（可信程度较高）" class="headerlink" title="通过CloudFlare的CDN CF-Connecting-IP 获取真实IP（可信程度较高）"></a>通过CloudFlare的CDN <code>CF-Connecting-IP</code> 获取真实IP（可信程度较高）</h3></li></ol><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">map</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span> <span class="hljs-variable">$real</span> &#123;<br>    &quot;&quot; $remote_addr;<br>    &quot;~^([0-9a-fA-F:.]+)$&quot; $HTTP_CF_CONNECTING_IP;<br>&#125;<br><span class="hljs-comment"># 或者</span><br><span class="hljs-attribute">map</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span> <span class="hljs-variable">$real</span> &#123;<br>    &quot;&quot; $remote_addr;<br>    &quot;~^(?&lt;ipv6&gt;[a-fA-F0-9:]+)$&quot; $ipv6;<br>    &quot;~^(?&lt;ipv4&gt;[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$&quot; $ipv4;<br>    <span class="hljs-attribute">default</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span>;<br>&#125;<br><span class="hljs-comment"># 或者</span><br><span class="hljs-attribute">map</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span> <span class="hljs-variable">$real</span> &#123;<br>    &quot;&quot; $remote_addr;<br>    <span class="hljs-attribute">default</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span>;<br>&#125;<br><br><span class="hljs-comment"># 如果 $HTTP_CF_CONNECTING_IP 的值是 IPv6 或 IPv4 地址，那么将 $HTTP_CF_CONNECTING_IP 赋值给 $real。</span><br><span class="hljs-comment"># 表示匹配以IPv4/6地址开头和结尾的字符串，并将匹配到的IPv4/6地址存储在名为ipv4/6的变量中。</span><br><span class="hljs-comment"># default $HTTP_CF_CONNECTING_IP; 如果HTTP_CF_CONNECTING_IP不匹配上述两个正则表达式，则将其值赋给real变量。</span><br><span class="hljs-comment">#这几种经过我测试都是正确的。</span><br><span class="hljs-comment"># $HTTP_CF_CONNECTING_IP是CF-Connecting-IP的值。</span><br><span class="hljs-comment"># Nginx 使用了 PCRE（Perl Compatible Regular Expressions）库来解析正则表达式，而 PCRE 支持&quot;?&lt;ipv4&gt;&quot;与&quot;?P&lt;ipv4&gt;&quot;这两种语法形式。</span><br></code></pre></td></tr></table></figure><ol start="2"><li><h3 id="通过-http-x-forwarded-for-获取真实IP（可信程度较低）"><a href="#通过-http-x-forwarded-for-获取真实IP（可信程度较低）" class="headerlink" title="通过 http_x_forwarded_for  获取真实IP（可信程度较低）"></a>通过 <code>http_x_forwarded_for</code>  获取真实IP（可信程度较低）</h3></li></ol><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">map</span> <span class="hljs-variable">$http_x_forwarded_for</span> <span class="hljs-variable">$clientRealIP</span>&#123;<br>    &quot;&quot; $remote_addr;<br>    ~^(?P&lt;firstAddr&gt;[0-9a-fA-F:.]+),?.*$ $firstAddr;<br>&#125;<br><span class="hljs-comment">#要注意是否符合IP格式。</span><br><span class="hljs-comment"># $firstAddr是http_x_forwarded_for（X-Forwarded-For）值的第一个，容易被伪造。</span><br></code></pre></td></tr></table></figure><ol start="3"><li><h3 id="通过nginx的realip模块获取真实地址（可信程度较低）"><a href="#通过nginx的realip模块获取真实地址（可信程度较低）" class="headerlink" title="通过nginx的realip模块获取真实地址（可信程度较低）"></a>通过nginx的realip模块获取真实地址（可信程度较低）</h3></li></ol><p>通过X-Forwarded-For获取用户真实IP，然后赋值给$remote_addr,但不是很可靠。</p><p><strong>没有尝试，这只是一种方法。</strong></p><p>可以尝试从$HTTP_CF_CONNECTING_IP获取用户真实IP，然后赋值给remote_addr。</p><ol start="4"><li><h3 id="没有使用CDN（可信程度较高）"><a href="#没有使用CDN（可信程度较高）" class="headerlink" title="没有使用CDN（可信程度较高）"></a>没有使用CDN（可信程度较高）</h3></li></ol><p>如果没有使用CDN，那么直接使用 <code>$remote_addr</code></p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br></code></pre></td></tr></table></figure><p>则 <code>HTTP_X_REAL_IP</code> 的值为用户真实的ip。</p><h3 id="总结："><a href="#总结：" class="headerlink" title="总结："></a><strong>总结：</strong></h3><p>我认为通过 <code>CF-Connecting-IP</code>  获取到的IP真实性高，强烈建议使用第一种，如果CDN提供商不是CloudFlare且没有提供客户端 IP 地址，那么只能使用第二种。</p><p>我们可以完全信任  <code>HTTP_CF_CONNECTING_IP</code> ，而不是 <code>http_x_forwarded_for</code> </p><p>获取到真实IP后就可以对这些IP的活动进行限制。</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">map</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span> <span class="hljs-variable">$real</span> &#123;<br>    &quot;&quot; $remote_addr;<br>    &quot;~^(?&lt;ipv6&gt;[a-fA-F0-9:]+)$&quot; $ipv6;<br>    &quot;~^(?&lt;ipv4&gt;[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$&quot; $ipv4;<br>    <span class="hljs-attribute">default</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span>;<br>&#125;<br><br><span class="hljs-comment"># 第一行：map $HTTP_CF_CONNECTING_IP $real 定义了一个映射表，将变量 $HTTP_CF_CONNECTING_IP 的值映射到 $real 变量的值。</span><br><span class="hljs-comment"># 第二行：&quot;&quot; $remote_addr 是一个映射规则。当 $HTTP_CF_CONNECTING_IP 的值为空字符串时，将使用 $remote_addr（客户端的 IP 地址）作为 $real 的值。</span><br><span class="hljs-comment"># 第三行：&quot;~^(?&lt;ipv6&gt;[a-fA-F0-9:]+)$&quot; $ipv6 是另一个映射规则。它使用正则表达式匹配符合 IPv6 地址格式的字符串，并将匹配的内容保存到 $ipv6 变量中。如果匹配成功，将使用 $ipv6 作为 $real 的值。</span><br><span class="hljs-comment"># 第四行：&quot;~^(?&lt;ipv4&gt;[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$&quot; $ipv4 是另一个映射规则。它使用正则表达式匹配符合 IPv4 地址格式的字符串，并将匹配的内容保存到 $ipv4 变量中。如果匹配成功，将使用 $ipv4 作为 $real 的值。</span><br><span class="hljs-comment"># 最后一行：default $HTTP_CF_CONNECTING_IP 是默认的映射规则。当前面的规则都不匹配时，将使用 $HTTP_CF_CONNECTING_IP 的值作为 $real 的值。</span><br></code></pre></td></tr></table></figure><h3 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h3><p>我们获取到了用户的真实ip，那么我们要怎么使用他们呢？</p><p>以前都写过就不在赘述了。</p><h4 id="日志"><a href="#日志" class="headerlink" title="日志"></a>日志</h4><p><a href="https://shyi.org/posts/16650/#%E8%8E%B7%E5%8F%96%E8%AE%BF%E5%AE%A2%E7%9C%9F%E5%AE%9EIP">nginx</a></p><p>有一些变量需要改一下，比如map中的 <code>$real</code> , <code>$clientRealIP</code></p><p>log_format  main 中的 <code>$real</code> , <code>$clientRealIP</code> , <code>$http_x_forwarded_for</code></p><p><code>log_format</code>  和 <code>map</code> 要放在server{}以外</p><h4 id="应用"><a href="#应用" class="headerlink" title="应用"></a>应用</h4><p><a href="https://shyi.org/posts/58867/">搭建图床</a></p><h4 id="限制速率"><a href="#限制速率" class="headerlink" title="限制速率"></a>限制速率</h4><p>vim &#x2F;etc&#x2F;nginx&#x2F;nginx.conf</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs nginx">http&#123;<br>    ...<br>    <span class="hljs-attribute">map</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span> <span class="hljs-variable">$real</span> &#123;<br>    &quot;&quot; $remote_addr;<br>    <span class="hljs-attribute">default</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span>;<br>&#125;<br>    <br>    <span class="hljs-attribute">limit_conn_zone</span> <span class="hljs-variable">$real</span> zone=perserver:<span class="hljs-number">10m</span>;<br>    <span class="hljs-attribute">limit_conn</span> perserver <span class="hljs-number">20</span>;  <span class="hljs-comment"># 每个IP 最多同时建立20个连接</span><br>    <span class="hljs-attribute">limit_conn_log_level</span> <span class="hljs-literal">notice</span>;<br>    <span class="hljs-attribute">limit_req_zone</span> <span class="hljs-variable">$real</span> zone=one:<span class="hljs-number">10m</span> rate=15r/s;  <span class="hljs-comment"># 每个IP允许每秒发送10个请求</span><br>    <span class="hljs-attribute">limit_req_log_level</span> <span class="hljs-literal">notice</span>;<br>    <span class="hljs-attribute">limit_req_status</span> <span class="hljs-number">403</span>;  <span class="hljs-comment"># 返回状态403！</span><br>    <span class="hljs-attribute">limit_req</span> zone=one burst=<span class="hljs-number">10</span> nodelay;  <span class="hljs-comment"># 瞬时请求不超过 5 个，不延迟处理请求</span><br>    ...<br>&#125;<br>server&#123;<br>    ...<br>    <span class="hljs-comment">#也可以加到每个站点配置中</span><br>    <span class="hljs-comment">#limit_conn perserver 50;</span><br><span class="hljs-comment">#limit_req zone=one burst=10 nodelay;  # 不建议在子项中开启nodelay，如果有一些静态文件特别多很容易触发流控，可以适当增加这两个值。</span><br>    <span class="hljs-comment">#limit_rate_after 10m; #前10m不限速</span><br>    <span class="hljs-comment">#limit_rate 512k; #流量限制</span><br>    ...<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="我们需要知道的"><a href="#我们需要知道的" class="headerlink" title="我们需要知道的"></a>我们需要知道的</h3><figure class="highlight tp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><code class="hljs tp"><span class="hljs-number">1</span>. 几个概念<br>remote_addr：如果中间没有代理，这个就是客户端的真实IP，如果有代理，这就是上层代理的IP.<br><span class="hljs-keyword">X</span>-Forwarded-For：一个HTTP扩展头，格式为 <span class="hljs-keyword">X</span>-Forwarded-For: client, proxy<span class="hljs-number">1</span>, proxy<span class="hljs-number">2</span><br><span class="hljs-keyword">X</span>-Real-IP：自定义的HTTP头，用于把客户端真实IP一层层传递下去。<br><br><span class="hljs-number">2</span>.几个变量<br><span class="hljs-variable">$remote_addr</span>：上层IP（客户端或代理）<br><span class="hljs-variable">$proxy_add_x_forwarded_for</span>：包括客户端请求头的<span class="hljs-keyword">X</span>-Forwarded-For和<span class="hljs-variable">$remote_addr</span><br><span class="hljs-variable">$http_x_forwarded_for</span>：就是<span class="hljs-keyword">X</span>-Forwarded-For的值<br><br><span class="hljs-number">3</span>. 获取客户端真实IP的方法<br>    <span class="hljs-number">3</span><span class="hljs-number">.1</span> 通过设置<span class="hljs-keyword">X</span>-real-IP层层传递<br>        首层代理：proxy_set_header <span class="hljs-keyword">X</span>-Real-IP <span class="hljs-variable">$remote_addr</span>;   针对首层代理，拿到真实IP<br>        非首层代理：proxy_set_header <span class="hljs-keyword">X</span>-Real-IP <span class="hljs-variable">$http_x_real_ip</span>;  # 针对非首层代理，一直传下去<br>    <span class="hljs-number">3</span><span class="hljs-number">.2</span> 通过设置<span class="hljs-keyword">X</span>-Forwarded-For请求头<br>        proxy_set_header            <span class="hljs-keyword">X</span>-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        然后截取<span class="hljs-keyword">X</span>-Forward-For请求头的第一段，即是客户端的真实IP<br><br><span class="hljs-number">4</span>. 经过CDN后，获取用户真实IP的方法<br>    <span class="hljs-number">4</span><span class="hljs-number">.1</span> 一般CDN都会传递<span class="hljs-keyword">X</span>-Forwarded-For请求头，通过<span class="hljs-keyword">X</span>-Forwarded-For请求头获取用户真实IP。<br>    <span class="hljs-number">4</span><span class="hljs-number">.2</span> 后端Nginx配置<br>    http &#123;<br>        map <span class="hljs-variable">$http_x_forwarded_for</span>  <span class="hljs-variable">$clientRealIp</span> &#123;<br>        <span class="hljs-string">&quot;&quot;</span>      <span class="hljs-variable">$remote_addr</span>;<br>        ~^(?<span class="hljs-keyword">P</span>&lt;firstAddr&gt;[<span class="hljs-number">0</span><span class="hljs-number">-9</span>\.]+),?.*$  <span class="hljs-variable">$firstAddr</span>;<br>    &#125;<br><br>    &#125;        <br>    我们通过map自定义了一个变量<span class="hljs-variable">$clientRealIp</span>；<br>    如果<span class="hljs-keyword">X</span>-Forwarded-For头是空的，那么客户端真实IP就是remote_addr；<br>    如果<span class="hljs-keyword">X</span>-Forwarded-For头非空，我们就通过正则匹配，捕获到第一段，这就是用户的真实IP，当然有可能是用户伪造的；<br>    必须注意的是，在每一层代理都要设置<span class="hljs-keyword">X</span>-Forwarded-For头。<br></code></pre></td></tr></table></figure><p>安装压力测试软件</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget http://download.joedog.org/siege/siege-4.1.1.tar.gz<br>tar -zxvf siege-4.1.1.tar.gz<br><br><span class="hljs-built_in">cd</span> siege-4.1.1<br>./configure --with-ssl=/usr/bin/openssl<br>make clean<br>make &amp;&amp; make install<br><br>siege -c 1000 -r 10000 -d 10 &lt;url&gt;<br></code></pre></td></tr></table></figure><h3 id="参考与引用："><a href="#参考与引用：" class="headerlink" title="参考与引用："></a>参考与引用：</h3><blockquote><p><a href="https://blog.csdn.net/lishi9905/article/details/93882699">nginx通过cloudflare cdn的请求头获取用户真实ip 兼容Ipv6</a></p><p><a href="https://www.kchuhai.com/report/view-19321.html">Cloudflare如何处理HTTP请求标头？</a></p><p><a href="https://developers.cloudflare.com/fundamentals/get-started/reference/http-request-headers/">HTTP request headers</a></p><p><a href="https://support.cloudflare.com/hc/en-us/articles/200170786">Restoring original visitor IPs</a></p><p><a href="https://limbopro.com/archives/1852.html">https://limbopro.com/archives/1852.html</a></p><p><a href="https://www.imydl.tech/lnmp/231.html">https://www.imydl.tech/lnmp/231.html</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Nginx获取用户真实ip&quot;&gt;&lt;a href=&quot;#Nginx获取用户真实ip&quot; class=&quot;headerlink&quot; title=&quot;Nginx获取用户真实ip&quot;&gt;&lt;/a&gt;Nginx获取用户真实ip&lt;/h2&gt;&lt;p&gt;为了网站的正常运行，所以我们要对网站的访问做一些限制</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Nginx" scheme="https://shyi.org/tags/Nginx/"/>
    
    <category term="获取用户真实ip" scheme="https://shyi.org/tags/%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E7%9C%9F%E5%AE%9Eip/"/>
    
  </entry>
  
  <entry>
    <title>IRC使用教程</title>
    <link href="https://shyi.org/posts/27005/"/>
    <id>https://shyi.org/posts/27005/</id>
    <published>2023-04-21T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<p>有些时候我们需要使用 <code>IRC</code> 下面是一些常用网站的IRC命令</p><p>在使用IRC前要安装IRC客户端，推荐使用 <a href="https://hub.docker.com/r/thelounge/thelounge">thelounge</a></p><h3 id="安装thelounge"><a href="#安装thelounge" class="headerlink" title="安装thelounge"></a>安装thelounge</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run --detach \<br>  --name thelounge \<br>  --publish 127.0.0.1:11111:9000 \<br>  --volume /home/&lt;username&gt;/thelounge:/var/opt/thelounge \<br>  --restart unless-stopped \<br>thelounge/thelounge:latest<br></code></pre></td></tr></table></figure><p>docker-compose.yaml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">thelounge:</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">&#x27;thelounge&#x27;</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">&#x27;unless-stopped&#x27;</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;thelounge/thelounge:latest&#x27;</span><br>    <span class="hljs-comment"># user: &#x27;1000:1000&#x27;</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;127.0.0.1:11111:9000&#x27;</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;/home/&lt;username&gt;/thelounge:/var/opt/thelounge&#x27;</span><br></code></pre></td></tr></table></figure><p>nginx反代</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-comment"># listen 443 ssl;</span><br>    <span class="hljs-attribute">server_name</span> domain;<br>    <span class="hljs-comment"># ssl_certificate        crt/pem;</span><br>    <span class="hljs-comment"># ssl_certificate_key    key;</span><br>    <span class="hljs-section">location</span> /<br>    &#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:11111/;<br>       <span class="hljs-attribute">proxy_http_version</span> <span class="hljs-number">1</span>.<span class="hljs-number">1</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> Connection <span class="hljs-string">&quot;upgrade&quot;</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> Upgrade <span class="hljs-variable">$http_upgrade</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-comment"># 如果配置了$real请注释上一条，取消下一条注释</span><br>        <span class="hljs-comment"># proxy_set_header X-Forwarded-For $real;</span><br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto <span class="hljs-variable">$scheme</span>;<br><br>        <span class="hljs-comment"># by default nginx times out connections in one minute</span><br><span class="hljs-attribute">proxy_read_timeout</span> <span class="hljs-number">1d</span>;<br>    &#125;<br>    <span class="hljs-comment">#access_log  /www/wwwlogs/thelounge.log;  #日志可以不写</span><br>    <span class="hljs-comment">#error_log   /www/wwwlogs/thelounge.error.log;</span><br>&#125;<br></code></pre></td></tr></table></figure><p>如果使用 nginx ssl 反代，那么就将 <code>--publish 11111:9000</code> 改成 <code>--publish 127.0.0.1：11111:9000</code> 这样通过https访问更安全。</p><blockquote><p>  怎么解决设置里显示172.17.0.1？</p></blockquote><ol><li>修改config.js中的第50行为 <code>reverseProxy: true</code> ；</li><li>修改nginx中对应site配置文件 proxy_set_header X-Forwarded-For $real;</li></ol><blockquote><p>  如何添加$real请参考之前的文章 <a href="https://shyi.org/posts/43696/">Nginx获取用户真实ip.</a></p></blockquote><p>直接修改config.js中的第50行为reverseProxy: true的话非常容易伪造，虽然已经做好日志的真实IP记录，但是对于这些现象还是不能够容忍。</p><p><img src="https://img.shyi.org/images/2af1b416e980475dcad4764c0c766730.png" alt="image-20230529233933718"></p><blockquote><p>  查看代码后知道修改config.js的第50行后，不会使用socket连接的ip，而是使用X-Forwarded-For头部中的数据</p><p>  那我们直接将nginx的配置文件修改为 proxy_set_header X-Forwarded-For $real;</p></blockquote><h3 id="使用thelounge添加用户"><a href="#使用thelounge添加用户" class="headerlink" title="使用thelounge添加用户"></a>使用thelounge添加用户</h3><p>执行第一行命令添加一个thelounge用户，登录后按照下面进行。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it thelounge thelounge add &lt;username&gt;<br><span class="hljs-comment"># 第一个thelounge是容器名，第二个thelounge是容器内部的应用程序</span><br><br>Usage:<br>  docker <span class="hljs-built_in">exec</span> -it thelounge thelounge [options] [<span class="hljs-built_in">command</span>]<br><br>Options:<br>    -v, --version             output the version number<br>    -c, --config &lt;key=value&gt;  override entries of the configuration file, must be specified <span class="hljs-keyword">for</span> each entry that needs to be overriden<br>    -h, --<span class="hljs-built_in">help</span><br>  <br>Commands:<br>    start [options]           Start the server<br>    add [options] &lt;name&gt;      Add a new user<br>    reset [options] &lt;name&gt;    Reset user password<br>    list                      List all <span class="hljs-built_in">users</span><br>    remove &lt;name&gt;             Remove an existing user<br>    edit &lt;name&gt;               Edit user file located at /var/opt/thelounge/users/&lt;name&gt;.json<br>    install &lt;package&gt;         Install a theme or a package<br>    uninstall &lt;package&gt;       Uninstall a theme or a package<br>    upgrade [packages...]     Upgrade installed themes and packages to their latest versions<br>    outdated                  Check <span class="hljs-keyword">for</span> any outdated packages<br>    <span class="hljs-built_in">help</span> [<span class="hljs-built_in">command</span>]            display <span class="hljs-built_in">help</span> <span class="hljs-keyword">for</span> <span class="hljs-built_in">command</span><br><br><span class="hljs-comment"># &lt;&gt; 表示必填然后去掉&lt;&gt;</span><br><br><span class="hljs-comment"># 或者执行以下命令进入容器添加用户</span><br>docker <span class="hljs-built_in">exec</span> -it thelounge sh<br>thelounge add &lt;username&gt;<br><span class="hljs-comment"># 然后输入用户名密码就能够登录了</span><br><span class="hljs-comment"># ctrl + A + D / exit 退出容器</span><br><br></code></pre></td></tr></table></figure><blockquote><p>  thelounge建议部署到vps上，最好是国外的vps，有的IRC地址被墙，最重要的原因：部署在本地断连的次数会非常多，如果在help频道排队就会重新排队。</p></blockquote><h3 id="IRC流程"><a href="#IRC流程" class="headerlink" title="IRC流程"></a>IRC流程</h3><img src="https://img.shyi.org/images/278dfe31f7b06be242c5a7a284beffb2.png" alt="流程图" style="zoom: 80%;" /><ol><li>点 <strong>+</strong> 号，创建新的 Network</li></ol><img src="https://img.shyi.org/images/b402382f88d24e31640afe245d441553.png" alt="1" style="zoom: 50%;" /><ol start="2"><li>右键或长按该 Network，添加Commands</li></ol><blockquote><p>  添加Commands的目的是 重新连接Network不用重复输入进入命令</p></blockquote><img src="https://img.shyi.org/images/a9e2c400ed519dd7bf14944ba7f20f5f.png" style="zoom:50%;" /><h3 id="肝功能"><a href="#肝功能" class="headerlink" title="肝功能"></a>肝功能</h3><p><code>irc.gazellegames.net</code><br>SSL 端口：7000<br>非SSL：6667</p><p>使用7000要取消第二个勾<br>不想使用ssl就使用 6667 端口，然后取消所有的勾。</p><p>ggn&#x2F;wiki.php?action&#x3D;article&amp;name&#x3D;IRC+-+How+to+join</p><p><strong>第一次登录</strong></p><p>ggn主要是进help频道、announce频道、GazelleGames 频道、AfterHours频道，可以到 <code>Edit</code> -&gt; <code>Auto-Join IRC Channels</code> 选择自动加入和获取想要进的频道。</p><p>设置里设置的叫 <code>irc_key</code> ，自己设置的叫 <code>irc_passwd</code> 。</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs text">/msg NickServ REGISTER &lt;irc_passwd&gt; &lt;email&gt;<br># 将你的用户名注册，上面irc_passwd是自己设置的，建议不要使用与之前的一致<br># 现在虽然已经登录，但是并没有认证<br><br>/msg Vertigo ENTER &lt;site_nick&gt; &lt;irc_key&gt;<br># irc_key 在edit里面生成<br># 以上是认证的命令<br><br>/msg Vertigo ENTER [#channel] &lt;site_nick&gt; &lt;irc_key&gt;<br># 常用channal #GGn-Announce #GazelleGames #AfterHours #GGn-Help<br><br># 比如<br>/msg Vertigo ENTER Your_site_nick Your_irc_key<br>/msg Vertigo ENTER #GGn-Announce Your_site_nick Your_irc_key<br><br># []非必须，&lt;&gt;为必须<br># 需要记住irc_passwd 以便于下一次登录<br># irc_key 与 irc_passwd 要区分<br></code></pre></td></tr></table></figure><p><strong>第二次登录</strong></p><p>以后都只需要输入 <code>ENTER</code> 这条命令</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs text"># 第一行命令非必须<br>/msg NickServ IDENTIFY &lt;irc_passwd&gt;<br><br># 第二行命令必须，[]非必须，&lt;&gt;为必须<br>/msg Vertigo ENTER [#channel] &lt;site_nick&gt; &lt;irc_key&gt;<br><br># 比如<br>/msg Vertigo ENTER Your_site_nick Your_irc_key<br>/msg Vertigo ENTER #GGn-Announce Your_site_nick Your_irc_key<br></code></pre></td></tr></table></figure><h3 id="红"><a href="#红" class="headerlink" title="红"></a>红</h3><p>red&#x2F;wiki.php?action&#x3D;article&amp;id&#x3D;22</p><p><code>irc.scratch-network.net</code><br>SSL ports: 6697 or 7000<br>Unencrypted port: 6667</p><p>红主要是进help频道和announce频道</p><p><strong>第一次登录</strong></p><p>设置里设置的叫 <code>irc_key</code> ，自己设置的叫 <code>irc_passwd</code> </p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs text">/msg NickServ register &lt;irc_passwd&gt; &lt;email&gt;<br># irc_passwd 自己设置<br><br>/msg Drone enter &lt;#channel1,#channel2,#channel3&gt; &lt;site_nick&gt; &lt;irc_key&gt;<br><br># 比如下面，#redacted-announce #RED-Help<br>/msg Drone enter #redacted-announce Your_site_nick Your_irc_key<br></code></pre></td></tr></table></figure><p><strong>第二次登录</strong></p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs text"># 第一行命令非必须<br>/msg NickServ identify &lt;irc_passwd&gt;<br><br># 第二行命令必须，[]非必须，&lt;&gt;为必须<br>/msg Drone enter &lt;#channel1,#channel2,#channel3&gt; &lt;site_nick&gt; &lt;irc_key&gt;<br><br># 比如<br>/msg Drone enter #redacted-announce Your_site_nick Your_irc_key<br></code></pre></td></tr></table></figure><p>其他都大致相同，需要参考官方的WIKI。</p><h3 id="通用常用命令"><a href="#通用常用命令" class="headerlink" title="通用常用命令"></a>通用常用命令</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs text">/list #Show Channel List<br>/nick #Change Nickname<br>/leave #Leave the Channel<br>/connect#Connect or Reconnect the Network<br>/disconnect #Disconnect the Network<br>/join &lt;#channel&gt; #Join the Channel<br></code></pre></td></tr></table></figure><p>其他的可以参考</p><p><a href="https://mylovesaber.gitee.io/dophin-blog/2020/09/16/irc-plus/">https://mylovesaber.gitee.io/dophin-blog/2020/09/16/irc-plus/</a></p><p><a href="https://mylovesaber.gitee.io/dophin-blog/2020/09/11/irc-basic/">https://mylovesaber.gitee.io/dophin-blog/2020/09/11/irc-basic/</a></p><h3 id="autobrr"><a href="#autobrr" class="headerlink" title="autobrr"></a>autobrr</h3><p><a href="https://github.com/autobrr/autobrr">官方</a> </p><p>docker-compose.yaml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&quot;3.7&quot;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">autobrr:</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">autobrr</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;ghcr.io/autobrr/autobrr:latest&#x27;</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">unless-stopped</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;TZ=Asia/shanghai&#x27;</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;./config:/config&#x27;</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;7474:7474&#x27;</span><br></code></pre></td></tr></table></figure><p><code>Setting </code>-&gt; <code>Indexers</code> -&gt; <code>Add indexer</code></p><p>先使用thelounge创建一个 <strong>用户名|bot</strong> 或者 <strong>用户名-bot</strong> ，选择对应tracker，在IRC部分填入信息，替换Invite command 中的 <strong>USERNAME</strong> 和 <strong>IRCKEY</strong> 为自己的。</p><p>使用之前：</p><ul><li>去站内Wiki找IRC</li><li>使用IRC客户端，比如thelounge登录一下，知道完整登录需要的<strong>所有信息</strong>。</li></ul><p>流程：</p><ol><li>配置Setting -&gt; Indexers</li><li>配置Setting -&gt; IRC</li><li>配置Setting -&gt; Clients</li><li>至少配置Filters -&gt; General(选择Indexers) 和 Filters -&gt; Actions(选择Clients)</li></ol><p>以下信息可能过期（<strong>必须是填用到的信息，多填都可能登陆失败，最好是只填带*的</strong>）</p><table><thead><tr><th>Update Network</th><th></th></tr></thead><tbody><tr><td>Name</td><td>Network Name</td></tr><tr><td>Enabled</td><td>勾选为启动</td></tr><tr><td>Server</td><td>同IRC服务地址</td></tr><tr><td>Port</td><td>同 IRC PORT</td></tr><tr><td>TLS</td><td>同上</td></tr><tr><td>Password</td><td>IRC_Passwd</td></tr><tr><td>Nick</td><td>建议新注册一个username-bot</td></tr><tr><td><strong>Identification</strong></td><td></td></tr><tr><td>Mechanism</td><td>用SASL或NickServ进行识别。大多数网络支持SASL，但有些不支持。不支持的使用NickServ&#x2F;None</td></tr><tr><td>Account</td><td>同上<strong>Nick</strong></td></tr><tr><td>Password</td><td>同 <strong>IRC_Passwd</strong></td></tr><tr><td>Invite command</td><td>&#x2F;msg Vertigo ENTER &lt;#channel&gt; <site_nick> <irc_key>  # 替换成对应网站的command</td></tr></tbody></table><p>PS. 建议使用thelounge新创建一个 <strong>用户名-bot</strong> 或者<strong>用户名|bot</strong>，然后autobbr使用bot用户名，thelounge使用用户名登录观察新种是否能被bot账号读取。同时避免耽误使用IRC。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;有些时候我们需要使用 &lt;code&gt;IRC&lt;/code&gt; 下面是一些常用网站的IRC命令&lt;/p&gt;
&lt;p&gt;在使用IRC前要安装IRC客户端，推荐使用 &lt;a href=&quot;https://hub.docker.com/r/thelounge/thelounge&quot;&gt;thelounge</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Docker" scheme="https://shyi.org/tags/Docker/"/>
    
    <category term="IRC" scheme="https://shyi.org/tags/IRC/"/>
    
  </entry>
  
  <entry>
    <title>挂载阿里云到本地</title>
    <link href="https://shyi.org/posts/2221/"/>
    <id>https://shyi.org/posts/2221/</id>
    <published>2023-03-28T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<h2 id="一、获取refresh-token"><a href="#一、获取refresh-token" class="headerlink" title="一、获取refresh token"></a>一、获取refresh token</h2><ol><li><a href="https://messense-aliyundrive-webdav-backendrefresh-token-ucs0wn.streamlit.app/">在线工具获取refresh token</a></li></ol><p>如果显示获取超时，那就执行以下步骤即可</p><p>先扫码后点1，然后把1的token放到2里面就可以回去refresh token了。</p><img src="https://img.shyi.org/images/cbf72259c822c5763760c1de5b34e219.jpg" alt="875dcf3090b68799f68f7d4b77b3328" style="zoom: 15%;" /><ol start="2"><li>命令行运行 <code>aliyundrive-webdav qr login</code> 扫码授权后会输出 refresh token</li></ol><p>我们下面要使用docker运行<code>aliyundrive-webdav</code>，不能直接使用命令行，我们要先执行<code>docker exec -it aliyundrive-webdav sh</code>进入容器后执行<code>aliyundrive-webdav qr login</code>即可.</p><p>ps. unraid直接在界面点击打开容器就能直接进入容器内部。</p><h2 id="二、Docker-运行"><a href="#二、Docker-运行" class="headerlink" title="二、Docker 运行"></a>二、Docker 运行</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8081:8080 \<br>  -v &lt;your_path&gt;:/etc/aliyundrive-webdav \<br>  -e REFRESH_TOKEN=&lt;your_token&gt; \<br>  -e WEBDAV_AUTH_USER=&lt;your_username&gt; \<br>  -e WEBDAV_AUTH_PASSWORD=&lt;your_password&gt; \<br>  -e NO_SELF_UPGRADE=1 \<br>  -e Community_Applications_Conversion=<span class="hljs-literal">true</span> \<br>  messense/aliyundrive-webdav:latest<br></code></pre></td></tr></table></figure><blockquote><p>  ps. 只需要更改REFRESH_TOKEN即可，第6、7行官网没有可以不加。</p><p>  等号前后不能加空格</p><p>  一般我使用 ‘127.0.0.1:8081:8080’</p></blockquote><p>docker-compose.yaml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">aliyundrive-webdav:</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">&#x27;aliyundrive-webdav&#x27;</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;messense/aliyundrive-webdav:latest&#x27;</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">&#x27;unless-stopped&#x27;</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;8081:8080&#x27;</span>  <span class="hljs-comment">#一般我使用 &#x27;127.0.0.1:8081:8080&#x27;</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;&lt;your_path&gt;:/etc/aliyundrive-webdav&#x27;</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;REFRESH_TOKEN=&lt;your_token&gt;&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;WEBDAV_AUTH_USER=&lt;your_username&gt;&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;WEBDAV_AUTH_PASSWORD=&lt;your_password&gt;&#x27;</span><br>      <span class="hljs-comment">#- &#x27;NO_SELF_UPGRADE=1&#x27;</span><br>      <span class="hljs-comment">#- &#x27;Community_Applications_Conversion=true&#x27;</span><br></code></pre></td></tr></table></figure><p>运行完成后我们访问<code>http://ip:8081</code> 既可访问阿里云的webdav</p><img src="https://img.shyi.org/images/e6de1130ce0865fe660865722681163c.png" alt="image-20230329132743204" style="zoom: 80%;" /><p>怎么将aliyunwebdav挂载到本地（群晖、unraid、Linux）？</p><h2 id="三、使用rclone挂载"><a href="#三、使用rclone挂载" class="headerlink" title="三、使用rclone挂载"></a>三、使用rclone挂载</h2><p><a href="https://rclone.org/install/">rclone官网</a></p><p><a href="https://github.com/rclone/rclone/releases/">rclone gthub仓库</a></p><h3 id="安装rclone"><a href="#安装rclone" class="headerlink" title="安装rclone"></a>安装rclone</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 下载，国内使用第二个</span><br>curl -o rclone.zip https://downloads.rclone.org/rclone-current-linux-amd64.zip <span class="hljs-comment">#速度可能很慢</span><br><span class="hljs-comment"># 高速</span><br>curl -o rclone.zip https://ghproxy.com/https://github.com/rclone/rclone/releases/download/v1.62.2/rclone-v1.62.2-linux-amd64.zip<br><br>unzip rclone.zip<br><span class="hljs-built_in">cd</span> rclone-*-linux-amd64<br><br><span class="hljs-comment"># 加入环境变量</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> rclone /usr/bin/<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> root:root /usr/bin/rclone<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chmod</span> 755 /usr/bin/rclone<br><br><span class="hljs-comment"># 感觉不是很必须</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /usr/local/share/man/man1<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> rclone.1 /usr/local/share/man/man1/<br><span class="hljs-built_in">sudo</span> mandb<br><br><span class="hljs-comment"># 清理多余文件</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">rm</span> rclone.zip<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">rm</span> -rf rclone-*-linux-amd64<br></code></pre></td></tr></table></figure><p>输入<code>rclone config</code>即可进入配置界面，</p><p><code>n) New remote</code> -&gt; 输入名称（挂载的时候会用到）例如<code>aliyun</code> -&gt; 选择46(这个序号不一定是46)<code>WebDAV (webdav)</code> -&gt; 输入url，例如<code>http://192.168.1.118:8081</code> -&gt;  选择<code>5 / Other site/service or software</code> -&gt; 输入用户名<code>admin</code> -&gt; 输入y<code>y) Yes, type in my own password</code>  -&gt; 输入密码，没有回显需要输入两遍<code>admin</code> -&gt; <code>bearer_token&gt; </code>直接回车 -&gt; Edit advanced config? 选择 <code>n) No (default)</code> -&gt; Keep this “aliyun” remote? 选择 <code>y) Yes this is OK (default)</code></p><p><img src="https://img.shyi.org/images/ffac33a5101ae324273c998dd6740a7f.png" alt="image-20230329150107258"></p><h3 id="rclone挂载"><a href="#rclone挂载" class="headerlink" title="rclone挂载"></a>rclone挂载</h3><p>如果是Linux直接挂载即可。Windows用户需要下载WinFsp，执行命令需要使用git bash。</p><h4 id="webdav挂载"><a href="#webdav挂载" class="headerlink" title="webdav挂载"></a>webdav挂载</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mkdir</span> -p /mnt/aliyun<br>apt-get install fuse3<br>rclone mount aliyun:/ /mnt/aliyun --copy-links --allow-other --allow-non-empty --<span class="hljs-built_in">umask</span> 000 --daemon<br><span class="hljs-comment">#第二行mount后面那个aliyun为 在New remote输入的aliyun</span><br><span class="hljs-comment"># 挂载本地目录的时候，多加个 --daemon 为进程守护参数，可后台运行。</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">crontab -e<br><br>@reboot rclone mount aliyun:/ /mnt/aliyun --copy-links --allow-other --allow-non-empty --<span class="hljs-built_in">umask</span> 000 --daemon<br><span class="hljs-comment"># 开机自动挂载</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 取消挂载</span><br><span class="hljs-built_in">df</span> -h<br>fusermount -u &lt;&gt;<br></code></pre></td></tr></table></figure><p>Windows需要下载WinFsp <a href="https://winfsp.dev/rel/">官网</a>  <a href="https://github.com/winfsp/winfsp/releases">GitHub</a> 。执行需要使用<a href="https://gitforwindows.org/">git bash</a> </p><p>rclone设置为环境变量，具体百度。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">rclone mount webdav: o: --cache-dir D:\Temp --allow-other --vfs-cache-mode writes --allow-non-empty<br><span class="hljs-comment"># --cache-dir D:\Temp 用于在上传之前暂存的地方</span><br><span class="hljs-comment"># 这条命令用来挂载webdav到Windows上，挂载aliyundriver的webdav可能会出错</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">rclone.exe mount ali:/ W: --vfs-cache-mode writes --cache-dir D:\Temp --network-mode --no-check-certificate --default-permissions --header <span class="hljs-string">&quot;Referer:https://www.aliyundrive.com/&quot;</span> --vfs-read-chunk-size-limit 1G --vfs-read-chunk-size 64M --dir-cache-time 12h --buffer-size 32M<br><span class="hljs-comment"># 这条命令用来挂载aliyundriver的webdav到Windows</span><br></code></pre></td></tr></table></figure><img src="https://img.shyi.org/images/ccff2f3ce8ff81b300e18a17d4312365.png" alt="image-20230329182249603" style="zoom: 67%;" /><p><img src="https://img.shyi.org/images/2e7a73cead004bf9be530851b3e44bd6.png" alt="image-20230329140604728"></p><h4 id="其他网盘的挂载"><a href="#其他网盘的挂载" class="headerlink" title="其他网盘的挂载"></a>其他网盘的挂载</h4><ol><li><p>安装Alist，<a href="https://shyi.org/posts/19117/">参考</a></p></li><li><p>对网盘进行配置</p></li><li><p>打开alist的webdav功能，地址为<a href="http://ip:5244/dav%EF%BC%8C%E5%A6%82%E6%9E%9C%E5%8F%8D%E4%BB%A3%E5%B0%B1%E6%98%AF">http://ip:5244/dav，如果反代就是</a> https:&#x2F;&#x2F;域名&#x2F;dav</p></li></ol><h5 id="百度网盘"><a href="#百度网盘" class="headerlink" title="百度网盘"></a>百度网盘</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">rclone mount baidu:/ K:  --vfs-cache-mode writes   --header <span class="hljs-string">&quot;Referer:https://pan.baidu.com/&quot;</span>  --header <span class="hljs-string">&quot;User-Agent:pan.baidu.com&quot;</span><br><br>rclone mount baidu:/ K: --cache-dir  D:\Temp --vfs-cache-mode writes   --header <span class="hljs-string">&quot;Referer:https://pan.baidu.com/&quot;</span>  --header <span class="hljs-string">&quot;User-Agent:pan.baidu.com&quot;</span> <br><br>rclone mount BaiduNetdisk:/ K: --cache-dir  D:\Temp --vfs-cache-mode full --header <span class="hljs-string">&quot;Referer:https://pan.baidu.com/&quot;</span>  --header <span class="hljs-string">&quot;User-Agent:pan.baidu.com&quot;</span>    --no-modtime --multi-thread-streams 8  --vfs-read-chunk-size  256M --vfs-read-chunk-size-limit 600M  --buffer-size 4096M<br><span class="hljs-comment"># 以上几条用来参考</span><br></code></pre></td></tr></table></figure><h5 id="阿里网盘"><a href="#阿里网盘" class="headerlink" title="阿里网盘"></a>阿里网盘</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">rclone mount Alist: /volume3/6T/Alist --use-mmap --<span class="hljs-built_in">umask</span> 000 --allow-other --allow-non-empty --dir-cache-time 24h --cache-dir=/home/cache --vfs-cache-mode full --buffer-size 512M --vfs-read-chunk-size 16M --vfs-read-chunk-size-limit 64M --vfs-cache-max-size 10G --daemon<br><br>rclone.exe mount ali:/ W: --vfs-cache-mode writes --cache-dir D:\Temp --network-mode --no-check-certificate --default-permissions --header <span class="hljs-string">&quot;Referer:https://www.aliyundrive.com/&quot;</span> --vfs-read-chunk-size-limit 1G --vfs-read-chunk-size 64M --dir-cache-time 12h --buffer-size 32M<br><br></code></pre></td></tr></table></figure><h5 id="迅雷云盘"><a href="#迅雷云盘" class="headerlink" title="迅雷云盘"></a>迅雷云盘</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">rclone mount ThunderNetdisk:/ T: --cache-dir  D:\Temp --vfs-cache-mode full --multi-thread-streams 8   --vfs-read-chunk-size 256M --vfs-read-chunk-size-limit 800M  --buffer-size 4096M<br><br>rclone mount ThunderNetdisk:/ T: --cache-dir  D:\Temp --vfs-cache-mode full --multi-thread-streams 8   --vfs-read-chunk-size 256M --vfs-read-chunk-size-limit 800M  --buffer-size 4096M<br><br></code></pre></td></tr></table></figure><h3 id="开机自动挂载"><a href="#开机自动挂载" class="headerlink" title="开机自动挂载;"></a>开机自动挂载;</h3><ol><li>编辑 &#x2F;etc&#x2F;crontab</li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/crontab<br>@reboot root rclone mount aliyun:/ /mnt/aliyun --copy-links --allow-other --allow-non-empty --<span class="hljs-built_in">umask</span> 000 --daemon<br></code></pre></td></tr></table></figure><h2 id="参考："><a href="#参考：" class="headerlink" title="参考："></a>参考：</h2><blockquote><p>  <a href="https://github.com/messense/aliyundrive-webdav">https://github.com/messense/aliyundrive-webdav</a></p><p>  <a href="https://rclone.org/install/">https://rclone.org/install/</a></p><p>  <a href="https://messense-aliyundrive-webdav-backendrefresh-token-ucs0wn.streamlit.app/">https://messense-aliyundrive-webdav-backendrefresh-token-ucs0wn.streamlit.app/</a></p><p>  <a href="https://blog.csdn.net/qq_35764295/article/details/126379879">https://blog.csdn.net/qq_35764295/article/details/126379879</a></p><p>  <a href="https://github.com/rclone/rclone">https://github.com/rclone/rclone</a></p><p>  <a href="https://blog.csdn.net/csdn_life18/article/details/127234864">https://blog.csdn.net/csdn_life18/article/details/127234864</a></p><p>  <a href="https://blog.csdn.net/qq_27387809/article/details/105443924">https://blog.csdn.net/qq_27387809/article/details/105443924</a></p><p>  <a href="https://post.smzdm.com/p/agqo096d/">https://post.smzdm.com/p/agqo096d/</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;一、获取refresh-token&quot;&gt;&lt;a href=&quot;#一、获取refresh-token&quot; class=&quot;headerlink&quot; title=&quot;一、获取refresh token&quot;&gt;&lt;/a&gt;一、获取refresh token&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a h</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="aliyun" scheme="https://shyi.org/tags/aliyun/"/>
    
    <category term="webdav" scheme="https://shyi.org/tags/webdav/"/>
    
    <category term="rclone" scheme="https://shyi.org/tags/rclone/"/>
    
    <category term="Alist" scheme="https://shyi.org/tags/Alist/"/>
    
  </entry>
  
  <entry>
    <title>安装aria2</title>
    <link href="https://shyi.org/posts/30327/"/>
    <id>https://shyi.org/posts/30327/</id>
    <published>2023-03-28T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.946Z</updated>
    
    <content type="html"><![CDATA[<h2 id="使用docker安装aria2"><a href="#使用docker安装aria2" class="headerlink" title="使用docker安装aria2"></a>使用docker安装aria2</h2><p><a href="https://hub.docker.com/r/superng6/aria2">aria2 docker hub</a></p><h3 id="1-命令行"><a href="#1-命令行" class="headerlink" title="1.命令行"></a>1.命令行</h3><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs routeros">docker <span class="hljs-built_in">run</span> -d \<br>  <span class="hljs-attribute">--name</span>=aria2 \<br>  --network host \<br>  -e <span class="hljs-attribute">PUID</span>=0 \<br>  -e <span class="hljs-attribute">PGID</span>=0 \<br>  -e <span class="hljs-attribute">TZ</span>=Asia/Shanghai \<br>  -e <span class="hljs-attribute">SECRET</span>=yourtoken \<br>  -e <span class="hljs-attribute">CACHE</span>=512M \<br>  -e <span class="hljs-attribute">PORT</span>=6800 \<br>  -e <span class="hljs-attribute">BTPORT</span>=32516 \<br>  -e <span class="hljs-attribute">WEBUI</span>=<span class="hljs-literal">true</span> \<br>  -e <span class="hljs-attribute">WEBUI_PORT</span>=8080 \<br>  -e <span class="hljs-attribute">UT</span>=<span class="hljs-literal">true</span> \<br>  -e <span class="hljs-attribute">RUT</span>=<span class="hljs-literal">true</span> \<br>  -e <span class="hljs-attribute">FA</span>=falloc \<br>  -e <span class="hljs-attribute">QUIET</span>=<span class="hljs-literal">true</span> \<br>  -e <span class="hljs-attribute">SMD</span>=<span class="hljs-literal">true</span> \<br>  -v /mnt/user/downloads1/aria2/config:<span class="hljs-built_in">/config </span>\<br>  -v /mnt/user/downloads1/aria2/downloads:/downloads \<br>  --restart unless-stopped \<br>  superng6/aria2:webui-latest<br></code></pre></td></tr></table></figure><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">ps</span>. 修改第<span class="hljs-number">6</span>行yourtoken<br><span class="hljs-attribute">root</span>用户的PUID、GUID都为<span class="hljs-number">0</span>，使用 id 用户名 查询<br></code></pre></td></tr></table></figure><h3 id="2-docker-compose-yaml"><a href="#2-docker-compose-yaml" class="headerlink" title="2. docker-compose.yaml"></a>2. docker-compose.yaml</h3><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs routeros">version: <span class="hljs-string">&quot;3.1&quot;</span><br>services:<br>aria2:<br>  image: superng6/aria2:webui-latest<br>  container_name: aria2<br>  network_mode: host<br>  environment:<br>    - <span class="hljs-attribute">PUID</span>=0<br>    - <span class="hljs-attribute">PGID</span>=0<br>    - <span class="hljs-attribute">TZ</span>=Asia/Shanghai<br>    - <span class="hljs-attribute">SECRET</span>=yourtoken<br>    - <span class="hljs-attribute">CACHE</span>=512M<br>    - <span class="hljs-attribute">PORT</span>=6800<br>    - <span class="hljs-attribute">WEBUI</span>=<span class="hljs-literal">true</span><br>    - <span class="hljs-attribute">WEBUI_PORT</span>=8080<br>    - <span class="hljs-attribute">BTPORT</span>=32516<br>    - <span class="hljs-attribute">UT</span>=<span class="hljs-literal">true</span><br>    - <span class="hljs-attribute">QUIET</span>=<span class="hljs-literal">true</span><br>    - <span class="hljs-attribute">SMD</span>=<span class="hljs-literal">true</span><br>  volumes:<br>    - /mnt/user/downloads1/aria2/config:<span class="hljs-built_in">/config</span><br><span class="hljs-built_in"></span>    - /mnt/user/downloads1/aria2/downloads:/downloads<br>  restart: unless-stopped<br></code></pre></td></tr></table></figure><p>保存为<code>docker-compose.yaml</code>，然后<code>docker-compose up -d </code>启动，<code>docker-compose stop</code>停止。</p><p>PS. 注意要在docker-compose同级目录下执行命令。</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">ps</span>. 修改第<span class="hljs-number">11</span>行yourtoken<br><span class="hljs-attribute">root</span>用户的PUID、GUID都为<span class="hljs-number">0</span>，使用 id 用户名 查询<br></code></pre></td></tr></table></figure><p>访问<code>http://ip:8080</code>会出现这种情况，不要慌张。</p><img src="https://img.shyi.org/images/18fddf6802b11b4ec2c6bfd443cbb04f.png" alt="image-20230329173524222" style="zoom: 40%;" /><img src="https://img.shyi.org/images/d60c45ccb3440f6c4ca89dbeb674a582.png" alt="image-20230329174104890" style="zoom:40%;" /><p>按照上图操作后能够连接成功。</p><p>桥接可能对p2p连接有影响。</p><p>如果无下载速度请检查文件夹权限</p><table><thead><tr><th>参数</th><th align="center">说明</th></tr></thead><tbody><tr><td><code>--name=aria2</code></td><td align="center">容器名设置为aria2</td></tr><tr><td><code>-v 本地文件夹1:/downloads</code></td><td align="center">Aria2下载位置</td></tr><tr><td><code>-v 本地文件夹2:/config</code></td><td align="center">Aria2配置文件位置</td></tr><tr><td><code>-e PUID=1026</code></td><td align="center">Linux用户UID</td></tr><tr><td><code>-e PGID=100</code></td><td align="center">Linux用户GID</td></tr><tr><td><code>-e SECRET=yourtoken</code></td><td align="center">Aria2 token</td></tr><tr><td><code>-e CACHE=1024M</code></td><td align="center">Aria2磁盘缓存配置</td></tr><tr><td><code>-e PORT=6800</code></td><td align="center">RPC通讯端口</td></tr><tr><td><code>-e WEBUI=true</code></td><td align="center">启用WEBUI</td></tr><tr><td><code>-e WEBUI_PORT=8080</code></td><td align="center">WEBUI端口</td></tr><tr><td><code>-e BTPORT=32516</code></td><td align="center">DHT和BT监听端口</td></tr><tr><td><code>-e UT=true</code></td><td align="center">启动容器时更新trackers</td></tr><tr><td><code>-e CTU=</code></td><td align="center">启动容器时更新自定义trackes地址</td></tr><tr><td><code>-e RUT=true</code></td><td align="center">每天凌晨3点更新trackers</td></tr><tr><td><code>-e SMD=true</code></td><td align="center">保存磁力链接为种子文件</td></tr><tr><td><code>-e FA=</code></td><td align="center">磁盘预分配模式<code>none</code>,<code>falloc</code>,<code>trunc</code>,<code>prealloc</code></td></tr><tr><td><code>-p 6800:6800</code></td><td align="center">Aria2 RPC连接端口</td></tr><tr><td><code>-p 6881:6881</code></td><td align="center">Aria2 tcp下载端口</td></tr><tr><td><code>-p 6881:6881/udp</code></td><td align="center">Aria2 p2p udp下载端口</td></tr><tr><td><code>--restart unless-stopped</code></td><td align="center">自动重启容器</td></tr></tbody></table><h2 id="题外话"><a href="#题外话" class="headerlink" title="题外话"></a>题外话</h2><p>官方给的命令行操作，我们可以学习一下</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">docker</span> run -d <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  --name=aria2 <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e PUID=<span class="hljs-number">1026</span> <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e PGID=<span class="hljs-number">100</span> <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e TZ=Asia/Shanghai <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e SECRET=yourtoken <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e CACHE=<span class="hljs-number">512</span>M <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e PORT=<span class="hljs-number">6800</span> <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e BTPORT=<span class="hljs-number">32516</span> <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e WEBUI=true <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e WEBUI_PORT=<span class="hljs-number">8080</span> <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e UT=true <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e RUT=true <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e FA=falloc <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e QUIET=true <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -e SMD=true <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -p <span class="hljs-number">32516</span>:<span class="hljs-number">32516</span> <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -p <span class="hljs-number">32516</span>:<span class="hljs-number">32516</span>/udp <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -p <span class="hljs-number">6800</span>:<span class="hljs-number">6800</span> <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -p <span class="hljs-number">8080</span>:<span class="hljs-number">8080</span> <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -v $PWD/config:/config <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  -v $PWD/downloads:/downloads <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  --restart unless-stopped <span class="hljs-punctuation">\</span><br><span class="hljs-punctuation"></span>  superng6/aria2:webui-latest<br></code></pre></td></tr></table></figure><blockquote><p>  -e 指定环境，然后容器内部再去处理这个环境变量</p><p>  -p 8080:80 表示将容器的80端口映射到宿主机的8080端口</p><p>  如果修改第8行，将端口6800改为6801，那么第19行冒号后面就要修改为6801，冒号后面为docker虚拟机的端口。</p><p>  官方的命令行是桥接的，但是他设置的有环境变量能够直接修改端口，所以我就直接设置成host模式了，然后把端口映射删除，想要修改端口就直接修改环境变量就行了。</p><p>  如果想要使用官方的命令行，比如修改web端口为6801，那么只需要修改19行为 -p 6801:6800，上方的环境变量不用修改。不建议使用桥接。</p><p>  UID与PUID要修改一下</p></blockquote><h2 id="参考："><a href="#参考：" class="headerlink" title="参考："></a>参考：</h2><blockquote><p>  <a href="https://hub.docker.com/r/superng6/aria2">https://hub.docker.com/r/superng6/aria2</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;使用docker安装aria2&quot;&gt;&lt;a href=&quot;#使用docker安装aria2&quot; class=&quot;headerlink&quot; title=&quot;使用docker安装aria2&quot;&gt;&lt;/a&gt;使用docker安装aria2&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://h</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="aria2" scheme="https://shyi.org/tags/aria2/"/>
    
  </entry>
  
  <entry>
    <title>如何安装MR(Movie Robot)</title>
    <link href="https://shyi.org/posts/29707/"/>
    <id>https://shyi.org/posts/29707/</id>
    <published>2023-01-06T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.948Z</updated>
    
    <content type="html"><![CDATA[<p>需要准备docker，域名，<strong>公网IP一枚</strong>，<strong>frp</strong>等</p><p><strong>关闭防火墙或者开启对应的端口（ufw、iptables、宝塔安全、服务商防火墙）</strong></p><h2 id="通过docker安装MR"><a href="#通过docker安装MR" class="headerlink" title="通过docker安装MR"></a>通过docker安装MR</h2><ol><li>Windows</li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -itd --name=mr --restart always \<br>-p 1329:1329 \<br>-v D:/MR/movie-robot:/data \<br>-v D:/MR/video:/video \<br>--<span class="hljs-built_in">env</span> <span class="hljs-string">&#x27;LICENSE_KEY=&lt;KEY&gt; \</span><br><span class="hljs-string">yipengfei/movie-robot:latest</span><br></code></pre></td></tr></table></figure><ol start="2"><li>Linux</li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -itd --name=mr --restart always --network host \<br>-p 1329:1329 \<br>-v /volume3/docker/movie-robot:/data \<br>-v /volume1/video:/video \<br>--<span class="hljs-built_in">env</span> <span class="hljs-string">&#x27;LICENSE_KEY=&lt;KEY&gt;&#x27;</span> \<br>yipengfei/movie-robot:latest<br></code></pre></td></tr></table></figure><p>docker-compose.yaml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">movie-robot:</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">&#x27;mr&#x27;</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;yipengfei/movie-robot:latest&#x27;</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">&#x27;unless-stopped&#x27;</span><br>    <span class="hljs-attr">network_mode:</span> <span class="hljs-string">&#x27;host&#x27;</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;1329:1329&#x27;</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;/volume3/docker/movie-robot:/data&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;/volume1/video:/video&#x27;</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;LICENSE_KEY=&lt;KEY&gt;&#x27;</span> <br></code></pre></td></tr></table></figure><p>安装过后打开IP:1329则进入MR的网页管理界面，点击站点管理会发现无站点数据</p><p><a href="https://github.com/zkl2333/MR-Extension">https://github.com/zkl2333/MR-Extension</a></p><p>或者下载网友提供的sites数据：</p><p><a href="https://github.com/lovebeefcat/movie-bot-conf">https://github.com/lovebeefcat/movie-bot-conf</a></p><p><a href="https://github.com/htnanako/movie-robot-public/tree/main/app/sites">https://github.com/htnanako/movie-robot-public/tree/main/app/sites</a></p><p>替换为你的&#x2F;volume&#x2F;docker&#x2F;movie-robot下的sites。</p><p>按照要求填入数据后即可展现出你的站点数据。</p><p>在应用设置里面配置媒体服务器、下载工具、媒体数据、推送通道、下载设置等配置。</p><p>注：豆瓣cookies需要先登录后然后打开 <a href="https://m.douban.com/movie/">https://m.douban.com/movie/</a> 再获取cookies。</p><h2 id="如何配置企业微信推送"><a href="#如何配置企业微信推送" class="headerlink" title="如何配置企业微信推送"></a>如何配置企业微信推送</h2><ol><li><p>以个人身份注册企业微信</p><p><a href="https://open.work.weixin.qq.com/wwopen/manual/detail?t=register">https://open.work.weixin.qq.com/wwopen/manual/detail?t=register</a></p></li><li><p>获取企业ID</p><p><a href="https://work.weixin.qq.com/wework_admin/frame#profile">https://work.weixin.qq.com/wework_admin/frame#profile</a></p><p><strong>企业ID -&gt; 企业微信CorpID</strong></p></li><li><p>创建一个应用</p><p><a href="https://work.weixin.qq.com/wework_admin/frame#app">https://work.weixin.qq.com/wework_admin/frame#app</a></p></li><li><p>获取应用信息</p><p>点击刚才创建的应用，将以下值填写到MR的对应位置上。</p><p><strong>AgentId -&gt; 企业应用的id，整型。企业内部开发，可在应用的设置页面查看</strong></p><p><strong>Secret -&gt; 企业微信corpsecret</strong></p></li><li><p>扫码添加到微信</p><p><a href="https://work.weixin.qq.com/wework_admin/frame#profile/wxPlugin">https://work.weixin.qq.com/wework_admin/frame#profile/wxPlugin</a></p></li><li><p>推送api则填自己服务器反代的 <strong><a href="https://qyapi.weixin.qq.com/">https://qyapi.weixin.qq.com</a></strong></p></li></ol><p>这样的话点击保存再点击推送，手机微信上就能接收到推送的测试信息.，但是这只是MR向我们发消息，我们向MR发消息需要MR的公网地址和可信IP。</p><h3 id="如何反代"><a href="#如何反代" class="headerlink" title="如何反代"></a>如何反代</h3><ol><li><p>打开 <a href="https://work.weixin.qq.com/wework_admin/frame#apps">https://work.weixin.qq.com/wework_admin/frame#apps</a></p><p>点击刚才我们创建的应用，划到最下面可以看到</p></li></ol><img src="https://img.shyi.org/images/f0d38ddd19d84d4ea6e3debf120cb701.png" alt="开发者接口" style="zoom: 67%;" /><p>我们需要先配置第一个，再配置第二个。</p><p><strong>第一个网页授权及JS-SDK可能不需要配置，请自行尝试</strong></p><ol start="2"><li><p>打开域名对应的控制台，将域名解析到你对应的固定公网IP</p></li><li><p>创建一个网站</p><p>有宝塔了直接使用宝塔创建就行了</p><p>没有宝塔使用nginx就行了</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-comment">#listen 443 ssl;</span><br>    <span class="hljs-attribute">server_name</span> qyapi.xxx.com; <span class="hljs-comment">#多个域名中间空格隔开</span><br>    <span class="hljs-comment">#ssl_certificate        crt/pem; </span><br>    <span class="hljs-comment">#ssl_certificate_key    key;</span><br>    <br>   <span class="hljs-comment"># location / &#123;</span><br>   <span class="hljs-comment">#     alias /home/qiyeapi/;</span><br>   <span class="hljs-comment"># &#125;</span><br>    <br>    <span class="hljs-section">location</span> / &#123;<br>        <span class="hljs-attribute">proxy_pass</span> https://qyapi.weixin.qq.com;<br>        <span class="hljs-attribute">proxy_ssl_server_name</span> <span class="hljs-literal">on</span>;<br>    &#125;<br><br>    <span class="hljs-attribute">access_log</span> /www/wwwlogs/qyapi.log;<br>    <span class="hljs-attribute">error_log</span>   /www/wwwlogs/qyapi_error.log;<br>&#125;<br></code></pre></td></tr></table></figure></li><li><p>将需要验证的文件放在&#x2F;home&#x2F;qiyeapi&#x2F;下面，然后重新加载nginx，<strong>nginx -s reload</strong></p></li><li><p>点击验证成功后，将服务器IP填到第二项中。</p></li></ol><h3 id="使用frp将MR的地址变成公网地址"><a href="#使用frp将MR的地址变成公网地址" class="headerlink" title="使用frp将MR的地址变成公网地址"></a>使用frp将MR的地址变成公网地址</h3><p>frp分为服务端和客户端，frps为服务端，frpc为客户端</p><p>项目地址：<a href="https://github.com/fatedier/frp">https://github.com/fatedier/frp</a></p><h4 id="服务端"><a href="#服务端" class="headerlink" title="服务端"></a>服务端</h4><p>在服务器上安装服务端，下载对应架构的压缩包，解压缩后只需关注frps，和frps.ini</p><p>frps.ini</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-section">[common]</span><br><span class="hljs-attr">bind_port</span> = <span class="hljs-number">7000</span><br><span class="hljs-attr">token</span> = password2023<br></code></pre></td></tr></table></figure><p>然后</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">/root/frp/frps -c /root/frp/frps.ini<br>/usr/local/bin/frps -c /etc/frp/frps.ini<br>/usr/local/bin/frpc -c /etc/frp/frpc.ini<br></code></pre></td></tr></table></figure><p>使用<a href="https://gofrp.org/docs/setup/systemd/">systemd</a>后台长期运行</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">安装systemd<br><span class="hljs-comment"># yum</span><br>yum install systemd<br><span class="hljs-comment"># apt</span><br>apt install systemd<br><br></code></pre></td></tr></table></figure><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs awk"><span class="hljs-comment"># 创建并编辑 frps.service</span><br>vim <span class="hljs-regexp">/etc/</span>systemd<span class="hljs-regexp">/system/</span>frps.service<br></code></pre></td></tr></table></figure><p>写入一下内容</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-section">[Unit]</span><br><span class="hljs-comment"># 服务名称，可自定义</span><br><span class="hljs-attr">Description</span> = Frp Server Service<br><span class="hljs-attr">After</span> = network.target syslog.target<br><span class="hljs-attr">Wants</span> = network.target<br><br><span class="hljs-section">[Service]</span><br><span class="hljs-attr">Type</span> = simple<br><span class="hljs-attr">Restart</span>=<span class="hljs-literal">on</span>-failure<br><span class="hljs-attr">RestartSec</span>=<span class="hljs-number">10</span>s<br><span class="hljs-comment"># 启动frps的命令，需修改为您的frps的安装路径</span><br><span class="hljs-attr">ExecStart</span> =/usr/local/bin/frps -c /etc/frp/frps.ini<br><span class="hljs-attr">LimitNOFILE</span>=<span class="hljs-number">1048576</span><br><br><span class="hljs-section">[Install]</span><br><span class="hljs-attr">WantedBy</span> = multi-user.target<br></code></pre></td></tr></table></figure><p>frpc</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs awk"><span class="hljs-comment"># 创建并编辑 frpc.service</span><br>vim <span class="hljs-regexp">/etc/</span>systemd<span class="hljs-regexp">/system/</span>frpc.service<br></code></pre></td></tr></table></figure><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-section">[Unit]</span><br><span class="hljs-attr">Description</span>=Frp Client Service<br><span class="hljs-attr">After</span>=network.target<br><br><span class="hljs-section">[Service]</span><br><span class="hljs-attr">Type</span>=simple<br><span class="hljs-comment">#DynamicUser=yes</span><br><span class="hljs-attr">Restart</span>=<span class="hljs-literal">on</span>-failure<br><span class="hljs-attr">RestartSec</span>=<span class="hljs-number">5</span>s<br><span class="hljs-attr">ExecStart</span>=/usr/local/bin/frpc -c /etc/frp/frpc.ini<br><span class="hljs-attr">ExecReload</span>=/usr/local/bin/frpc reload -c /etc/frp/frpc.ini<br><span class="hljs-attr">LimitNOFILE</span>=<span class="hljs-number">1048576</span><br><br><span class="hljs-section">[Install]</span><br><span class="hljs-attr">WantedBy</span>=multi-user.target<br></code></pre></td></tr></table></figure><p>使用systemctl命令管理frps</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 更新配置</span><br>systemctl daemon-reload<br><span class="hljs-comment"># 启动frp</span><br>systemctl start frps<br><span class="hljs-comment"># 停止frp</span><br>systemctl stop frps<br><span class="hljs-comment"># 重启frp</span><br>systemctl restart frps<br><span class="hljs-comment"># 查看frp状态</span><br>systemctl status frps<br><span class="hljs-comment"># frps开机自启</span><br>systemctl <span class="hljs-built_in">enable</span> frps<br></code></pre></td></tr></table></figure><h4 id="客户端"><a href="#客户端" class="headerlink" title="客户端"></a>客户端</h4><p>可以使用docker也可以使用二进制文件，主要是取决于系统</p><p>frpc.ini</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-section">[common]</span><br><span class="hljs-attr">server_addr</span> = x.x.x.x<br><span class="hljs-attr">server_port</span> = <span class="hljs-number">7000</span><br><span class="hljs-attr">token</span> = password2023<br><br><span class="hljs-section">[mr]</span><br><span class="hljs-attr">type</span> = tcp<br><span class="hljs-attr">local_ip</span> = <span class="hljs-number">192.168</span>.<span class="hljs-number">1.101</span><br><span class="hljs-attr">local_port</span> = <span class="hljs-number">1329</span><br><span class="hljs-attr">remote_port</span> = <span class="hljs-number">6016</span><br></code></pre></td></tr></table></figure><p>这样就能通过公网IP+6016访问MR了。</p><img src="https://img.shyi.org/images/2b333d80268a5636e73b471838ecdc12.png" style="zoom:50%;" /><h3 id="配置API接收消息"><a href="#配置API接收消息" class="headerlink" title="配置API接收消息"></a>配置API接收消息</h3><img src="https://img.shyi.org/images/e5df9f8cd52cb454e4139cc155b69c7f.png" alt="image-20230107183621787" style="zoom:67%;" /><img src="https://img.shyi.org/images/d6ac1a83ccff6621058908ffc9ebf885.png" alt="api接收消息" style="zoom:50%;" /><p>URl则填 http:&#x2F;&#x2F;公网IP:6016&#x2F;api&#x2F;qywx&#x2F;receive （注意最后面不带&#x2F;）</p><p>回到MR的企业微信配置界面，填入对应的Token和EncodingAESKey，推送api地址则填刚才反代的地址，保存即可。</p><img src="https://img.shyi.org/images/7ab5bcf03a19eba9d103a0f00cb9af4b.png" alt="image-20230107183945751" style="zoom: 50%;" /><p>点击保存即可</p><img src="https://img.shyi.org/images/8730f507fb575a0c1f6ab246531a251d.png" alt="image-20230107184342769" style="zoom:50%;" /><p>在企业微信的应用中发送”绑定用户”后，在用户管理那里设置微信和豆瓣。</p><img src="https://img.shyi.org/images/f6e6e42c247dcb408e2e28c17eb2484e.png" alt="image-20230107204245481" style="zoom: 50%;" /><p>参考：</p><blockquote><p><a href="https://yee329.notion.site/Movie-Robot-Wiki-9abef8c648c840fca47a0bf308957f85">https://yee329.notion.site/Movie-Robot-Wiki-9abef8c648c840fca47a0bf308957f85</a></p><p><a href="https://gofrp.org/">https://gofrp.org/</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;需要准备docker，域名，&lt;strong&gt;公网IP一枚&lt;/strong&gt;，&lt;strong&gt;frp&lt;/strong&gt;等&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关闭防火墙或者开启对应的端口（ufw、iptables、宝塔安全、服务商防火墙）&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Docker" scheme="https://shyi.org/tags/Docker/"/>
    
    <category term="Movie_Robot" scheme="https://shyi.org/tags/Movie-Robot/"/>
    
    <category term="frp" scheme="https://shyi.org/tags/frp/"/>
    
  </entry>
  
  <entry>
    <title>常用脚本备份</title>
    <link href="https://shyi.org/posts/44233/"/>
    <id>https://shyi.org/posts/44233/</id>
    <published>2023-01-06T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.948Z</updated>
    
    <content type="html"><![CDATA[<h2 id="DD网络重装脚本"><a href="#DD网络重装脚本" class="headerlink" title="DD网络重装脚本"></a>DD网络重装脚本</h2><p>PS：自定义密码直接 -p 你想要的密码就行！！！<br>部分机器需要设置网卡，否则可以 VNC，但是不能远程 SSH</p><p>甲骨文、三毛、Vir、RN 等大部分 VPS 通用，<strong>三毛、甲骨文 记得去掉 -firmware</strong></p><p>旧</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(wget --no-check-certificate -qO- <span class="hljs-string">&#x27;https://moeclub.org/attachment/LinuxShell/InstallNET.sh&#x27;</span>) -d 11 -v 64 -a -firmware -p 自定义密码<br></code></pre></td></tr></table></figure><p>新</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(wget --no-check-certificate -qO- <span class="hljs-string">&#x27;https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh&#x27;</span>) -d 11 -v 64 -p 密码 -port 端口 -a -firmware<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># dd windows</span><br>wget --no-check-certificate -qO InstallNET.sh <span class="hljs-string">&#x27;https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh&#x27;</span> &amp;&amp; bash InstallNET.sh -<span class="hljs-built_in">dd</span> <span class="hljs-string">&#x27;https://dd.591592.xyz/dd/win10-ent-2016-ltsb-x64-cn.vhd.gz&#x27;</span><br></code></pre></td></tr></table></figure><figure class="highlight diff"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs diff"><span class="hljs-deletion">-d 10 -v 64</span><br><span class="hljs-deletion">-d 9 -v 64</span><br><span class="hljs-deletion">-u 20.04 -v 64</span><br><span class="hljs-deletion">-u 18.04 -v 64</span><br><br><span class="hljs-deletion">-a  全自动无人值守安装</span><br></code></pre></td></tr></table></figure><h2 id="腾讯云删除监控组件"><a href="#腾讯云删除监控组件" class="headerlink" title="腾讯云删除监控组件"></a>腾讯云删除监控组件</h2><p>PS: 如果你是腾讯云记得卸载组件 否则会导致报错 DD 失败</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl stop tat_agent<br>systemctl <span class="hljs-built_in">disable</span> tat_agent<br><span class="hljs-built_in">rm</span> -rf /etc/systemd/system/tat_agent.service<br><span class="hljs-built_in">rm</span> -fr /usr/local/qcloud<br><br>ps -A | grep agent<br><span class="hljs-comment"># 检查看是否还有腾讯云组件</span><br><span class="hljs-comment"># kill 这个进程</span><br></code></pre></td></tr></table></figure><p>· 国内 VPS 需要更换镜像源否则很慢！我这里使用的华为源，如果你是腾讯云后面可以换成内网源，节省流量，下面有写！</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(wget --no-check-certificate -qO- <span class="hljs-string">&#x27;https://moeclub.org/attachment/LinuxShell/InstallNET.sh&#x27;</span>) -d 11 -v 64 -a --mirror <span class="hljs-string">&#x27;https://mirrors.huaweicloud.com/debian/&#x27;</span> -p 自定义密码<br></code></pre></td></tr></table></figure><p>镜像站地址<br>官方给出的地址列表：<a href="https://www.debian.org/mirror/list">https://www.debian.org/mirror/list</a></p><h2 id="更换软件源"><a href="#更换软件源" class="headerlink" title="更换软件源"></a>更换软件源</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh)<br></code></pre></td></tr></table></figure><h2 id="41合一脚本（可DD-windows）"><a href="#41合一脚本（可DD-windows）" class="headerlink" title="41合一脚本（可DD windows）"></a>41合一脚本（可DD windows）</h2><p><a href="https://git.beta.gs/">https://git.beta.gs/</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash">安装重装系统的前提组件:<br>Debian/Ubuntu:<br>apt-get install -y xz-utils openssl gawk file wget screen &amp;&amp; screen -S os<br><br>RedHat/CentOS:<br>yum install -y xz openssl gawk file glibc-common wget screen &amp;&amp; screen -S os<br><br>如果出现异常，请刷新Mirrors缓存或更换镜像源。<br>RedHat/CentOS:<br>yum makecache &amp;&amp; yum update -y<br>Debian/Ubuntu:<br>apt update -y &amp;&amp; apt dist-upgrade -y<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget --no-check-certificate -O NewReinstall.sh https://git.io/newbetags &amp;&amp; <span class="hljs-built_in">chmod</span> a+x NewReinstall.sh &amp;&amp; bash NewReinstall.sh<br></code></pre></td></tr></table></figure><p>如为 CN 主机 (部分主机商已不能使用)，可能出现报错或不能下载脚本的问题，可执行以下命令开始安装.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget --no-check-certificate -O NewReinstall.sh https://cdn.jsdelivr.net/gh/fcurrk/reinstall@master/NewReinstall.sh &amp;&amp; <span class="hljs-built_in">chmod</span> a+x NewReinstall.sh &amp;&amp; bash NewReinstall.sh<br></code></pre></td></tr></table></figure><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">41</span>合一系统密码：<br><span class="hljs-attribute">1</span>、CentOS <span class="hljs-number">7</span>.<span class="hljs-number">7</span> (已关闭防火墙及SELinux，默认密码Pwd@CentOS)<br><span class="hljs-attribute">2</span>、CentOS <span class="hljs-number">7</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">3</span>、CentOS <span class="hljs-number">7</span> (支持ARM64、UEFI，默认密码cxthhhhh.com)<br><span class="hljs-attribute">4</span>、CentOS <span class="hljs-number">8</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">5</span>、Rocky <span class="hljs-number">8</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">6</span>、Rocky <span class="hljs-number">8</span> (支持UEFI，默认密码cxthhhhh.com)<br><span class="hljs-attribute">7</span>、Rocky <span class="hljs-number">8</span> (支持ARM64、UEFI，默认密码cxthhhhh.com)<br><span class="hljs-attribute">8</span>、CentOS <span class="hljs-number">9</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">9</span>、CentOS <span class="hljs-number">6</span> (官方源原版，默认密码Minijer.com)<br><span class="hljs-attribute">10</span>、Debian <span class="hljs-number">11</span> (官方源原版，默认密码Minijer.com)<br><span class="hljs-attribute">11</span>、Debian <span class="hljs-number">10</span> (官方源原版，默认密码Minijer.com)<br><span class="hljs-attribute">12</span>、Debian <span class="hljs-number">9</span> (官方源原版，默认密码Minijer.com)<br><span class="hljs-attribute">13</span>、Debian <span class="hljs-number">8</span> (官方源原版，默认密码Minijer.com)<br><span class="hljs-attribute">14</span>、Ubuntu <span class="hljs-number">20</span>.<span class="hljs-number">04</span> (官方源原版，默认密码Minijer.com)<br><span class="hljs-attribute">15</span>、Ubuntu <span class="hljs-number">18</span>.<span class="hljs-number">04</span> (官方源原版，默认密码Minijer.com)<br><span class="hljs-attribute">16</span>、Ubuntu <span class="hljs-number">16</span>.<span class="hljs-number">04</span> (官方源原版，默认密码Minijer.com)<br><span class="hljs-attribute">17</span>、Windows Server <span class="hljs-number">2022</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">18</span>、Windows Server <span class="hljs-number">2022</span> (支持UEFI，默认密码cxthhhhh.com)<br><span class="hljs-attribute">19</span>、Windows Server <span class="hljs-number">2019</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">20</span>、Windows Server <span class="hljs-number">2016</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">21</span>、Windows Server <span class="hljs-number">2012</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">22</span>、Windows Server <span class="hljs-number">2008</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">23</span>、Windows Server <span class="hljs-number">2003</span> (默认密码cxthhhhh.com)<br><span class="hljs-attribute">24</span>、Windows <span class="hljs-number">10</span> LTSC (默认密码Teddysun.com)<br><span class="hljs-attribute">25</span>、Windows <span class="hljs-number">10</span> LTSC (支持UEFI，默认密码Teddysun.com)<br><span class="hljs-attribute">26</span>、Windows <span class="hljs-number">7</span> x86 Lite (默认密码nat.ee)<br><span class="hljs-attribute">27</span>、Windows <span class="hljs-number">7</span> x86 Lite (阿里云专用，默认密码nat.ee)<br><span class="hljs-attribute">28</span>、Windows <span class="hljs-number">7</span> x64 Lite (默认密码nat.ee)<br><span class="hljs-attribute">29</span>、Windows <span class="hljs-number">7</span> x64 Lite (支持UEFI，默认密码nat.ee)<br><span class="hljs-attribute">30</span>、Windows <span class="hljs-number">10</span> LTSC Lite (默认密码nat.ee)<br><span class="hljs-attribute">31</span>、Windows <span class="hljs-number">10</span> LTSC Lite (阿里云专用，默认密码nat.ee)<br><span class="hljs-attribute">32</span>、Windows <span class="hljs-number">10</span> LTSC Lite (支持UEFI，默认密码nat.ee)<br><span class="hljs-attribute">33</span>、Windows Server <span class="hljs-number">2003</span> Lite (C盘默认<span class="hljs-number">10</span>G，默认密码WinSrv2003x86-Chinese)<br><span class="hljs-attribute">34</span>、Windows Server <span class="hljs-number">2008</span> Lite (默认密码nat.ee)<br><span class="hljs-attribute">35</span>、Windows Server <span class="hljs-number">2008</span> Lite (支持UEFI，默认密码nat.ee)<br><span class="hljs-attribute">36</span>、Windows Server <span class="hljs-number">2012</span> Lite (默认密码nat.ee)<br><span class="hljs-attribute">37</span>、Windows Server <span class="hljs-number">2012</span> Lite (支持UEFI，默认密码nat.ee)<br><span class="hljs-attribute">38</span>、Windows Server <span class="hljs-number">2016</span> Lite (默认密码nat.ee)<br><span class="hljs-attribute">39</span>、Windows Server <span class="hljs-number">2016</span> Lite (支持UEFI，默认密码nat.ee)<br><span class="hljs-attribute">40</span>、Windows Server <span class="hljs-number">2022</span> Lite (默认密码nat.ee)<br><span class="hljs-attribute">41</span>、Windows Server <span class="hljs-number">2022</span> Lite (支持UEFI，默认密码nat.ee)<br><span class="hljs-attribute">99</span>、自定义镜像<br></code></pre></td></tr></table></figure><h2 id="一键-DD-Linux-系统"><a href="#一键-DD-Linux-系统" class="headerlink" title="一键 DD Linux 系统"></a>一键 DD Linux 系统</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget --no-check-certificate -qO InstallNET.sh <span class="hljs-string">&#x27;https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh&#x27;</span> &amp;&amp; <span class="hljs-built_in">chmod</span> a+x InstallNET.sh<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># Debian</span><br>bash InstallNET.sh -debian<br><span class="hljs-comment"># CentOS</span><br>bash InstallNET.sh -centos<br><span class="hljs-comment"># RockyLinux</span><br>bash InstallNET.sh -rockylinux<br><span class="hljs-comment"># AlmaLinux</span><br>bash InstallNET.sh -almalinux<br><span class="hljs-comment"># Fedora</span><br>bash InstallNET.sh -fedora<br><span class="hljs-comment"># Ubuntu</span><br>bash InstallNET.sh -ubuntu<br><br>-debian 9/10/11 : Debian 9+<br><br>-centos 7/8/9-stream: CentOS 7+<br><br>-almalinux/alma 8/9: AlmaLinux 8+<br><br>-rockylinux/rocky 8/9: RockyLinux 8+<br><br>-fedora 34/35/36/37: Fedora 34+<br><br>-ubuntu 16.04/18.04/20.04: Ubuntu 16.04~20.04<br><br>-mirror <span class="hljs-string">&quot;有效的源链接&quot;</span><br><br>-port <span class="hljs-string">&quot;1~65535&quot;</span><br><br>-<span class="hljs-built_in">pwd</span> <span class="hljs-string">&#x27;自定义密码，不可太复杂，不推荐带特殊符号，默认：LeitboGi0ro&#x27;</span><br><br>--network <span class="hljs-string">&quot;dhcp/auto or static/manual&quot;</span> 动态或静态网络，可选，可不添加，脚本自动识别<br><br><span class="hljs-comment"># 带两个横杠的参数应该放在脚本运行最后面。</span><br></code></pre></td></tr></table></figure><h2 id="宝塔面板7-7-0"><a href="#宝塔面板7-7-0" class="headerlink" title="宝塔面板7.7.0"></a>宝塔面板7.7.0</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl -sSO https://raw.githubusercontent.com/8838/btpanel-v7.7.0/main/install/install_panel.sh &amp;&amp; bash install_panel.sh<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#1，屏蔽手机号</span><br>sed -i <span class="hljs-string">&quot;s|bind_user == &#x27;True&#x27;|bind_user == &#x27;XXXX&#x27;|&quot;</span> /www/server/panel/BTPanel/static/js/index.js<br><span class="hljs-comment">#2，删除强制绑定手机js文件</span><br><span class="hljs-built_in">rm</span> -f /www/server/panel/data/bind.pl<br><span class="hljs-comment">#3，手动解锁宝塔所有付费插件为永不过期</span><br><span class="hljs-comment">#文件路径：/www/server/panel/data/plugin.json</span><br><span class="hljs-comment">#搜索字符串：&quot;endtime&quot;: -1全部替换为&quot;endtime&quot;: 999999999999</span><br><span class="hljs-comment">#4，给plugin.json文件上锁防止自动修复为免费版</span><br>chattr +i /www/server/panel/data/plugin.json<br></code></pre></td></tr></table></figure><h2 id="综合工具箱（强烈推荐，集成了很多脚本）"><a href="#综合工具箱（强烈推荐，集成了很多脚本）" class="headerlink" title="综合工具箱（强烈推荐，集成了很多脚本）"></a>综合工具箱（强烈推荐，集成了很多脚本）</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh &amp;&amp; <span class="hljs-built_in">chmod</span> +x box.sh &amp;&amp; clear &amp;&amp; ./box.sh<br></code></pre></td></tr></table></figure><h2 id="一键开启-BBR（适用于较新的-Debian、Ubuntu）"><a href="#一键开启-BBR（适用于较新的-Debian、Ubuntu）" class="headerlink" title="一键开启 BBR（适用于较新的 Debian、Ubuntu）"></a>一键开启 BBR（适用于较新的 Debian、Ubuntu）</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf<br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf<br>sysctl -p<br>sysctl net.ipv4.tcp_available_congestion_control<br>lsmod | grep bbr<br></code></pre></td></tr></table></figure><h2 id="superbench"><a href="#superbench" class="headerlink" title="superbench"></a>superbench</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -qO- git.io/superbench.sh | bash<br></code></pre></td></tr></table></figure><h2 id="Bench-sh"><a href="#Bench-sh" class="headerlink" title="Bench.sh"></a>Bench.sh</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -qO- bench.sh | bash<br></code></pre></td></tr></table></figure><h2 id="三网测速"><a href="#三网测速" class="headerlink" title="三网测速"></a>三网测速</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(curl -Lso- https://git.io/superspeed_uxh)<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(curl -Lso- https://git.io/J1SEh)<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -O jcnf.sh https://raw.githubusercontent.com/Netflixxp/jcnfbesttrace/main/jcnf.sh<br>bash jcnf.sh<br></code></pre></td></tr></table></figure><h2 id="yabs-机器跑分"><a href="#yabs-机器跑分" class="headerlink" title="yabs 机器跑分"></a>yabs 机器跑分</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl -sL yabs.sh | bash<br></code></pre></td></tr></table></figure><h2 id="一键安装-docker"><a href="#一键安装-docker" class="headerlink" title="一键安装 docker"></a>一键安装 docker</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh)<br></code></pre></td></tr></table></figure><blockquote><p>脚本集成安装 <code>Docker Engine</code> 与 <code>Docker Compose</code>，可手动选择安装版本、下载源、镜像加速器，支持国内外服务器环境和 <code>ARM</code> 架构处理器环境使用</p></blockquote><h3 id="国外"><a href="#国外" class="headerlink" title="国外"></a>国外</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl -sSL https://get.docker.com/ | sh<br></code></pre></td></tr></table></figure><h3 id="国内"><a href="#国内" class="headerlink" title="国内"></a>国内</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl -sSL https://get.daocloud.io/docker | sh<br></code></pre></td></tr></table></figure><h3 id="卸载-docker"><a href="#卸载-docker" class="headerlink" title="卸载 docker"></a>卸载 docker</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt-get remove docker docker-engine<br><span class="hljs-built_in">rm</span> -fr /var/lib/docker/<br></code></pre></td></tr></table></figure><h2 id="流媒体测试"><a href="#流媒体测试" class="headerlink" title="流媒体测试"></a>流媒体测试</h2><h3 id="全媒体测试"><a href="#全媒体测试" class="headerlink" title="全媒体测试"></a>全媒体测试</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(curl -L -s check.unlock.media)<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(curl -L -s https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/check.sh)<br></code></pre></td></tr></table></figure><h3 id="奈飞测试"><a href="#奈飞测试" class="headerlink" title="奈飞测试"></a>奈飞测试</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -O nf https://github.com/sjlleo/netflix-verify/releases/download/2.5/nf_2.5_linux_amd64 &amp;&amp; <span class="hljs-built_in">chmod</span> +x nf &amp;&amp; clear &amp;&amp; ./nf<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(curl -L -s https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/check.sh)<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(curl -sSL <span class="hljs-string">&quot;https://github.com/CoiaPrant/MediaUnlock_Test/raw/main/check.sh&quot;</span>)<br></code></pre></td></tr></table></figure><h2 id="杜甫测试"><a href="#杜甫测试" class="headerlink" title="杜甫测试"></a>杜甫测试</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -q https://github.com/Aniverse/A/raw/i/a &amp;&amp; bash a<br></code></pre></td></tr></table></figure><h2 id="单线程测试"><a href="#单线程测试" class="headerlink" title="单线程测试"></a>单线程测试</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(curl -Lso- https://bench.im/hyperspeed)<br></code></pre></td></tr></table></figure><h2 id="直接显示回程线路"><a href="#直接显示回程线路" class="headerlink" title="直接显示回程线路"></a>直接显示回程线路</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl https://raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh|bash<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget https://raw.githubusercontent.com/nanqinlang-script/testrace/master/testrace.sh<br>bash testrace.sh<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -qO- git.io/besttrace | bash<br></code></pre></td></tr></table></figure><h2 id="测试-25-端口是否开放"><a href="#测试-25-端口是否开放" class="headerlink" title="测试 25 端口是否开放"></a>测试 25 端口是否开放</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">telnet smtp.aol.com 25<br></code></pre></td></tr></table></figure><h2 id="一键修改默认-SSH-端口，自行替换-2222"><a href="#一键修改默认-SSH-端口，自行替换-2222" class="headerlink" title="一键修改默认 SSH 端口，自行替换 2222"></a>一键修改默认 SSH 端口，自行替换 2222</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sed -i <span class="hljs-string">&#x27;s/#Port\ 22/Port\ 2222/&#x27;</span> /etc/ssh/sshd_config &amp;&amp; systemctl reload ssh<br></code></pre></td></tr></table></figure><h2 id="一键清理-var-log-目录下的过期日志"><a href="#一键清理-var-log-目录下的过期日志" class="headerlink" title="一键清理 &#x2F;var&#x2F;log &#x2F; 目录下的过期日志"></a>一键清理 &#x2F;var&#x2F;log &#x2F; 目录下的过期日志</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">find /var/log/ -name <span class="hljs-string">&quot;*.1&quot;</span> -<span class="hljs-built_in">exec</span> <span class="hljs-built_in">rm</span> -rf &#123;&#125; \; &amp;&amp; find /var/log/ -name <span class="hljs-string">&quot;*.log.1&quot;</span> -<span class="hljs-built_in">exec</span> <span class="hljs-built_in">rm</span> -rf &#123;&#125; \; &amp;&amp; find /var/log/ -name <span class="hljs-string">&quot;*.gz&quot;</span> -<span class="hljs-built_in">exec</span> <span class="hljs-built_in">rm</span> -rf &#123;&#125; \;<br></code></pre></td></tr></table></figure><h2 id="测试-IPv4-优先还是-IPv6-优先"><a href="#测试-IPv4-优先还是-IPv6-优先" class="headerlink" title="测试 IPv4 优先还是 IPv6 优先"></a>测试 IPv4 优先还是 IPv6 优先</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl ip.p3terx.com<br></code></pre></td></tr></table></figure><h2 id="目前用过的最好用，功能最全的套-warp-脚本"><a href="#目前用过的最好用，功能最全的套-warp-脚本" class="headerlink" title="目前用过的最好用，功能最全的套 warp 脚本"></a>目前用过的最好用，功能最全的套 warp 脚本</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -N https://raw.githubusercontent.com/fscarmen/warp/main/warp-go.sh &amp;&amp; bash warp-go.sh [option] [lisence]<br></code></pre></td></tr></table></figure><h2 id="WARP"><a href="#WARP" class="headerlink" title="WARP"></a>WARP</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -N --no-check-certificate https://cdn.jsdelivr.net/gh/YG-tsj/CFWarp-Pro/multi.sh &amp;&amp; <span class="hljs-built_in">chmod</span> +x multi.sh &amp;&amp; ./multi.sh<br></code></pre></td></tr></table></figure><h2 id="宝塔一键挂载硬盘脚本"><a href="#宝塔一键挂载硬盘脚本" class="headerlink" title="宝塔一键挂载硬盘脚本"></a>宝塔一键挂载硬盘脚本</h2><h3 id="Centos-系统请使用以下命令："><a href="#Centos-系统请使用以下命令：" class="headerlink" title="Centos 系统请使用以下命令："></a>Centos 系统请使用以下命令：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install wget -y &amp;&amp; wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh &amp;&amp; bash auto_disk.sh<br></code></pre></td></tr></table></figure><h3 id="Ubuntu-系统请使用以下命令"><a href="#Ubuntu-系统请使用以下命令" class="headerlink" title="Ubuntu 系统请使用以下命令:"></a>Ubuntu 系统请使用以下命令:</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh &amp;&amp; <span class="hljs-built_in">sudo</span> bash auto_disk.sh<br></code></pre></td></tr></table></figure><h3 id="Debian-系统请使用以下命令"><a href="#Debian-系统请使用以下命令" class="headerlink" title="Debian 系统请使用以下命令:"></a>Debian 系统请使用以下命令:</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh &amp;&amp; bash auto_disk.sh<br></code></pre></td></tr></table></figure><h2 id="FunctionClub-大佬的内存检测脚本"><a href="#FunctionClub-大佬的内存检测脚本" class="headerlink" title="FunctionClub 大佬的内存检测脚本"></a>FunctionClub 大佬的内存检测脚本</h2><h3 id="CentOS"><a href="#CentOS" class="headerlink" title="CentOS"></a>CentOS</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install wget -y<br>yum groupinstall <span class="hljs-string">&quot;Development Tools&quot;</span> -y<br>wget https://raw.githubusercontent.com/FunctionClub/Memtester/master/memtester.cpp<br>gcc -l stdc++ memtester.cpp<br>./a.out<br></code></pre></td></tr></table></figure><h3 id="Ubuntu-Debian"><a href="#Ubuntu-Debian" class="headerlink" title="Ubuntu &#x2F; Debian"></a>Ubuntu &#x2F; Debian</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt-get update<br>apt-get install wget build-essential -y<br>wget https://raw.githubusercontent.com/FunctionClub/Memtester/master/memtester.cpp<br>gcc -l stdc++ memtester.cpp<br>./a.out<br></code></pre></td></tr></table></figure><h2 id="Aria2-一键安装脚本"><a href="#Aria2-一键安装脚本" class="headerlink" title="Aria2 一键安装脚本"></a>Aria2 一键安装脚本</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -N git.io/aria2.sh &amp;&amp; <span class="hljs-built_in">chmod</span> +x aria2.sh &amp;&amp; ./aria2.sh<br></code></pre></td></tr></table></figure><h2 id="qbittorrent"><a href="#qbittorrent" class="headerlink" title="qbittorrent"></a>qbittorrent</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> /root<br>wget https://github.com/userdocs/qbittorrent-nox-static/releases/download/release-4.3.9_v1.2.15/x86_64-qbittorrent-nox<br><span class="hljs-built_in">chmod</span> +x x86_64-qbittorrent-nox<br>./x86_64-qbittorrent-nox<br></code></pre></td></tr></table></figure><p>输入 y 然后 ctrl+c 退出就行</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs ini">tee &gt; /etc/systemd/system/qbittorrent.service &lt;&lt;EOF<br><span class="hljs-section">[Unit]</span><br><span class="hljs-attr">Description</span>=qBittorrent Daemon Service<br><span class="hljs-attr">After</span>=network.target<br><br><span class="hljs-section">[Service]</span><br><span class="hljs-attr">LimitNOFILE</span>=<span class="hljs-number">512000</span><br><span class="hljs-attr">User</span>=root<br><span class="hljs-attr">ExecStart</span>=/root/x<span class="hljs-number">86_64</span>-qbittorrent-nox<br><br><span class="hljs-section">[Install]</span><br><span class="hljs-attr">WantedBy</span>=multi-user.target<br>EOF<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 更新配置</span><br>systemctl daemon-reload<br><span class="hljs-comment"># 启动服务</span><br>systemctl start qbittorrent<br><span class="hljs-comment"># 查看状态</span><br>systemctl status qbittorrent<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 如需重启 / 关闭程序  </span><br><span class="hljs-comment"># 请使用 kill 命令关闭程序  </span><br>ps -aux | grep qbittorrent  <br><span class="hljs-built_in">kill</span> 对应序号  <br><span class="hljs-comment"># 如 kill 11111  </span><br><span class="hljs-comment"># 再使用进程守护打开即可使用</span><br></code></pre></td></tr></table></figure><h2 id="剑皇脚本"><a href="#剑皇脚本" class="headerlink" title="剑皇脚本"></a>剑皇脚本</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget https://github.com/maintell/webBenchmark/releases/download/0.6/webBenchmark_linux_x64<br><span class="hljs-built_in">chmod</span> +x webBenchmark_linux_x64<br>./webBenchmark_linux_x64 -c 32 -s https://target.url<br></code></pre></td></tr></table></figure><blockquote><p><a href="https://blog.laoda.de/archives/useful-script">https://blog.laoda.de/archives/useful-script</a><br><a href="https://www.wrnxr.cn/163.html">https://www.wrnxr.cn/163.html</a><br><a href="https://archives.vip/6.html">https://archives.vip/6.html</a><br><a href="https://hostloc.com/thread-1097221-1-3.html">https://hostloc.com/thread-1097221-1-3.html</a><br><a href="https://supermanito.github.io/LinuxMirrors/#/">https://supermanito.github.io/LinuxMirrors/#/</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;DD网络重装脚本&quot;&gt;&lt;a href=&quot;#DD网络重装脚本&quot; class=&quot;headerlink&quot; title=&quot;DD网络重装脚本&quot;&gt;&lt;/a&gt;DD网络重装脚本&lt;/h2&gt;&lt;p&gt;PS：自定义密码直接 -p 你想要的密码就行！！！&lt;br&gt;部分机器需要设置网卡，否则可以 V</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    <category term="转载" scheme="https://shyi.org/categories/%E8%BD%AC%E8%BD%BD/"/>
    
    
    <category term="speedtest" scheme="https://shyi.org/tags/speedtest/"/>
    
    <category term="转载" scheme="https://shyi.org/tags/%E8%BD%AC%E8%BD%BD/"/>
    
    <category term="bash" scheme="https://shyi.org/tags/bash/"/>
    
    <category term="dd" scheme="https://shyi.org/tags/dd/"/>
    
    <category term="BBR" scheme="https://shyi.org/tags/BBR/"/>
    
    <category term="qbittorrent" scheme="https://shyi.org/tags/qbittorrent/"/>
    
  </entry>
  
  <entry>
    <title>树莓派的设置</title>
    <link href="https://shyi.org/posts/63799/"/>
    <id>https://shyi.org/posts/63799/</id>
    <published>2022-11-20T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.948Z</updated>
    
    <content type="html"><![CDATA[<h3 id="下载树莓派镜像"><a href="#下载树莓派镜像" class="headerlink" title="下载树莓派镜像"></a>下载树莓派镜像</h3><ol><li><a href="https://www.raspberrypi.com/software/operating-systems/">官网</a></li><li><a href="https://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os-images/raspios_full_armhf/images/">清华镜像站</a></li></ol><blockquote><p>Raspberry Pi OS with desktop and recommended software<br>不仅集成了图形化界面海预装了一些常用的软件，当然所需的存储空间也就越大。</p><p>Raspberry Pi OS with desktop<br>集成了图形化界面</p><p>Raspberry Pi OS Lite<br>没有图形化界面，纯命令行操作</p></blockquote><p>这里推荐 <em><strong>Raspberry Pi OS with desktop</strong></em></p><h3 id="下载烧录软件"><a href="#下载烧录软件" class="headerlink" title="下载烧录软件"></a>下载烧录软件</h3><blockquote><p><a href="https://0122.lanzout.com/b03jl6vlc">https://0122.lanzout.com/b03jl6vlc</a><br>密码:0000</p></blockquote><h3 id="烧录镜像"><a href="#烧录镜像" class="headerlink" title="烧录镜像"></a>烧录镜像</h3><p>打开烧录软件选择下载的img镜像选择<em><strong>写入</strong></em>，等待5分钟左右。</p><h3 id="打开ssh"><a href="#打开ssh" class="headerlink" title="打开ssh"></a>打开ssh</h3><p>在SD卡根目录创建一个空的<strong>ssh</strong>文件</p><h3 id="设置用户名和密码"><a href="#设置用户名和密码" class="headerlink" title="设置用户名和密码"></a>设置用户名和密码</h3><p><em>2022年4月后版本树莓派系统需要手动设置账号密码</em></p><p>在SD卡根目录创建<strong>userconfig.txt</strong>，填入以下内容(建议不要使用记事本编辑)</p><blockquote><p>  username: pi<br>  password: raspberry</p></blockquote><figure class="highlight tex"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs tex">pi:<span class="hljs-built_in">$</span>6<span class="hljs-built_in">$</span>grJXXypN.HLLiQW8<span class="hljs-built_in">$</span>BrjomjqTD9creP1cytdzWZxUfxQFUiGwduhsUlkQBrRvC3dfmK5ed05G3ev8RKwipvEBc3DHmP6gDl6E03ErF.<br></code></pre></td></tr></table></figure><h4 id="修改密码"><a href="#修改密码" class="headerlink" title="修改密码"></a>修改密码</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 在root下设置新密码</span><br>&gt; passwd<br>&gt; &lt;new password&gt;<br></code></pre></td></tr></table></figure><h3 id="开机"><a href="#开机" class="headerlink" title="开机"></a>开机</h3><p>插上网线&#x2F;显示屏，查看IP地址，打开ssh，输入账户密码即可登录到树莓派</p><h3 id="设置WiFi连接"><a href="#设置WiFi连接" class="headerlink" title="设置WiFi连接"></a>设置WiFi连接</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#切换到root用户</span><br><span class="hljs-built_in">sudo</span> -i<br><br><span class="hljs-comment">#启用wifi</span><br>rfkill unblock wifi<br><br><span class="hljs-comment">#激活网卡        </span><br><span class="hljs-built_in">sudo</span> ifconfig wlan0 up<br><br><span class="hljs-comment">#扫描wifi     </span><br><span class="hljs-built_in">sudo</span> iwlist wlan0 scan<br><br><span class="hljs-comment">#设置wifi名称及密码，内容如下</span><br>nano /etc/wpa_supplicant/wpa_supplicant.conf<br><br>nano用法：CTRL+O 保存，CTRL+X 取消<br>vim用法：Esc+: wq 保存并退出，!q 强制退出(退出后请按CTRL+Z)<br></code></pre></td></tr></table></figure><p>wpa_supplicant.conf</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs config">country=CN<br>ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev<br>update_config=1<br>country=CN<br><br>network=&#123;<br>ssid=&quot;wifi_name&quot;<br>psk=&quot;wifi_password&quot;<br>key_mgmt=WPA-PSK<br>priority=5<br>&#125;<br><br>network=&#123;<br>ssid=&quot;wifi_name&quot;<br>psk=&quot;wifi_password&quot;<br>priority=3<br>&#125;<br><br>#隐藏wifi选项<br>network=&#123;<br>ssid=&quot;wifi_name&quot;<br>scan_ssid=1<br>psk=&quot;wifi_password&quot;<br>&#125;<br><br>#priority是优先级，优先级越大先连接，隐藏WiFi没有优先级。<br></code></pre></td></tr></table></figure><h3 id="远程桌面连接"><a href="#远程桌面连接" class="headerlink" title="远程桌面连接"></a>远程桌面连接</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt install xrdp -y<br>vim /etc/X11/xrdp/xorg.conf<br><br><span class="hljs-comment"># 注释这一行 在前面加#</span><br>Option<span class="hljs-string">&quot;DRMDevice&quot;</span><span class="hljs-string">&quot;/dev/dri/renderD128&quot;</span><br><br><span class="hljs-comment"># 增加</span><br>Option <span class="hljs-string">&quot;DRMDevice&quot;</span> <span class="hljs-string">&quot;&quot;</span><br><br><span class="hljs-comment"># 保存后重新启动</span><br></code></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;下载树莓派镜像&quot;&gt;&lt;a href=&quot;#下载树莓派镜像&quot; class=&quot;headerlink&quot; title=&quot;下载树莓派镜像&quot;&gt;&lt;/a&gt;下载树莓派镜像&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.raspberrypi.com/softwar</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="树莓派" scheme="https://shyi.org/tags/%E6%A0%91%E8%8E%93%E6%B4%BE/"/>
    
    <category term="raspberrypi" scheme="https://shyi.org/tags/raspberrypi/"/>
    
  </entry>
  
  <entry>
    <title>两块1tSSD组raid0</title>
    <link href="https://shyi.org/posts/29203/"/>
    <id>https://shyi.org/posts/29203/</id>
    <published>2022-10-22T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<p>op30o</p><p>Disk: 2x 1TB (SSD SATA)</p><p>想装成raid0</p><p>试了好几种方法</p><p>最后此种成功</p><p>系统：Debian 10</p><p>刚开始是Ubuntu 18，大佬帮我装半天，换成Debian 10一次成功</p><p><img src="https://img.shyi.org/images/0973e1766df6224ca74587e5d2edfa64.png"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash">lsblk<br>watch <span class="hljs-built_in">cat</span> /proc/mdstat  <span class="hljs-comment"># df -h获得md1在/dev/md1 , 本命令获得有md0,md1等</span><br>mdadm /dev/md1 --remove /dev/sda4  <span class="hljs-comment">#卸载sda4</span><br>wipefs -a /dev/sda4   <span class="hljs-comment">#擦除sda4</span><br>mdadm --grow /dev/md1 --level=0  <span class="hljs-comment">#改raid0</span><br>mdadm --grow /dev/md1 --level=0 --raid-devices=2 --add /dev/sda4  <span class="hljs-comment">#改raid0，再加上sda4</span><br>watch <span class="hljs-built_in">cat</span> /proc/mdstat  <span class="hljs-comment">#一般重建两个小时就成功</span><br>resize2fs /dev/md1  <span class="hljs-comment">#最后执行这个</span><br><span class="hljs-built_in">df</span> -h  <span class="hljs-comment">#可以看到硬盘以变成raid0.</span><br></code></pre></td></tr></table></figure><p><img src="https://img.shyi.org/images/f1d82e0f646422caa3829a01369ffe74.png"></p><p><img src="https://img.shyi.org/images/61a27e794546f3c1c54f4d1c98759a35.png"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash">mdadm /dev/md1 --fail /dev/sdb3<br>mdadm /dev/md1 --remove /dev/sdb3<br>wipefs -a /dev/sdb3<br>mdadm --grow /dev/md1 --level=0<br>mdadm --grow /dev/md1 --level=0 --raid-devices=2 --add /dev/sdb3<br>watch <span class="hljs-built_in">cat</span> /proc/mdstat <br>resize2fs /dev/md1<br></code></pre></td></tr></table></figure><p><img src="https://img.shyi.org/images/9cb24ab8a960edfa78c57cc85c84f406.png"></p><p><img src="https://img.shyi.org/images/ba3af0920b3b97663bf40f8c1e300edd.png"></p><p><img src="https://img.shyi.org/images/fd38ee734f877d83b8bbb9f2b97765cb.png"></p><p>结论：先移除一块盘，擦除这块盘，然后将md1（有的可能不是md1）变成raid0，再执行一次（硬盘数变成2，加上刚才擦除的那块盘）会重建（大约两个小时）</p><p><a href="https://hostloc.me/thread-929902-1-1.html">hostloc命令</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cat</span> /proc/mdstat<br><br>mdadm /dev/md2 --fail /dev/sdb2<br><br>mdadm /dev/md2 --remove /dev/sdb2<br><br>wipefs -a /dev/sdb2<br><br>mdadm --grow /dev/md2 --level=0<br>mdadm --grow /dev/md2 --level=0 --raid-devices=2 --add /dev/sdb2<br><br>watch <span class="hljs-built_in">cat</span> /proc/mdstat<br><span class="hljs-comment"># 等待重建完毕</span><br><br>mdadm --misc --detail /dev/md2<br><br>resize2fs /dev/md2<br><br><br><span class="hljs-built_in">df</span> -h<br></code></pre></td></tr></table></figure><p>引用：</p><p><a href="https://hostloc.com/thread-929902-1-1.html">kimsufi服务器 简单修改raid类型-美国VPS综合讨论-全球主机交流论坛 - Powered by Discuz! (hostloc.com)</a></p><p>感谢：@start，@xiaoguiwk</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;op30o&lt;/p&gt;
&lt;p&gt;Disk: 2x 1TB (SSD SATA)&lt;/p&gt;
&lt;p&gt;想装成raid0&lt;/p&gt;
&lt;p&gt;试了好几种方法&lt;/p&gt;
&lt;p&gt;最后此种成功&lt;/p&gt;
&lt;p&gt;系统：Debian 10&lt;/p&gt;
&lt;p&gt;刚开始是Ubuntu 18，大佬帮我装半天，换成Debi</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="raid" scheme="https://shyi.org/tags/raid/"/>
    
  </entry>
  
  <entry>
    <title>常见问题解决方案</title>
    <link href="https://shyi.org/posts/49359/"/>
    <id>https://shyi.org/posts/49359/</id>
    <published>2022-10-18T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<h3 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h3><p>用于记录各种问题的解决方案</p><h4 id="chrome一直-ERR-INSUFFICIENT-RESOURCES"><a href="#chrome一直-ERR-INSUFFICIENT-RESOURCES" class="headerlink" title="chrome一直 ERR_INSUFFICIENT_RESOURCES"></a>chrome一直 <strong>ERR_INSUFFICIENT_RESOURCES</strong></h4><p>现象：</p><blockquote><p>刷新网页大部分报上方错误，就连访问路由器ip都会报错。</p></blockquote><p>解决方案：</p><p>管理员权限运行CMD，然后运行下列命令</p><blockquote><ol><li>ipconfig&#x2F;flushdns</li><li>nbtstat -r</li><li>netsh int ip reset</li><li>netsh winsock reset</li></ol></blockquote><h4 id="无法找到-xx-com-的-DNS-地址。正在诊断该问题。"><a href="#无法找到-xx-com-的-DNS-地址。正在诊断该问题。" class="headerlink" title="无法找到 xx.com 的 DNS 地址。正在诊断该问题。"></a>无法找到 <strong>xx.com</strong> 的 DNS 地址。正在诊断该问题。</h4><p>现象：</p><p>访问域名会出现上方错误，能够直接访问IP地址</p><p>解决方案：</p><blockquote><p>普通用户修改DNS</p><p>223.5.5.5 223.6.6.6</p><p>114.114.114.114</p><p>8.8.8.8 8.8.4.4</p><p>校园网用户建议使用分配的DNS地址或者对应省份运营商的DNS地址</p></blockquote><h4 id="ping-socket-Operation-not-permitted"><a href="#ping-socket-Operation-not-permitted" class="headerlink" title="ping: socket: Operation not permitted"></a>ping: socket: Operation not permitted</h4><p>现象：</p><p>普通用户ping会出现上面错误。</p><p>只有root用户才能建立ICMP报文，chmod u+s 就是给某个程序的所有者以suid权限，可以像root用户一样操作。</p><p>解决方案：</p><blockquote><p>方案1： sudo ping 192.168.1.100 （暂时）</p><p>方案2： chmod u+s &#x2F;bin&#x2F;ping （永久）</p></blockquote><h4 id="查看Windows电脑之前连接过的WiFi密码"><a href="#查看Windows电脑之前连接过的WiFi密码" class="headerlink" title="查看Windows电脑之前连接过的WiFi密码"></a>查看Windows电脑之前连接过的WiFi密码</h4><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs cmd"># 显示所有连接过的WiFi名称<br>netsh wlan show profiles<br># 将&quot;WiFi名称&quot;换成你要查询的WiFi名字即可查询到WiFi密码<br>netsh wlan show profiles name=&quot;WiFi名称&quot; key=clear<br># 查询所有的WiFi密码<br><span class="hljs-keyword">for</span> /f &quot;skip=<span class="hljs-number">9</span> tokens=<span class="hljs-number">1</span>,<span class="hljs-number">2</span> delims=:&quot; %i <span class="hljs-keyword">in</span> (&#x27;netsh wlan show profiles&#x27;) <span class="hljs-keyword">do</span>  @<span class="hljs-built_in">echo</span> %j | <span class="hljs-built_in">findstr</span> -i -v <span class="hljs-built_in">echo</span> | netsh wlan show profiles %j key=clear<br></code></pre></td></tr></table></figure><h4 id="某软件出现skipping-tracker-announce-unreachable"><a href="#某软件出现skipping-tracker-announce-unreachable" class="headerlink" title="某软件出现skipping tracker announce (unreachable)"></a>某软件出现skipping tracker announce (unreachable)</h4><p>开关 qb 里高级-&gt;验证 HTTPS tracker 证书</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;常见问题&quot;&gt;&lt;a href=&quot;#常见问题&quot; class=&quot;headerlink&quot; title=&quot;常见问题&quot;&gt;&lt;/a&gt;常见问题&lt;/h3&gt;&lt;p&gt;用于记录各种问题的解决方案&lt;/p&gt;
&lt;h4 id=&quot;chrome一直-ERR-INSUFFICIENT-RESOURCES&quot;</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Windows" scheme="https://shyi.org/tags/Windows/"/>
    
    <category term="chrome" scheme="https://shyi.org/tags/chrome/"/>
    
    <category term="linux" scheme="https://shyi.org/tags/linux/"/>
    
  </entry>
  
  <entry>
    <title>搭建webdav</title>
    <link href="https://shyi.org/posts/35575/"/>
    <id>https://shyi.org/posts/35575/</id>
    <published>2022-09-08T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.948Z</updated>
    
    <content type="html"><![CDATA[<p>搭建自己的webdav</p><ol><li>使用docker-compose安装</li></ol><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">webdav:</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">bytemark/webdav</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">webdav</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">always</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;81:80&quot;</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-attr">AUTH_TYPE:</span> <span class="hljs-string">Digest</span><br>      <span class="hljs-attr">USERNAME:</span> <span class="hljs-string">username</span><br>      <span class="hljs-attr">PASSWORD:</span> <span class="hljs-string">xxxxxxx</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/&lt;username&gt;/webdav/dav:/var/lib/dav</span><br>      <span class="hljs-comment">#- /home/&lt;username&gt;/webdav/apache2_conf/httpd.conf:/usr/local/apache2/conf/httpd.conf</span><br></code></pre></td></tr></table></figure><ol start="2"><li>使用nginx反代</li></ol><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span> &#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">server_name</span> dav.xx.com;<br>    <span class="hljs-section">location</span> /     &#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:81;<br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> remote_addr <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> REMOTE-HOST <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-comment"># 此方法可能不适合域名反代 </span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-attribute">add_header</span> Cache-Control <span class="hljs-literal">no</span>-cache;  <br>    &#125; <br>    <span class="hljs-comment">#禁止爬虫,if语句必须放在server或者location范围内，不能放在http范围内。</span><br>    <span class="hljs-attribute">if</span> (<span class="hljs-variable">$http_user_agent</span> <span class="hljs-regexp">~* &quot;qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!</span> Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot<span class="hljs-string">&quot; ) &#123;        return 403;     &#125; </span><br><span class="hljs-string">    access_log  /www/wwwlogs/dav.xx.com.log;  #日志可以不写    </span><br><span class="hljs-string">    error_log   /www/wwwlogs/dav.xx.com.error.log;</span><br><span class="hljs-string">&#125;</span><br></code></pre></td></tr></table></figure><p>应用里显示正常，网页现在显示的是乱码，看着很不舒服</p><p>需要修改‘httpd.conf’的配置，首先需要将文件挂载到本地，要不然重启容器后会消失</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it webdav bash<br>su root<br><span class="hljs-built_in">cp</span> /usr/local/apache2/conf/httpd.conf /var/lib/dav/<br><span class="hljs-built_in">exit</span><br><span class="hljs-built_in">exit</span><br><span class="hljs-built_in">mv</span> /home/&lt;username&gt;/webdav/dav/httpd.conf /home/&lt;username&gt;/webdav/apache2_conf/httpd.conf<br><br>vim httpd.conf<br><span class="hljs-comment">#加在ServerRoot下面，大概在32行</span><br>AddDefaultCharset utf-8<br>IndexOptions +Charset=UTF-8<br>AddCharset UTF-8 .utf8<br><br><span class="hljs-comment">#取消docker-compose.yaml注释</span><br>docker-compose down &amp;&amp; docker-compose up -d<br></code></pre></td></tr></table></figure><p>刷新网页就变成正常字体了</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;搭建自己的webdav&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用docker-compose安装&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;highlight yaml&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;lin</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Nginx" scheme="https://shyi.org/tags/Nginx/"/>
    
    <category term="Docker" scheme="https://shyi.org/tags/Docker/"/>
    
    <category term="webdav" scheme="https://shyi.org/tags/webdav/"/>
    
  </entry>
  
  <entry>
    <title>Sublime Text的注意事项</title>
    <link href="https://shyi.org/posts/14961/"/>
    <id>https://shyi.org/posts/14961/</id>
    <published>2022-09-03T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<h4 id="下载"><a href="#下载" class="headerlink" title="下载"></a>下载</h4><p>a. <a href="https://www.sublimetext.com/">官网</a>下载sublime text</p><p>b. <a href="https://0122.lanzout.com/b03jaz2pa">蓝奏云</a>下载，密码0000</p><p>使用激活码：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs txt">—– BEGIN LICENSE —–<br>Mifeng User<br>Single User License<br>EA7E-1184812<br>C0DAA9CD 6BE825B5 FF935692 1750523A<br>EDF59D3F A3BD6C96 F8D33866 3F1CCCEA<br>1C25BE4D 25B1C4CC 5110C20E 5246CC42<br>D232C83B C99CCC42 0E32890C B6CBF018<br>B1D4C178 2F9DDB16 ABAA74E5 95304BEF<br>9D0CCFA9 8AF8F8E2 1E0A955E 4771A576<br>50737C65 325B6C32 817DCB83 A7394DFA<br>27B7E747 736A1198 B3865734 0B434AA5<br>—— END LICENSE ——<br></code></pre></td></tr></table></figure><h4 id="调中文"><a href="#调中文" class="headerlink" title="调中文"></a>调中文</h4><ol><li>使用快捷键Shift+Ctrl+P，弹出查找栏</li><li>输入关键字 install ，出现下拉选项，点击选择其中的：<code>Package Control: Install Package</code></li><li>使用快捷键Shift+Ctrl+P，弹出查找栏在搜索框中输入chinese，选择下拉框中的<code>ChineseLocalizations</code></li><li>点击安装完成</li></ol><h4 id="运行代码"><a href="#运行代码" class="headerlink" title="运行代码"></a>运行代码</h4><p>选择<code>工具</code>-&gt;<code>编译系统</code>-&gt;<code>自动</code></p><p>Ctrl + B 运行</p><p>如果提示No Build System，或者运行错误，可以尝试一下方法：</p><p>选择<code>工具</code>-&gt;<code>编译系统</code>-&gt;<code>新建编译系统</code></p><p>以Nodejs为例，注意json格式，命名为<code>Node.sublime-build</code></p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs json"><span class="hljs-punctuation">&#123;</span><br>    <span class="hljs-attr">&quot;cmd&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">&quot;C:/Program Files/nodejs/node.exe&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-string">&quot;$file&quot;</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-attr">&quot;selector&quot;</span> <span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;source.js&quot;</span><span class="hljs-punctuation">,</span><br><span class="hljs-punctuation">&#125;</span><br># 或者<br><span class="hljs-punctuation">&#123;</span><br>    <span class="hljs-attr">&quot;cmd&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">&quot;C:\\Program Files\\nodejs\\node.exe&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-string">&quot;$file&quot;</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-attr">&quot;selector&quot;</span> <span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;source.js&quot;</span><span class="hljs-punctuation">,</span><br><span class="hljs-punctuation">&#125;</span><br></code></pre></td></tr></table></figure><p>这时再选择<code>工具</code>-&gt;<code>编译系统</code>-&gt;<code>自动</code>，即可自动编译js代码。</p><h4 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h4><h5 id="设置底部状态栏显示当前编码格式"><a href="#设置底部状态栏显示当前编码格式" class="headerlink" title="设置底部状态栏显示当前编码格式"></a>设置底部状态栏显示当前编码格式</h5><p><code>Preferences</code>-&gt;<code>settings</code> | <code>首选项</code>-&gt;<code>设置</code></p><p>点击左边<code>Ctrl+F</code>搜索<code>show_encoding</code>，大约在612行，修改为<code>true</code></p><p>或者复制到右边修改为<code>true</code>，便于统一修改。</p><h5 id="快捷键"><a href="#快捷键" class="headerlink" title="快捷键"></a>快捷键</h5><figure class="highlight subunit"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><code class="hljs subunit">　　选择类<br>Ctrl+D　选中光标所占的文本，继续操作则会选中下一个相同的文本<br>Alt+F3　选择一个选中项的所有匹配项<br>Ctrl+Enter　　在下一行插入新行<br>Ctrl+Shift+Enter　　在上一行插入新行<br>Ctrl+L　　选中整行、继续操作则选择下一行、效果与Shift+↓效果一样<br>Ctrl+shift+L　　先选中多行，再按下快捷键，会在每行行尾插入光标，即可同时编辑这些行<br>Ctrl+shift+M　选择括号之间的一切,使用CSS<br>Ctrl+M　　光标移动至大括号内结束或开始的位置<br>Ctrl+shift+[　　选中代码，按下快捷键，折叠代码<br>Ctrl+shift+]　　选中代码，按下快捷键，展开代码<br>Ctrl+K<span class="hljs-string">+0</span>　　展开所有折叠代码<br>Ctrl+shift+&#x27;　选择与光标关联的开始和结束标签<br>Ctrl+shift+a　再次按下它,将选择父容器,再按,将选择父容器的父容器<br>Ctrl+F2　　设置书签<br>F2　　查找书签(有的话)<br>　　移动行和文本<br>Ctrl+shift+↑　于上一行互换位置<br>Ctrl+shift+D　如果你已经选中了文本,它会复制你的选中项。否则,把光标放在行上,会复制整行<br>Ctrl+[或]　增加和减少缩进 <br>Ctrl+shift+;　移除选中项的标签元素<br>Ctrl+shift+v　粘贴并保持缩进<br>Alt+shift+w　使用标签包裹一行; 开始输入你想使用的标签<br>Ctrl+K+U　　大写<br>Ctrl+K+L　　小写<br>　　文本和数字的操作<br>Ctrl+shift+y　计算数学表达式<br>Alt+shift+↑　增长1<br>Ctr+↑　　　　增长10<br>Ctrl+/　　　　注释<br>Ctrl+shift+/　　注释选中的<br>　　显示类<br>Ctrl+Tab　　按文件浏览过的顺序，切换当前窗口的标签页<br>Ctrl+PageDown　　向左切换当前窗口的标签页<br>Ctrl+PageUp　　向右切换当前窗口的标签页<br>Alt+shift<span class="hljs-string">+1</span>　　窗口分屏，恢复默认1屏（非小键盘的数字）<br>Alt+shift<span class="hljs-string">+2</span>　　左右分屏<span class="hljs-string">-2</span>列<br>Alt+shift<span class="hljs-string">+3</span>　　左右分屏<span class="hljs-string">-3</span>列<br>Alt+shift<span class="hljs-string">+4</span>　　左右分屏<span class="hljs-string">-4</span>列<br>Alt+shift<span class="hljs-string">+5</span>　　等分4屏<br>Alt+shift<span class="hljs-string">+8</span>　　垂直分屏<span class="hljs-string">-2</span>屏<br>Alt+shift<span class="hljs-string">+9</span>　　垂直分屏<span class="hljs-string">-3</span>屏<br>Ctrl+K+B　　开启/关闭侧边栏<br>F11　　全屏模式<br>Shift+F11　　免打扰模式<br>view　→　Hide Menu 隐藏工具栏(按住Alt工具栏显示)<br></code></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h4 id=&quot;下载&quot;&gt;&lt;a href=&quot;#下载&quot; class=&quot;headerlink&quot; title=&quot;下载&quot;&gt;&lt;/a&gt;下载&lt;/h4&gt;&lt;p&gt;a. &lt;a href=&quot;https://www.sublimetext.com/&quot;&gt;官网&lt;/a&gt;下载sublime text&lt;/p&gt;
&lt;p&gt;</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="sublime text" scheme="https://shyi.org/tags/sublime-text/"/>
    
  </entry>
  
  <entry>
    <title>正则表达式</title>
    <link href="https://shyi.org/posts/46563/"/>
    <id>https://shyi.org/posts/46563/</id>
    <published>2022-08-20T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.948Z</updated>
    
    <content type="html"><![CDATA[<h2 id="使用正则表达式"><a href="#使用正则表达式" class="headerlink" title="使用正则表达式"></a>使用正则表达式</h2><p>转载于<a href="https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/12.%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%92%8C%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.md">Python-100-Days</a></p><p>目的：为了查阅学习更加简单</p><p>其他网站：</p><p><a href="https://deerchao.net/tutorials/regex/regex.htm">正则表达式30分钟入门教程</a></p><p><a href="https://regex101.com/">regex101</a></p><p><a href="https://www.liaoxuefeng.com/wiki/1016959663602400/1017639890281664">liaoxuefeng</a></p><p><a href="https://www.runoob.com/python3/python3-reg-expressions.html">runoob</a></p><p><a href="https://www.w3cschool.cn/python3/python3-reg-expressions.html">w3cschool</a></p><p><a href="https://jex.im/regulex">regulex</a></p><h3 id="正则表达式相关知识"><a href="#正则表达式相关知识" class="headerlink" title="正则表达式相关知识"></a>正则表达式相关知识</h3><p>在编写处理字符串的程序或网页时，经常会有查找符合某些复杂规则的字符串的需要，正则表达式就是用于描述这些规则的工具，换句话说正则表达式是一种工具，它定义了字符串的匹配模式（如何检查一个字符串是否有跟某种模式匹配的部分或者从一个字符串中将与模式匹配的部分提取出来或者替换掉）。如果你在Windows操作系统中使用过文件查找并且在指定文件名时使用过通配符（*和?），那么正则表达式也是与之类似的用来进行文本匹配的工具，只不过比起通配符正则表达式更强大，它能更精确地描述你的需求（当然你付出的代价是书写一个正则表达式比打出一个通配符要复杂得多，要知道任何给你带来好处的东西都是有代价的，就如同学习一门编程语言一样），比如你可以编写一个正则表达式，用来查找所有以0开头，后面跟着2-3个数字，然后是一个连字号“-”，最后是7或8位数字的字符串（像028-12345678或0813-7654321），这不就是国内的座机号码吗。最初计算机是为了做数学运算而诞生的，处理的信息基本上都是数值，而今天我们在日常工作中处理的信息基本上都是文本数据，我们希望计算机能够识别和处理符合某些模式的文本，正则表达式就显得非常重要了。今天几乎所有的编程语言都提供了对正则表达式操作的支持，Python通过标准库中的re模块来支持正则表达式操作。</p><p>我们可以考虑下面一个问题：我们从某个地方（可能是一个文本文件，也可能是网络上的一则新闻）获得了一个字符串，希望在字符串中找出手机号和座机号。当然我们可以设定手机号是11位的数字（注意并不是随机的11位数字，因为你没有见过“25012345678”这样的手机号吧）而座机号跟上一段中描述的模式相同，如果不使用正则表达式要完成这个任务就会很麻烦。</p><p>关于正则表达式的相关知识，大家可以阅读一篇非常有名的博客叫<a href="https://deerchao.net/tutorials/regex/regex.htm">《正则表达式30分钟入门教程》</a>，读完这篇文章后你就可以看懂下面的表格，这是我们对正则表达式中的一些基本符号进行的扼要总结。</p><table><thead><tr><th>符号</th><th>解释</th><th>示例</th><th>说明</th></tr></thead><tbody><tr><td>.</td><td>匹配任意字符</td><td>b.t</td><td>可以匹配bat &#x2F; but &#x2F; b#t &#x2F; b1t等</td></tr><tr><td>\w</td><td>匹配字母&#x2F;数字&#x2F;下划线</td><td>b\wt</td><td>可以匹配bat &#x2F; b1t &#x2F; b_t等<br>但不能匹配b#t</td></tr><tr><td>\s</td><td>匹配空白字符（包括\r、\n、\t等）</td><td>love\syou</td><td>可以匹配love you</td></tr><tr><td>\d</td><td>匹配数字</td><td>\d\d</td><td>可以匹配01 &#x2F; 23 &#x2F; 99等</td></tr><tr><td>\b</td><td>匹配单词的边界</td><td>\bThe\b</td><td></td></tr><tr><td>^</td><td>匹配字符串的开始</td><td>^The</td><td>可以匹配The开头的字符串</td></tr><tr><td>$</td><td>匹配字符串的结束</td><td>.exe$</td><td>可以匹配.exe结尾的字符串</td></tr><tr><td>\W</td><td>匹配非字母&#x2F;数字&#x2F;下划线</td><td>b\Wt</td><td>可以匹配b#t &#x2F; b@t等<br>但不能匹配but &#x2F; b1t &#x2F; b_t等</td></tr><tr><td>\S</td><td>匹配非空白字符</td><td>love\Syou</td><td>可以匹配love#you等<br>但不能匹配love you</td></tr><tr><td>\D</td><td>匹配非数字</td><td>\d\D</td><td>可以匹配9a &#x2F; 3# &#x2F; 0F等</td></tr><tr><td>\B</td><td>匹配非单词边界</td><td>\Bio\B</td><td></td></tr><tr><td>[]</td><td>匹配来自字符集的任意单一字符</td><td>[aeiou]</td><td>可以匹配任一元音字母字符</td></tr><tr><td>[^]</td><td>匹配不在字符集中的任意单一字符</td><td>[^aeiou]</td><td>可以匹配任一非元音字母字符</td></tr><tr><td>*</td><td>匹配0次或多次</td><td>\w*</td><td></td></tr><tr><td>+</td><td>匹配1次或多次</td><td>\w+</td><td></td></tr><tr><td>?</td><td>匹配0次或1次</td><td>\w?</td><td></td></tr><tr><td>{N}</td><td>匹配N次</td><td>\w{3}</td><td></td></tr><tr><td>{M,}</td><td>匹配至少M次</td><td>\w{3,}</td><td></td></tr><tr><td>{M,N}</td><td>匹配至少M次至多N次</td><td>\w{3,6}</td><td></td></tr><tr><td>|</td><td>分支</td><td>foo|bar</td><td>可以匹配foo或者bar</td></tr><tr><td>(?#)</td><td>注释</td><td></td><td></td></tr><tr><td>(exp)</td><td>匹配exp并捕获到自动命名的组中</td><td></td><td></td></tr><tr><td>(?&lt;name&gt;exp)</td><td>匹配exp并捕获到名为name的组中</td><td></td><td></td></tr><tr><td>(?:exp)</td><td>匹配exp但是不捕获匹配的文本</td><td></td><td></td></tr><tr><td>(?&#x3D;exp)</td><td>匹配exp前面的位置</td><td>\b\w+(?&#x3D;ing)</td><td>可以匹配I’m dancing中的danc</td></tr><tr><td>(?&lt;&#x3D;exp)</td><td>匹配exp后面的位置</td><td>(?&lt;&#x3D;\bdanc)\w+\b</td><td>可以匹配I love dancing and reading中的第一个ing</td></tr><tr><td>(?!exp)</td><td>匹配后面不是exp的位置</td><td></td><td></td></tr><tr><td>(?&lt;!exp)</td><td>匹配前面不是exp的位置</td><td></td><td></td></tr><tr><td>*?</td><td>重复任意次，但尽可能少重复</td><td>a.*b<br>a.*?b</td><td>将正则表达式应用于aabab，前者会匹配整个字符串aabab，后者会匹配aab和ab两个字符串</td></tr><tr><td>+?</td><td>重复1次或多次，但尽可能少重复</td><td></td><td></td></tr><tr><td>??</td><td>重复0次或1次，但尽可能少重复</td><td></td><td></td></tr><tr><td>{M,N}?</td><td>重复M到N次，但尽可能少重复</td><td></td><td></td></tr><tr><td>{M,}?</td><td>重复M次以上，但尽可能少重复</td><td></td><td></td></tr></tbody></table><blockquote><p><strong>说明：</strong> 如果需要匹配的字符是正则表达式中的特殊字符，那么可以使用\进行转义处理，例如想匹配小数点可以写成\.就可以了，因为直接写.会匹配任意字符；同理，想匹配圆括号必须写成\(和\)，否则圆括号被视为正则表达式中的分组。</p></blockquote><h3 id="Python对正则表达式的支持"><a href="#Python对正则表达式的支持" class="headerlink" title="Python对正则表达式的支持"></a>Python对正则表达式的支持</h3><p>Python提供了re模块来支持正则表达式相关操作，下面是re模块中的核心函数。</p><table><thead><tr><th>函数</th><th>说明</th></tr></thead><tbody><tr><td>compile(pattern, flags&#x3D;0)</td><td>编译正则表达式返回正则表达式对象</td></tr><tr><td>match(pattern, string, flags&#x3D;0)</td><td>用正则表达式匹配字符串 成功返回匹配对象 否则返回None</td></tr><tr><td>search(pattern, string, flags&#x3D;0)</td><td>搜索字符串中第一次出现正则表达式的模式 成功返回匹配对象 否则返回None</td></tr><tr><td>split(pattern, string, maxsplit&#x3D;0, flags&#x3D;0)</td><td>用正则表达式指定的模式分隔符拆分字符串 返回列表</td></tr><tr><td>sub(pattern, repl, string, count&#x3D;0, flags&#x3D;0)</td><td>用指定的字符串替换原字符串中与正则表达式匹配的模式 可以用count指定替换的次数</td></tr><tr><td>fullmatch(pattern, string, flags&#x3D;0)</td><td>match函数的完全匹配（从字符串开头到结尾）版本</td></tr><tr><td>findall(pattern, string, flags&#x3D;0)</td><td>查找字符串所有与正则表达式匹配的模式 返回字符串的列表</td></tr><tr><td>finditer(pattern, string, flags&#x3D;0)</td><td>查找字符串所有与正则表达式匹配的模式 返回一个迭代器</td></tr><tr><td>purge()</td><td>清除隐式编译的正则表达式的缓存</td></tr><tr><td>re.I &#x2F; re.IGNORECASE</td><td>忽略大小写匹配标记</td></tr><tr><td>re.M &#x2F; re.MULTILINE</td><td>多行匹配标记</td></tr></tbody></table><blockquote><p><strong>说明：</strong> 上面提到的re模块中的这些函数，实际开发中也可以用正则表达式对象的方法替代对这些函数的使用，如果一个正则表达式需要重复的使用，那么先通过compile函数编译正则表达式并创建出正则表达式对象无疑是更为明智的选择。</p></blockquote><p>下面我们通过一系列的例子来告诉大家在Python中如何使用正则表达式。</p><h4 id="例子1：验证输入用户名和QQ号是否有效并给出对应的提示信息。"><a href="#例子1：验证输入用户名和QQ号是否有效并给出对应的提示信息。" class="headerlink" title="例子1：验证输入用户名和QQ号是否有效并给出对应的提示信息。"></a>例子1：验证输入用户名和QQ号是否有效并给出对应的提示信息。</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs Python"><span class="hljs-string">&quot;&quot;&quot;</span><br><span class="hljs-string">验证输入用户名和QQ号是否有效并给出对应的提示信息</span><br><span class="hljs-string"></span><br><span class="hljs-string">要求：用户名必须由字母、数字或下划线构成且长度在6~20个字符之间，QQ号是5~12的数字且首位不能为0</span><br><span class="hljs-string">&quot;&quot;&quot;</span><br><span class="hljs-keyword">import</span> re<br><br><br><span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>():<br>    username = <span class="hljs-built_in">input</span>(<span class="hljs-string">&#x27;请输入用户名: &#x27;</span>)<br>    qq = <span class="hljs-built_in">input</span>(<span class="hljs-string">&#x27;请输入QQ号: &#x27;</span>)<br>    <span class="hljs-comment"># match函数的第一个参数是正则表达式字符串或正则表达式对象</span><br>    <span class="hljs-comment"># 第二个参数是要跟正则表达式做匹配的字符串对象</span><br>    m1 = re.<span class="hljs-keyword">match</span>(<span class="hljs-string">r&#x27;^[0-9a-zA-Z_]&#123;6,20&#125;$&#x27;</span>, username)<br>    <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> m1:<br>        <span class="hljs-built_in">print</span>(<span class="hljs-string">&#x27;请输入有效的用户名.&#x27;</span>)<br>    m2 = re.<span class="hljs-keyword">match</span>(<span class="hljs-string">r&#x27;^[1-9]\d&#123;4,11&#125;$&#x27;</span>, qq)<br>    <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> m2:<br>        <span class="hljs-built_in">print</span>(<span class="hljs-string">&#x27;请输入有效的QQ号.&#x27;</span>)<br>    <span class="hljs-keyword">if</span> m1 <span class="hljs-keyword">and</span> m2:<br>        <span class="hljs-built_in">print</span>(<span class="hljs-string">&#x27;你输入的信息是有效的!&#x27;</span>)<br><br><br><span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">&#x27;__main__&#x27;</span>:<br>    main()<br></code></pre></td></tr></table></figure><blockquote><p><strong>提示：</strong> 上面在书写正则表达式时使用了“原始字符串”的写法（在字符串前面加上了r），所谓“原始字符串”就是字符串中的每个字符都是它原始的意义，说得更直接一点就是字符串中没有所谓的转义字符啦。因为正则表达式中有很多元字符和需要进行转义的地方，如果不使用原始字符串就需要将反斜杠写作\\，例如表示数字的\d得书写成\\d，这样不仅写起来不方便，阅读的时候也会很吃力。</p></blockquote><h4 id="例子2：从一段文字中提取出国内手机号码。"><a href="#例子2：从一段文字中提取出国内手机号码。" class="headerlink" title="例子2：从一段文字中提取出国内手机号码。"></a>例子2：从一段文字中提取出国内手机号码。</h4><p>下面这张图是截止到2017年底，国内三家运营商推出的手机号段。</p><p><img src="https://img.shyi.org/images/be35cfe5fee1279b3b099c04b9755a31.png"></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><code class="hljs Python"><span class="hljs-keyword">import</span> re<br><br><br><span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>():<br>    <span class="hljs-comment"># 创建正则表达式对象 使用了前瞻和回顾来保证手机号前后不应该出现数字</span><br>    pattern = re.<span class="hljs-built_in">compile</span>(<span class="hljs-string">r&#x27;(?&lt;=\D)1[34578]\d&#123;9&#125;(?=\D)&#x27;</span>)<br>    sentence = <span class="hljs-string">&#x27;&#x27;&#x27;</span><br><span class="hljs-string">    重要的事情说8130123456789遍，我的手机号是13512346789这个靓号，</span><br><span class="hljs-string">    不是15600998765，也是110或119，王大锤的手机号才是15600998765。</span><br><span class="hljs-string">    &#x27;&#x27;&#x27;</span><br>    <span class="hljs-comment"># 查找所有匹配并保存到一个列表中</span><br>    mylist = re.findall(pattern, sentence)<br>    <span class="hljs-built_in">print</span>(mylist)<br>    <span class="hljs-built_in">print</span>(<span class="hljs-string">&#x27;--------华丽的分隔线--------&#x27;</span>)<br>    <span class="hljs-comment"># 通过迭代器取出匹配对象并获得匹配的内容</span><br>    <span class="hljs-keyword">for</span> temp <span class="hljs-keyword">in</span> pattern.finditer(sentence):<br>        <span class="hljs-built_in">print</span>(temp.group())<br>    <span class="hljs-built_in">print</span>(<span class="hljs-string">&#x27;--------华丽的分隔线--------&#x27;</span>)<br>    <span class="hljs-comment"># 通过search函数指定搜索位置找出所有匹配</span><br>    m = pattern.search(sentence)<br>    <span class="hljs-keyword">while</span> m:<br>        <span class="hljs-built_in">print</span>(m.group())<br>        m = pattern.search(sentence, m.end())<br><br><br><span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">&#x27;__main__&#x27;</span>:<br>    main()<br></code></pre></td></tr></table></figure><blockquote><p><strong>说明：</strong> 上面匹配国内手机号的正则表达式并不够好，因为像14开头的号码只有145或147，而上面的正则表达式并没有考虑这种情况，要匹配国内手机号，更好的正则表达式的写法是：<code>(?&lt;=\D)(1[38]\d&#123;9&#125;|14[57]\d&#123;8&#125;|15[0-35-9]\d&#123;8&#125;|17[678]\d&#123;8&#125;)(?=\D)</code>，国内最近好像有19和16开头的手机号了，但是这个暂时不在我们考虑之列。</p></blockquote><h4 id="例子3：替换字符串中的不良内容"><a href="#例子3：替换字符串中的不良内容" class="headerlink" title="例子3：替换字符串中的不良内容"></a>例子3：替换字符串中的不良内容</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs Python"><span class="hljs-keyword">import</span> re<br><br><br><span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>():<br>    sentence = <span class="hljs-string">&#x27;你丫是傻叉吗? 我操你大爷的. Fuck you.&#x27;</span><br>    purified = re.sub(<span class="hljs-string">&#x27;[操肏艹]|fuck|shit|傻[比屄逼叉缺吊屌]|煞笔&#x27;</span>,<br>                      <span class="hljs-string">&#x27;*&#x27;</span>, sentence, flags=re.IGNORECASE)<br>    <span class="hljs-built_in">print</span>(purified)  <span class="hljs-comment"># 你丫是*吗? 我*你大爷的. * you.</span><br><br><br><span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">&#x27;__main__&#x27;</span>:<br>    main()<br></code></pre></td></tr></table></figure><blockquote><p><strong>说明：</strong> re模块的正则表达式相关函数中都有一个flags参数，它代表了正则表达式的匹配标记，可以通过该标记来指定匹配时是否忽略大小写、是否进行多行匹配、是否显示调试信息等。如果需要为flags参数指定多个值，可以使用<a href="http://www.runoob.com/python/python-operators.html#ysf5">按位或运算符</a>进行叠加，如<code>flags=re.I | re.M</code>。</p></blockquote><h4 id="例子4：拆分长字符串"><a href="#例子4：拆分长字符串" class="headerlink" title="例子4：拆分长字符串"></a>例子4：拆分长字符串</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs Python"><span class="hljs-keyword">import</span> re<br><br><br><span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>():<br>    poem = <span class="hljs-string">&#x27;窗前明月光，疑是地上霜。举头望明月，低头思故乡。&#x27;</span><br>    sentence_list = re.split(<span class="hljs-string">r&#x27;[，。, .]&#x27;</span>, poem)<br>    <span class="hljs-keyword">while</span> <span class="hljs-string">&#x27;&#x27;</span> <span class="hljs-keyword">in</span> sentence_list:<br>        sentence_list.remove(<span class="hljs-string">&#x27;&#x27;</span>)<br>    <span class="hljs-built_in">print</span>(sentence_list)  <span class="hljs-comment"># [&#x27;窗前明月光&#x27;, &#x27;疑是地上霜&#x27;, &#x27;举头望明月&#x27;, &#x27;低头思故乡&#x27;]</span><br><br><br><span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">&#x27;__main__&#x27;</span>:<br>    main()<br></code></pre></td></tr></table></figure><h3 id="后话"><a href="#后话" class="headerlink" title="后话"></a>后话</h3><p>如果要从事爬虫类应用的开发，那么正则表达式一定是一个非常好的助手，因为它可以帮助我们迅速的从网页代码中发现某种我们指定的模式并提取出我们需要的信息，当然对于初学者来收，要编写一个正确的适当的正则表达式可能并不是一件容易的事情（当然有些常用的正则表达式可以直接在网上找找），所以实际开发爬虫应用的时候，有很多人会选择<a href="https://www.crummy.com/software/BeautifulSoup/">Beautiful Soup</a>或<a href="http://lxml.de/">Lxml</a>来进行匹配和信息的提取，前者简单方便但是性能较差，后者既好用性能也好，但是安装稍嫌麻烦，这些内容我们会在后期的爬虫专题中为大家介绍。</p><h2 id="常用正则表达式示例"><a href="#常用正则表达式示例" class="headerlink" title="常用正则表达式示例"></a>常用正则表达式示例</h2><h3 id="数字校验"><a href="#数字校验" class="headerlink" title="数字校验"></a><strong>数字校验</strong></h3><table>  <tbody><tr>    <td><strong>描述</strong></td>    <td><strong>正则表达式</strong></td>    <td><strong>备注</strong></td>  </tr>  <tr>    <td>数字</td>    <td><code>^[0-9]*$</code></td>    <td></td>  </tr>  <tr>    <td>n位数字</td>    <td><code>^\d&#123;n&#125;$</code></td>    <td></td>  </tr>  <tr>    <td>至少n位数字</td>    <td><code>^\d&#123;n,&#125;$</code></td>    <td></td>  </tr>  <tr>    <td>m~n位数字</td>    <td><code>^\d&#123;m,n&#125;$</code></td>    <td></td>  </tr>  <tr>    <td>整数</td>    <td><code>^(-?[1-9]\d*)$</code></td>    <td>非0开头，包括正整数和负整数</td>  </tr>  <tr>    <td>正整数</td>    <td><code>^[1-9]\d*$</code></td>    <td></td>  </tr>  <tr>    <td>负整数</td>    <td><code>^-[1-9]\d*$</code></td>    <td></td>  </tr>  <tr>    <td>非负整数</td>    <td><code>^(([1-9]\d*)|0)$</code></td>    <td></td>  </tr>  <tr>    <td>非正整数</td>    <td><code>^((-[1-9]\d*)|0)$</code></td>    <td></td>  </tr>  <tr>    <td>浮点数</td>    <td><code>^-?(?:[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0\.0+|0)$</code></td>    <td>包括正浮点数和负浮点数</td>  </tr>  <tr>    <td>正浮点数</td>    <td><code>^(?:[1-9]\d*\.\d*|0\.\d*[1-9]\d*)$</code></td>    <td></td>  </tr>  <tr>    <td>负浮点数</td>    <td><code>^-(?:[1-9]\d*\.\d*|0\.\d*[1-9]\d*)$</code></td>    <td></td>  </tr>  <tr>    <td>非正浮点数</td>    <td><code>^(?:-(?:[1-9]\d*\.\d+|0\.\d*[1-9]\d*)|0\.0+|0)$</code></td>    <td>包含0</td>  </tr>    <tr>    <td>非负浮点数</td>    <td><code>^(?:[1-9]\d*\.\d+|0\.\d+|0\.0+|0)$</code></td>    <td>包含0</td>  </tr>  <tr>    <td>仅一位小数</td>    <td><code>^-?(?:0|[1-9][0-9]*)\.[0-9]&#123;1&#125;$</code></td>    <td></td>  </tr>  <tr>    <td>最少一位小数</td>    <td><code>^-?(?:0|[1-9][0-9]*)\.[0-9]&#123;1,&#125;$</code></td>    <td></td>  </tr>  <tr>    <td>最多两位小数</td>    <td><code>^-?(?:0|[1-9][0-9]*)\.[0-9]&#123;1,2&#125;$</code></td>    <td></td>  </tr>  <tr>    <td>连续重复的数字</td>    <td><code>^(\d)\1+$</code></td>    <td>例如：<code>111</code>，<code>222</code></td>  </tr></tbody></table><h3 id="字符校验"><a href="#字符校验" class="headerlink" title="字符校验"></a><strong>字符校验</strong></h3><table>  <tbody><tr>    <td><strong>描述</strong></td>    <td><strong>正则表达式</strong></td>    <td><strong>备注</strong></td>  </tr>  <tr>    <td>中文</td>    <td><code>^[\u4E00-\u9FA5]+$</code></td>    <td></td>  </tr>  <tr>    <td>全角字符</td>    <td><code>^[\uFF00-\uFFFF]+$</code></td>    <td></td>  </tr>  <tr>    <td>半角字符</td>    <td><code>^[\u0000-\u00FF]+$</code></td>    <td></td>  </tr>  <tr>    <td>英文字符串（大写）</td>    <td><code>^[A-Z]+$</code></td>    <td></td>  </tr>  <tr>    <td>英文字符串（小写）</td>    <td><code>^[a-z]+$</code></td>    <td></td>  </tr>  <tr>    <td>英文字符串（不区分大小写）</td>    <td><code>^[A-Za-z]+$</code></td>    <td></td>  </tr>  <tr>    <td>中文和数字</td>    <td><code>^(?:[\u4E00-\u9FA5]&#123;0,&#125;|\d)+$</code></td>    <td></td>  </tr>  <tr>    <td>英文和数字</td>    <td><code>^[A-Za-z0-9]+$</code></td>    <td></td>  </tr>  <tr>    <td>数字、英文字母或者下划线组成的字符串</td>    <td><code>^\w+$</code></td>    <td></td>  </tr>  <tr>    <td>中文、英文、数字包括下划线</td>    <td><code>^[\u4E00-\u9FA5\w]+$</code></td>    <td></td>  </tr>  <tr>    <td>不含字母的字符串</td>    <td><code>^[^A-Za-z]*$</code></td>    <td></td>  </tr>  <tr>    <td>连续重复的字符串</td>    <td><code>^(.)\1+$</code></td>    <td>例如：<code>aa</code>，<code>bb</code></td>  </tr>  <tr>    <td>长度为n的字符串</td>    <td><code>^.&#123;n&#125;$</code></td>    <td></td>  </tr>  <tr>    <td>ASCII</td>    <td><code>^[ -~]$</code></td>    <td></td>  </tr></tbody></table><h3 id="日期和时间校验"><a href="#日期和时间校验" class="headerlink" title="日期和时间校验"></a><strong>日期和时间校验</strong></h3><table>  <tbody><tr>    <td><strong>描述</strong></td>    <td><strong>正则表达式</strong></td>    <td><strong>备注</strong></td>  </tr>  <tr>    <td>日期</td>    <td><code>^\d&#123;1,4&#125;-(?:1[0-2]|0?[1-9])-(?:0?[1-9]|[1-2]\d|30|31)$</code></td>    <td>弱校验，例如：<code>2022-06-12</code></td>  </tr>  <tr>    <td>日期</td>    <td><code>^(?:(?!0000)[0-9]&#123;4&#125;-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]&#123;2&#125;(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$</code></td>    <td>严格校验，考虑平闰年</td>  </tr>  <tr>    <td>时间</td>    <td><code>^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$</code></td>    <td>12小时制，例如：<code>11:21:31</code></td>  </tr>  <tr>    <td>时间</td>    <td><code>^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$</code></td>    <td>24小时制，例如：<code>23:21:31</code></td>  </tr>  <tr>    <td>日期+时间</td>    <td><code>^(\d&#123;1,4&#125;-(?:1[0-2]|0?[1-9])-(?:0?[1-9]|[1-2]\d|30|31)) ((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d)$</code></td>    <td>例如：<code>2000-11-11 23:20:21</code></td>  </tr></tbody></table><h3 id="日常生活相关"><a href="#日常生活相关" class="headerlink" title="日常生活相关"></a><strong>日常生活相关</strong></h3><table>  <tbody><tr>    <td><strong>描述</strong></td>    <td><strong>正则表达式</strong></td>    <td><strong>备注</strong></td>  </tr>  <tr>    <td>日期</td>    <td><code>^\d&#123;1,4&#125;-(?:1[0-2]|0?[1-9])-(?:0?[1-9]|[1-2]\d|30|31)$</code></td>    <td>弱校验，例如：<code>2022-06-12</code></td>  </tr>  <tr>    <td>日期</td>    <td><code>^(?:(?!0000)[0-9]&#123;4&#125;-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]&#123;2&#125;(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$</code></td>    <td>严格校验，考虑平闰年</td>  </tr>  <tr>    <td>时间</td>    <td><code>^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$</code></td>    <td>12小时制，例如：<code>11:21:31</code></td>  </tr>  <tr>    <td>时间</td>    <td><code>^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$</code></td>    <td>24小时制，例如：<code>23:21:31</code></td>  </tr>  <tr>    <td>日期+时间</td>    <td><code>^(\d&#123;1,4&#125;-(?:1[0-2]|0?[1-9])-(?:0?[1-9]|[1-2]\d|30|31)) ((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d)$</code></td>    <td>例如：<code>2000-11-11 23:20:21</code></td>  </tr></tbody></table><h3 id="互联网相关"><a href="#互联网相关" class="headerlink" title="互联网相关"></a><strong>互联网相关</strong></h3><table>  <tbody><tr>    <td><strong>描述</strong></td>    <td><strong>正则表达式</strong></td>    <td><strong>备注</strong></td>  </tr>  <tr>    <td>域名</td>    <td><code>^[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;(?:\.[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;)+$</code></td>    <td>例如：<code>xxxx.com</code></td>  </tr>  <tr>    <td>网址</td>    <td><code>^(?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;(?:\.[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;)+$</code></td>    <td>例如：<code>https://www.xxxx.com/</code></td>  </tr>  <tr>    <td>带端口号的网址(或IP) </td>    <td><code>^(?:https?:\/\/)?[\w-]+(?:\.[\w-]+)+:\d&#123;1,5&#125;\/?$</code></td>    <td>例如：<code>http://127.0.0.1:8888/</code></td>  </tr>      <tr>    <td>URL</td>    <td><code>^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]&#123;1,256&#125;\.[a-zA-Z0-9()]&#123;1,6&#125;\b(?:[-a-zA-Z0-9()!@:%_\+.~#?&amp;\/\/=]*)$</code></td>    <td>例如：<code>https://www.xxxx.com/#/README?id=1</code></td>  </tr>  <tr>    <td>邮箱email</td>    <td><code>^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;(?:\.[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;)+$</code></td>    <td>支持中文，例如：<code>xxxx@xxxx.com</code></td>  </tr>  <tr>    <td>用户名</td>    <td><code>^[a-zA-Z0-9_-]&#123;4,20&#125;$</code></td>    <td>4到20位</td>  </tr>  <tr>    <td>弱密码</td>    <td><code>^[\w]&#123;6,16&#125;$</code></td>    <td>6~16位，包含大小写字母和数字的组合</td>  </tr>  <tr>    <td>强密码</td>    <td><code>^.*(?=.&#123;6,&#125;)(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@\.#$%^&amp;*? ]).*$</code></td>    <td>至少6位，包括至少1个大写字母，1个小写字母，1个数字，1个特殊字符</td>  </tr>  <tr>    <td>端口号</td>    <td><code>^(?:[0-9]|[1-9][0-9]&#123;1,3&#125;|[1-5][0-9]&#123;4&#125;|6[0-4][0-9]&#123;3&#125;|65[0-4][0-9]&#123;2&#125;|655[0-2][0-9]|6553[0-5])$</code></td>    <td>例如：<code>65535</code></td>  </tr>  <tr>    <td>IPv4地址</td>    <td><code>^(?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.)&#123;3&#125;(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$</code></td>    <td>例如：<code>192.168.31.1</code></td>  </tr>  <tr>    <td>IPv4地址+端口</td>    <td><code>^(?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.)&#123;3&#125;(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]&#123;1,3&#125;|[1-5][0-9]&#123;4&#125;|6[0-4][0-9]&#123;3&#125;|65[0-4][0-9]&#123;2&#125;|655[0-2][0-9]|6553[0-5]))?$</code></td>    <td>例如：<code>192.168.31.1:8080</code></td>  </tr>  <tr>    <td>IPv6地址</td>    <td><code>^(([0-9a-fA-F]&#123;1,4&#125;:)&#123;7,7&#125;[0-9a-fA-F]&#123;1,4&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,7&#125;:|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,6&#125;:[0-9a-fA-F]&#123;1,4&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,5&#125;(:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,2&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,4&#125;(:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,3&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,3&#125;(:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,4&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,2&#125;(:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,5&#125;|[0-9a-fA-F]&#123;1,4&#125;:((:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,6&#125;)|:((:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,7&#125;|:)|fe80:(:[0-9a-fA-F]&#123;0,4&#125;)&#123;0,4&#125;%[0-9a-zA-Z]&#123;1,&#125;|::(ffff(:0&#123;1,4&#125;)&#123;0,1&#125;:)&#123;0,1&#125;((25[0-5]|(2[0-4]|1&#123;0,1&#125;[0-9])&#123;0,1&#125;[0-9])\.)&#123;3,3&#125;(25[0-5]|(2[0-4]|1&#123;0,1&#125;[0-9])&#123;0,1&#125;[0-9])|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,4&#125;:((25[0-5]|(2[0-4]|1&#123;0,1&#125;[0-9])&#123;0,1&#125;[0-9])\.)&#123;3,3&#125;(25[0-5]|(2[0-4]|1&#123;0,1&#125;[0-9])&#123;0,1&#125;[0-9]))$</code></td>    <td>例如：<code>CDCD:910A:2222:5498:8475:1111:3900:2020</code></td>  </tr>  <tr>    <td>IPv6地址+端口</td>    <td><code>^\[(([0-9a-fA-F]&#123;1,4&#125;:)&#123;7,7&#125;[0-9a-fA-F]&#123;1,4&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,7&#125;:|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,6&#125;:[0-9a-fA-F]&#123;1,4&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,5&#125;(:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,2&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,4&#125;(:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,3&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,3&#125;(:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,4&#125;|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,2&#125;(:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,5&#125;|[0-9a-fA-F]&#123;1,4&#125;:((:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,6&#125;)|:((:[0-9a-fA-F]&#123;1,4&#125;)&#123;1,7&#125;|:)|fe80:(:[0-9a-fA-F]&#123;0,4&#125;)&#123;0,4&#125;%[0-9a-zA-Z]&#123;1,&#125;|::(ffff(:0&#123;1,4&#125;)&#123;0,1&#125;:)&#123;0,1&#125;((25[0-5]|(2[0-4]|1&#123;0,1&#125;[0-9])&#123;0,1&#125;[0-9])\.)&#123;3,3&#125;(25[0-5]|(2[0-4]|1&#123;0,1&#125;[0-9])&#123;0,1&#125;[0-9])|([0-9a-fA-F]&#123;1,4&#125;:)&#123;1,4&#125;:((25[0-5]|(2[0-4]|1&#123;0,1&#125;[0-9])&#123;0,1&#125;[0-9])\.)&#123;3,3&#125;(25[0-5]|(2[0-4]|1&#123;0,1&#125;[0-9])&#123;0,1&#125;[0-9]))\](?::(?:[0-9]|[1-9][0-9]&#123;1,3&#125;|[1-5][0-9]&#123;4&#125;|6[0-4][0-9]&#123;3&#125;|65[0-4][0-9]&#123;2&#125;|655[0-2][0-9]|6553[0-5]))?$</code></td>    <td>例如：<code>[CDCD:910A:2222:5498:8475:1111:3900:2020]:9800</code></td>  </tr>  <tr>    <td>子网掩码</td>    <td><code>^(?:254|252|248|240|224|192|128)\.0\.0\.0|255\.(?:254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(?:254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(?:255|254|252|248|240|224|192|128|0)$</code></td>    <td>例如：<code>255.255.255.0</code></td>  </tr>  <tr>    <td>MAC地址</td>    <td><code>^(?:(?:[a-f0-9A-F]&#123;2&#125;:)&#123;5&#125;|(?:[a-f0-9A-F]&#123;2&#125;-)&#123;5&#125;)[a-f0-9A-F]&#123;2&#125;$</code></td>    <td></td>  </tr>  <tr>    <td>Version版本号</td>    <td><code>^\d+(?:\.\d+)&#123;2&#125;$</code></td>    <td>例如：<code>12.1.1</code></td>  </tr>  <tr>    <td>图片后缀</td>    <td><code>\.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)+</code></td>    <td>可按需增删扩展名集合</td>  </tr>  <tr>    <td>视频后缀</td>    <td><code>\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)+</code></td>    <td>可按需增删扩展名集合</td>  </tr>  <tr>    <td>图片链接</td>    <td><code>(?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;(?:\.[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;)+.+\.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)</code></td>    <td>可按需增删扩展名集合</td>  </tr>  <tr>    <td>视频链接</td>    <td><code>(?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;(?:\.[a-zA-Z0-9][-a-zA-Z0-9]&#123;0,62&#125;)+.+\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)</code></td>    <td>可按需增删扩展名集合</td>  </tr>  <tr>    <td>迅雷链接</td>    <td><code>thunderx?:\/\/[a-zA-Z\d]+=</code></td>    <td></td>  </tr>  <tr>    <td>ed2k链接</td>    <td><code>ed2k:\/\/\|file\|.+\|\/</code></td>    <td></td>  </tr>  <tr>    <td>磁力链接</td>    <td><code>magnet:\?xt=urn:btih:[0-9a-fA-F]&#123;40,&#125;.*</code></td>    <td></td>  </tr>  </tbody></table><h3 id="其他"><a href="#其他" class="headerlink" title="其他"></a><strong>其他</strong></h3><table>  <tbody><tr>    <td><strong>描述</strong></td>    <td><strong>正则表达式</strong></td>    <td><strong>备注</strong></td>  </tr>  <tr>    <td>MD5格式</td>    <td><code>^(?:[a-f\d]&#123;32&#125;|[A-F\d]&#123;32&#125;)$</code></td>    <td>32位MD5，例如：<code>7552E7071B118CBFFEC8C930455B4297</code></td>  </tr>  <tr>    <td>BASE64格式</td>    <td><code>^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&amp;',()*+;=\-._~:@/?%\s]*?)\s*$</code></td>    <td>例如：<code>data:image/jpeg;base64,xxxx==</code></td>  </tr>  <tr>    <td>UUID</td>    <td><code>^[a-f\d]&#123;4&#125;(?:[a-f\d]&#123;4&#125;-)&#123;4&#125;[a-f\d]&#123;12&#125;$</code></td>    <td>例如：<code>94f9d45a-71b0-4b3c-b69d-20c4bc9c8fdd</code></td>  </tr>  <tr>    <td>16进制</td>    <td><code>^[A-Fa-f0-9]+$</code></td>    <td>例如：<code>FFFFFF</code></td>  </tr>  <tr>    <td>16进制颜色</td>    <td><code>^#?([0-9a-fA-F]&#123;3&#125;|[0-9a-fA-F]&#123;6&#125;)$</code></td>    <td>例如：<code>#FFFFFF</code></td>  </tr>  <tr>    <td>SQL语句</td>    <td><code>^(?:select|drop|delete|create|update|insert).*$</code></td>    <td></td>  </tr>  <tr>    <td>Java包名</td>    <td><code>^(?:[a-zA-Z_]\w*)+(?:[.][a-zA-Z_]\w*)+$</code></td>    <td>例如：<code>com.xxxx.xxxx</code></td>  </tr>  <tr>    <td>文件扩展名</td>    <td><code>\.(?:doc|pdf|txt)</code></td>    <td>可按需增删扩展名集合</td>  </tr>  <tr>    <td>Windows文件路径</td>    <td><code>^[a-zA-Z]:(?:\\[\w\u4E00-\u9FA5\s]+)+[.\w\u4E00-\u9FA5\s]+$</code></td>    <td>例如：<code>C:\Users\Administrator\Desktop\a.txt</code></td>  </tr>  <tr>    <td>Windows文件夹路径</td>    <td><code>^[a-zA-Z]:(?:\\[\w\u4E00-\u9FA5\s]+)+$</code></td>    <td>例如：<code>C:\Users\Administrator\Desktop</code></td>  </tr>  <tr>    <td>Linux文件路径</td>    <td><code>^\/(?:[^/]+\/)*[^/]+$</code></td>    <td>例如：<code>/root/library/a.txt</code></td>  </tr>  <tr>    <td>Linux文件夹路径</td>    <td><code>^\/(?:[^/]+\/)*$</code></td>    <td>例如：<code>/root/library/</code></td>  </tr>  </tbody></table>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;使用正则表达式&quot;&gt;&lt;a href=&quot;#使用正则表达式&quot; class=&quot;headerlink&quot; title=&quot;使用正则表达式&quot;&gt;&lt;/a&gt;使用正则表达式&lt;/h2&gt;&lt;p&gt;转载于&lt;a href=&quot;https://github.com/jackfrued/Python-10</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    <category term="转载" scheme="https://shyi.org/categories/%E8%BD%AC%E8%BD%BD/"/>
    
    
    <category term="转载" scheme="https://shyi.org/tags/%E8%BD%AC%E8%BD%BD/"/>
    
    <category term="Regex" scheme="https://shyi.org/tags/Regex/"/>
    
    <category term="Python" scheme="https://shyi.org/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>安装并使用alist播放视频</title>
    <link href="https://shyi.org/posts/19117/"/>
    <id>https://shyi.org/posts/19117/</id>
    <published>2022-08-03T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<p>写在前头 alist-V3</p><p>使用alist挂载aliyun盘和ondrive等，能够获取到文件的直链，能够更方便地进行分享。</p><h3 id="安装alist："><a href="#安装alist：" class="headerlink" title="安装alist："></a>安装alist：</h3><p>使用docker安装</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 -e TZ=<span class="hljs-string">&quot;Asia/Shanghai&quot;</span> --name=<span class="hljs-string">&quot;alist&quot;</span> xhofe/alist:latest<br></code></pre></td></tr></table></figure><p>docker-compose.yaml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">alist:</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">&#x27;alist&#x27;</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;xhofe/alist:latest&#x27;</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">&#x27;always&#x27;</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;/home/&lt;username&gt;/alist3:/opt/alist/data&#x27;</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;127.0.0.1:5244:5244&#x27;</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;PUID=0&#x27;</span>  <span class="hljs-comment"># 请先chown -R 1000:1000 /home/&lt;username&gt;/alist3再设置为1000</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;PGID=0&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;UMASK=022&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;TZ=Asia/Shanghai&#x27;</span><br></code></pre></td></tr></table></figure><h3 id="nginx反代："><a href="#nginx反代：" class="headerlink" title="nginx反代："></a>nginx反代：</h3><p><strong>服务器才需要nginx反代</strong></p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">server_name</span> alist.demo.com;<br>    <br>    <span class="hljs-section">location</span> /<br>    &#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:5244;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto <span class="hljs-variable">$scheme</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$http_host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> Range <span class="hljs-variable">$http_range</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> If-Range <span class="hljs-variable">$http_if_range</span>;<br>        <span class="hljs-attribute">proxy_redirect</span> <span class="hljs-literal">off</span>;<br>        <span class="hljs-attribute">client_max_body_size</span> <span class="hljs-number">200m</span>;<br>    &#125;<br>    <br>    <span class="hljs-comment">#禁止爬虫,if语句必须放在server或者location范围内，不能放在http范围内。</span><br>    <span class="hljs-attribute">if</span> (<span class="hljs-variable">$http_user_agent</span> <span class="hljs-regexp">~* &quot;qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!</span> Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot<span class="hljs-string">&quot; ) &#123;</span><br><span class="hljs-string">       return 403;</span><br><span class="hljs-string">    &#125;</span><br><span class="hljs-string">    </span><br><span class="hljs-string">    access_log  /www/wwwlogs/alist.demo.com.log;  #日志可以不写</span><br><span class="hljs-string">    error_log   /www/wwwlogs/alist.demo.com.error.log;</span><br><span class="hljs-string">&#125;</span><br></code></pre></td></tr></table></figure><h3 id="添加站点："><a href="#添加站点：" class="headerlink" title="添加站点："></a>添加站点：</h3><h4 id="添加阿里云盘open"><a href="#添加阿里云盘open" class="headerlink" title="添加阿里云盘open"></a>添加阿里云盘open</h4><blockquote><p>此工具获取的刷新令牌仅可以用于 阿里云盘开放平台 存储挂载方式<br>AList 挂载时填写的 token 也应该是这个工具提供的，之前方式获取的不可以<br>暂不适用于其他，同时也仅限用于 Alist 使用<br>同一 IP 在 60 分钟内请求 10 次，会出现 TooManyRequests 🚫避免滥用，请勿滥用🚫<br>例如在 保存&#x2F;编辑 的时候算一次请求，查看文件看视频下载不算。<br>上述的分钟和次数是动态的喔~</p></blockquote><p><a href="https://alist.nn.ci/zh/guide/drivers/aliyundrive_open.html">官方教程</a></p><h4 id="需要先获取登录密码："><a href="#需要先获取登录密码：" class="headerlink" title="需要先获取登录密码："></a>需要先获取登录密码：</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker logs alist<br><span class="hljs-comment"># 或者</span><br>docker <span class="hljs-built_in">exec</span> -it alist ./alist admin<br></code></pre></td></tr></table></figure><h4 id="aliyun获取refresh-token"><a href="#aliyun获取refresh-token" class="headerlink" title="aliyun获取refresh token"></a>aliyun获取refresh token</h4><ol><li><p><del>控制台输入下面代码，浏览器获取的token可能有局限性，未充分尝试</del></p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs js"><span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">parse</span>(<span class="hljs-variable language_">localStorage</span>.<span class="hljs-title function_">getItem</span>(<span class="hljs-string">&#x27;token&#x27;</span>)).<span class="hljs-property">refresh_token</span><br></code></pre></td></tr></table></figure></li><li><p>使用移动端的token，官方推荐，扫描作者二维码可获得</p></li></ol><p>​<a href="https://alist.nn.ci/tool/aliyundrive/request">点击跳转</a></p><p>浏览器输入<code>http://ip:5244</code> 账号admin，密码上面获取的。</p><p><img src="https://img.shyi.org/images/b97e841bce7c600ea76333c7855edc52.png"></p><p><img src="https://img.shyi.org/images/4becfe9a9c128ba8224ed29213375629.png"></p><p><img src="https://img.shyi.org/images/6c971595855ceb1cd9220125f0d9eca6.png"></p><ul><li>挂载路径就是打开你的alist网站出现的文件夹</li><li>302重定向就是不消耗宿主机的流量</li><li>根文件ID是地址栏folder后面的字符串<code>https://www.aliyundrive.com/drive/folder/5fe01e1830601baf774e4827a9fb8fb2b5bf7940</code></li><li>刷新令牌是上面获取的</li><li>移除方式随便选择一个</li></ul><p><img src="https://img.shyi.org/images/ddab3025fd2d1b006a8f621ead0f9c46.png"></p><p>打开视频能够正常播放</p><p><img src="https://img.shyi.org/images/395b879f9191187c06abfa304066bb3d.png"></p><h4 id="添加onedrive"><a href="#添加onedrive" class="headerlink" title="添加onedrive"></a>添加onedrive</h4><p><a href="https://alist.nn.ci/zh/guide/drivers/onedrive.html">官方教程</a></p><p><code>建议在无痕模式下进行</code></p><p>一、点击<a href="https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade">链接</a>创建应用使用自己创建的应用</p><ul><li>点击<code>new registration</code> -&gt; 选择<code>Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)</code>、下面选择<code>web</code>和输入<code> https://tool.nn.ci/onedrive/callback</code>记下<code>Application (client) ID</code>.</li><li>然后选择<code>certificates &amp; secrets</code>，点击<code>new client secret</code>，<code>Description</code>随便填一下，<code>Expires</code>选择24个月，记录下<code>Value</code>(离开页面就不再显示).</li><li>最后选择<code>API permissions</code>,点击<code>Add a permission</code>-&gt; <code>Microsoft Graph</code> -&gt; <code>Delegated permissions</code>搜索<code>file</code>,勾选<code>Files.ReadWrite &amp; Files.ReadWrite.All</code>,点击<code>add permission</code>.</li><li>将之前获取到的<code>client id</code> 和 <code>Value</code>输入到这个<a href="https://alist.nn.ci/tool/onedrive/request.html">链接</a>后点击<code>获取刷新令牌</code>即可获取到token.</li></ul><p>二、打开<a href="https://tool.nn.ci/onedrive/request">链接</a>后点击获取刷新令牌,但是需要组织管理员批准</p><ul><li>登录管理员用户进行授权。</li></ul><h4 id="挂载本地文件"><a href="#挂载本地文件" class="headerlink" title="挂载本地文件"></a>挂载本地文件</h4><p>只需要映射对应的文件夹即可</p><p>例如：添加如下一行</p><figure class="highlight docker"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs docker">-v /bigpan/data:/opt/alist/local \<br></code></pre></td></tr></table></figure><p>选择<code>本机存储</code>根目录路径配置<code>/opt/alist/local</code>即可</p><h3 id="webdav"><a href="#webdav" class="headerlink" title="webdav"></a>webdav</h3><p>默认用户admin就创建了webdav</p><p><img src="https://img.shyi.org/images/300bbd8212a815503875521c5e065292.png"></p><ul><li>webdav地址：<code>http://ip:/5244/dav</code></li><li>账户密码为你创建的。</li><li>挂载本地可以参考<a href="https://shyi.org/posts/2221/">这篇rclone挂载</a></li></ul><h3 id="播放视频"><a href="#播放视频" class="headerlink" title="播放视频"></a>播放视频</h3><p>alist自带的网页播放器对于一些硬字幕视频支持挺好，但是不支持h.265等编码视频，ac3等编码音频。这个时候就需要使用播放软件进行弥补了。一些常用的安卓和Windows软件<a href="https://file.shyi.io/list/%E8%BD%AF%E4%BB%B6/%E8%A7%86%E9%A2%91%E6%92%AD%E6%94%BE">在此</a>，ios和Mac建议使用vlc播放器。</p><p>使用软件播放需要获取到视频的直链(可以直接下载的地址)</p><p>获取直链：</p><ol><li>右键你想要播放的视频，两者都可<br> <img src="https://img.shyi.org/images/63e0f77cb638fb1ce8c423c66a6eff75.png"></li><li>在播放界面<br> <img src="https://img.shyi.org/images/6b08b824b5d629381a22cf869becdc0a.png"></li></ol><p>获取播放列表的直链(potplayer用到)：</p><ul><li>在视频列表界面点击<br><img src="https://img.shyi.org/images/cf00381bef150aabe9452ec70aca0578.png"></li></ul><h4 id="PC端"><a href="#PC端" class="headerlink" title="PC端"></a>PC端</h4><p>一、使用potplayer</p><ul><li>优点：可以将多集视频放入播放列表中</li><li>缺点：如果暂停视频的话，还是会一直向本地(C盘)进行缓存，网速快的话前10分钟就能缓存完，对硬盘不友好。</li></ul><p>使用方法：</p><ol><li>CTRL+U，然后将复制的直链粘贴进去回车即可。</li><li><code>右键</code>-&gt; <code>打开</code> -&gt; <code>打开链接</code> ，粘贴回车</li></ol><p>二、使用vlc</p><ul><li>优点：可以手动设置缓存多少秒</li><li>缺点：不支持播放列表</li></ul><p>使用方法：</p><ol><li>CTRL+N，粘贴回车</li><li>点击<code>媒体</code>-&gt;<code>打开网络串流</code>,粘贴回车</li></ol><h4 id="安卓"><a href="#安卓" class="headerlink" title="安卓"></a>安卓</h4><p>三个软件都在上方链接中，播放时直接点击对应按钮即可播放，MXPlayer需要点击<code>MXPlayer Pro</code><br><img src="https://img.shyi.org/images/b65098f9f060c10ac51d0c3e5214062f.png"></p><p>一、使用nPlayer</p><ul><li>特点：付费、功能多</li></ul><p>二、VLC</p><ul><li>特点：免费、无广告</li></ul><p>三、MX Player</p><ul><li>特点：免费的有广告</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;写在前头 alist-V3&lt;/p&gt;
&lt;p&gt;使用alist挂载aliyun盘和ondrive等，能够获取到文件的直链，能够更方便地进行分享。&lt;/p&gt;
&lt;h3 id=&quot;安装alist：&quot;&gt;&lt;a href=&quot;#安装alist：&quot; class=&quot;headerlink&quot; title=</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Nginx" scheme="https://shyi.org/tags/Nginx/"/>
    
    <category term="alist" scheme="https://shyi.org/tags/alist/"/>
    
    <category term="potplayer" scheme="https://shyi.org/tags/potplayer/"/>
    
    <category term="vlc" scheme="https://shyi.org/tags/vlc/"/>
    
    <category term="aliyun" scheme="https://shyi.org/tags/aliyun/"/>
    
    <category term="Onedrive" scheme="https://shyi.org/tags/Onedrive/"/>
    
    <category term="webdav" scheme="https://shyi.org/tags/webdav/"/>
    
  </entry>
  
  <entry>
    <title>国内怎么愉快使用Github</title>
    <link href="https://shyi.org/posts/14780/"/>
    <id>https://shyi.org/posts/14780/</id>
    <published>2022-07-29T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<h2 id="如何使用Git"><a href="#如何使用Git" class="headerlink" title="如何使用Git"></a>如何使用Git</h2><ol><li><p>首先安装<a href="https://git-scm.com/downloads">git</a></p></li><li><p>使用git打开命令窗口</p></li><li><p>配置user.name、user.email。（显示commit的用户名和邮箱）</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs stylus">git config <span class="hljs-attr">--global</span> user<span class="hljs-selector-class">.name</span> <span class="hljs-string">&#x27;用户名&#x27;</span><br>git config <span class="hljs-attr">--global</span> user<span class="hljs-selector-class">.email</span> <span class="hljs-string">&#x27;邮箱&#x27;</span><br></code></pre></td></tr></table></figure><p>Git的配置一共有三个级别：system(系统级)、global(用户级)和local(版本库)。system的配置整个系统只有一个，global的配置每个账户只有一个，local的配置取决于Git版本库数量，在版本库才能看到。</p><p>这三个级别是逐层覆盖的，首先去查找system配置，其次查找global配置，最后查找local配置。逐层查找的过程中若查到配置值，则会覆盖上一层的配置。假如三个级别都配置了用户信息，则最后生效的配置是local(版本库)级的。</p></li></ol><p>即 local &gt; global &gt; system</p><p>local配置</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git config --<span class="hljs-built_in">local</span> user.name <span class="hljs-string">&#x27;用户名&#x27;</span><br>git config --<span class="hljs-built_in">local</span> user.email <span class="hljs-string">&#x27;邮箱&#x27;</span><br></code></pre></td></tr></table></figure><p>global配置</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git config --global user.name <span class="hljs-string">&#x27;用户名&#x27;</span><br>git config --global user.email <span class="hljs-string">&#x27;邮箱&#x27;</span><br></code></pre></td></tr></table></figure><p>system配置</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git config --system user.name <span class="hljs-string">&#x27;用户名&#x27;</span><br>git config --system user.email <span class="hljs-string">&#x27;邮箱&#x27;</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 取消全局 用户名/邮箱 配置</span><br>git config –global –<span class="hljs-built_in">unset</span> user.name<br>git config –global –<span class="hljs-built_in">unset</span> user.email<br><br><span class="hljs-comment"># 单独设置每个repo 用户名/邮箱</span><br>git config user.name <span class="hljs-string">&#x27;用户名&#x27;</span><br>git config user.email <span class="hljs-string">&#x27;邮箱&#x27;</span><br><span class="hljs-comment"># 原来git clone</span><br>git <span class="hljs-built_in">clone</span> git@github.com:用户名/仓库名.git<br><span class="hljs-comment"># 现在git clone</span><br>git <span class="hljs-built_in">clone</span> git@github.com:用户名/仓库名.git  <span class="hljs-comment"># one</span><br>git <span class="hljs-built_in">clone</span> git@two.github.com:用户名/仓库名.git  <span class="hljs-comment"># two</span><br><span class="hljs-comment"># 或者进入.git修改config成自己的项目名</span><br><br><span class="hljs-comment"># 重建origin ，关联自己账号</span><br>git remote <span class="hljs-built_in">rm</span> origin<br>git remote add origin git@one.github.com:用户名/仓库名.git<br>git push origin master<br></code></pre></td></tr></table></figure><ol start="4"><li>本地生成ssh密钥，中间可以修改文件名，默认就是一路回车</li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">ssh-keygen -t rsa -C <span class="hljs-string">&#x27;邮箱&#x27;</span><br></code></pre></td></tr></table></figure><ol start="5"><li>修改.ssh下的config文件</li></ol><figure class="highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs arduino">notepad %HOMEPATH%\.ssh\config<br># 粘贴并修改以下内容到config，修改username为电脑用户名<br></code></pre></td></tr></table></figure><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs nix">Host github.com<br>  User git<br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br>  <span class="hljs-comment"># 注意修改绝对路径，或者修改username为电脑用户名</span><br>  IdentityFile <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\U</span>sers<span class="hljs-char escape_">\A</span>dministrator<span class="hljs-char escape_">\.</span>ssh<span class="hljs-char escape_">\i</span>d_rsa&quot;</span><br>  TCPKeepAlive yes<br></code></pre></td></tr></table></figure><ol start="6"><li>将公钥(后缀为pub)里的内容复制到github里，<a href="https://github.com/settings/keys">一键直达</a></li></ol><p>不出意外能够正常使用，出意外了也很正常。</p><h2 id="如何代理git"><a href="#如何代理git" class="headerlink" title="如何代理git"></a>如何代理git</h2><p>以上就是配置git的过程，如果你不加hosts还是无法使用，加hosts也是一会一阻断，clone、pull、push统统失败。开代理可以，但是要提前配置好才能使用，要不然挂全局也是没有用的。</p><p>对于pull和clone我们还可以使用之前的<a href="https://shyi.org/posts/11367/#github%E5%8A%A0%E9%80%9F">方式</a>，但是push不行。</p><p>所以我们使用代理</p><ul><li>一个代理</li><li>代理软件的端口号（http和socks）（我使用的是clash，默认端口号为7890）</li></ul><p>在Github上主要用到的是<strong>https</strong>和<strong>ssh协议</strong>，所以我们要对这两种协议流量进行代理，推荐对<strong>ssh协议</strong>进行代理。</p><h3 id="http代理（不推荐）"><a href="#http代理（不推荐）" class="headerlink" title="http代理（不推荐）"></a>http代理（不推荐）</h3><p>使用http代理</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 全局代理设置（推荐）</span><br>git config --global http.proxy http://127.0.0.1:7890<br>git config --global https.proxy http://127.0.0.1:7890<br><span class="hljs-comment"># 只对GitHub代理（不推荐）</span><br>git config --global http.https://github.com.proxy http://127.0.0.1:7890<br></code></pre></td></tr></table></figure><p>使用socks5(h)代理</p><blockquote><p>git 底层使用 libcurl 发送 http 请求，而 libcurl 的代理使用 socks5:&#x2F;&#x2F;时会在本地解析 DNS ，应该改成 socks5h:&#x2F;&#x2F;</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># socks5</span><br><span class="hljs-comment"># 全局代理（推荐）</span><br>git config --global http.proxy socks5://127.0.0.1:7890<br>git config --global https.proxy socks5://127.0.0.1:7890<br><span class="hljs-comment"># 只对GitHub代理（不推荐）</span><br>git config --global http.https://github.com.proxy socks5://127.0.0.1:7890<br><br><span class="hljs-comment"># socks5h</span><br><span class="hljs-comment"># 全局代理（推荐）</span><br>git config --global http.proxy socks5h://127.0.0.1:7890<br>git config --global https.proxy socks5h://127.0.0.1:7890<br><span class="hljs-comment"># 只对GitHub代理（不推荐）</span><br>git config --global http.https://github.com.proxy socks5h://127.0.0.1:7890<br></code></pre></td></tr></table></figure><p>查看代理</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git config --global --get http.proxy<br>git config --global --get https.proxy<br></code></pre></td></tr></table></figure><p>取消代理</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">git config --global --<span class="hljs-built_in">unset</span> http.proxy <br>git config --global --<span class="hljs-built_in">unset</span> https.proxy<br>git config --global --<span class="hljs-built_in">unset</span> http.https://github.com.proxy<br></code></pre></td></tr></table></figure><p>以上配置是针对http协议的，这时在clone和pull时就会使用代理，然而push使用http时，每次都要输入密码，很不方便，所以也要对ssh进行代理。</p><h3 id="ssh代理（强烈推荐）"><a href="#ssh代理（强烈推荐）" class="headerlink" title="ssh代理（强烈推荐）"></a>ssh代理（强烈推荐）</h3><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs jboss-cli"><span class="hljs-comment"># Linux/MacOS下</span><br>vi ~<span class="hljs-string">/.ssh/config</span><br><br><span class="hljs-comment"># Windows下</span><br>notepad %HOMEPATH%\<span class="hljs-string">.ssh</span>\config<br></code></pre></td></tr></table></figure><p>替换connect.exe的路径（与git在同一路径下）和端口号</p><blockquote><p><strong>以下经过我本人实验正确。</strong></p><p>ProxyCommand如果在最上面，那么Host下的ProxyCommand将不起作用，所以要分别代理的话使用第二种。</p><p>ProxyCommand如果在最下面将不起作用。</p></blockquote><h4 id="1-全部代理"><a href="#1-全部代理" class="headerlink" title="1. 全部代理"></a>1. 全部代理</h4><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><code class="hljs nix"><span class="hljs-comment"># Windows用户，注意替换你的端口号和connect.exe的路径</span><br><span class="hljs-comment"># ProxyCommand &quot;C:\Program Files\Git\mingw64\bin\connect.exe&quot; -S 127.0.0.1:7890 -a none %h %p</span><br><br><span class="hljs-comment"># MacOS/Linux用户用下方这条命令，注意替换你的端口号</span><br><span class="hljs-comment"># ProxyCommand nc -v -x 127.0.0.1:7890 %h %p</span><br><br><span class="hljs-comment"># 下面是多个github账号的配置</span><br>Host github.com<br>  User git<br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br>  <span class="hljs-comment"># 注意修改绝对路径，或者修改username为电脑用户名</span><br>  IdentityFile <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\U</span>sers<span class="hljs-char escape_">\A</span>dministrator<span class="hljs-char escape_">\.</span>ssh<span class="hljs-char escape_">\o</span>ne&quot;</span><br>  TCPKeepAlive yes<br><br>Host two.github.com<br>  User git<br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br>  <span class="hljs-comment"># 注意修改绝对路径，或者修改username为电脑用户名</span><br>  IdentityFile <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\U</span>sers<span class="hljs-char escape_">\A</span>dministrator<span class="hljs-char escape_">\.</span>ssh<span class="hljs-char escape_">\t</span>wo&quot;</span><br>  TCPKeepAlive yes<br></code></pre></td></tr></table></figure><h4 id="2-单独代理（推荐）"><a href="#2-单独代理（推荐）" class="headerlink" title="2. 单独代理（推荐）"></a>2. 单独代理（推荐）</h4><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs nix">Host github.com<br>  User git<br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br>  <span class="hljs-comment"># 注意修改绝对路径，或者修改username为电脑用户名</span><br>  IdentityFile <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\U</span>sers<span class="hljs-char escape_">\A</span>dministrator<span class="hljs-char escape_">\.</span>ssh<span class="hljs-char escape_">\o</span>ne&quot;</span><br>  TCPKeepAlive yes<br>  <span class="hljs-comment"># MacOS/Linux使用👇</span><br>  <span class="hljs-comment"># ProxyCommand nc -v -x 127.0.0.1:7890 %h %p</span><br>  <span class="hljs-comment"># Windows使用👇</span><br>  <span class="hljs-comment"># ProxyCommand &quot;C:\git\current\mingw64\bin\connect.exe&quot; -S 127.0.0.1:7890 -a none %h %p</span><br><br>Host two.github.com<br>  User git<br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br>  <span class="hljs-comment"># 注意修改绝对路径，或者修改username为电脑用户名</span><br>  IdentityFile <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\U</span>sers<span class="hljs-char escape_">\A</span>dministrator<span class="hljs-char escape_">\.</span>ssh<span class="hljs-char escape_">\t</span>wo&quot;</span><br>  TCPKeepAlive yes<br>  <span class="hljs-comment"># MacOS/Linux使用👇</span><br>  <span class="hljs-comment"># ProxyCommand nc -v -x 127.0.0.1:7890 %h %p</span><br>  <span class="hljs-comment"># Windows使用👇</span><br>  <span class="hljs-comment"># ProxyCommand &quot;C:\git\current\mingw64\bin\connect.exe&quot; -S 127.0.0.1:7890 -a none %h %p</span><br></code></pre></td></tr></table></figure><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-comment"># 测试是否成功</span><br><span class="hljs-attribute">ssh</span> -T git<span class="hljs-variable">@github</span>.com<br>ssh -vT git<span class="hljs-variable">@github</span>.com  <span class="hljs-comment"># 加v会显示debug信息</span><br></code></pre></td></tr></table></figure><p>配置http代理用来pull和clone，配置ssh代理用来push</p><h2 id="多个github账号"><a href="#多个github账号" class="headerlink" title="多个github账号"></a>多个github账号</h2><figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs 1c"><span class="hljs-meta"># 进入%HOMEPATH%\.ssh\下生成密钥</span><br>ssh<span class="hljs-punctuation">-</span>keygen <span class="hljs-punctuation">-</span>t rsa <span class="hljs-punctuation">-</span>C &#x27;邮箱&#x27;<br><br><span class="hljs-meta"># pub粘贴进对应的github账号里</span><br><span class="hljs-meta"># vim ~/.ssh/config</span><br><span class="hljs-meta"># notepad %HOMEPATH%\.ssh\config</span><br></code></pre></td></tr></table></figure><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs nix">Host github.com<br>  User git<br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br>  <span class="hljs-comment"># 注意修改绝对路径，或者修改username为电脑用户名，Windows下使用\ ,linux使用/ .</span><br>  IdentityFile <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\U</span>sers<span class="hljs-char escape_">\A</span>dministrator<span class="hljs-char escape_">\.</span>ssh<span class="hljs-char escape_">\o</span>ne&quot;</span><br>  TCPKeepAlive yes<br>  <span class="hljs-comment"># MacOS/Linux使用👇</span><br>  <span class="hljs-comment"># ProxyCommand nc -v -x 127.0.0.1:7890 %h %p</span><br>  <span class="hljs-comment"># Windows使用👇</span><br>  <span class="hljs-comment"># ProxyCommand &quot;C:\git\current\mingw64\bin\connect.exe&quot; -S 127.0.0.1:7890 -a none %h %p</span><br><br>Host two.github.com<br>  User git<br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br>  <span class="hljs-comment"># 注意修改绝对路径，或者修改username为电脑用户名，Windows下使用\ ,linux使用/ .</span><br>  IdentityFile <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\U</span>sers<span class="hljs-char escape_">\A</span>dministrator<span class="hljs-char escape_">\.</span>ssh<span class="hljs-char escape_">\t</span>wo&quot;</span><br>  TCPKeepAlive yes<br>  <span class="hljs-comment"># MacOS/Linux使用👇</span><br>  <span class="hljs-comment"># ProxyCommand nc -v -x 127.0.0.1:7890 %h %p</span><br>  <span class="hljs-comment"># Windows使用👇</span><br>  <span class="hljs-comment"># ProxyCommand &quot;C:\git\current\mingw64\bin\connect.exe&quot; -S 127.0.0.1:7890 -a none %h %p</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># test</span><br>ssh -T git@github.com <span class="hljs-comment"># 对应第一个github账号</span><br>ssh -T git@two.github.com <span class="hljs-comment"># 对应第二个github账号</span><br><span class="hljs-comment"># 出现Hi，xxx则配置成功</span><br><br><span class="hljs-comment"># 原来git clone</span><br>git <span class="hljs-built_in">clone</span> git@github.com:用户名/仓库名.git<br><br><span class="hljs-comment"># 现在git clone</span><br>git <span class="hljs-built_in">clone</span> git@github.com:用户名/仓库名.git  <span class="hljs-comment"># one</span><br>git <span class="hljs-built_in">clone</span> git@two.github.com:用户名/仓库名.git  <span class="hljs-comment"># two</span><br><span class="hljs-comment"># 或者进入.git/修改config成自己的项目名</span><br><br><span class="hljs-comment"># 重建origin ，关联自己账号</span><br>git remote <span class="hljs-built_in">rm</span> origin<br>git remote add origin git@two.github.com:用户名/仓库名.git<br>git push origin master <span class="hljs-comment"># master/main</span><br></code></pre></td></tr></table></figure><h3 id="Bitwarden-ssh-agent对应多个GitHub"><a href="#Bitwarden-ssh-agent对应多个GitHub" class="headerlink" title="Bitwarden ssh agent对应多个GitHub"></a>Bitwarden ssh agent对应多个GitHub</h3><ol><li>Bitwarden创建密钥 -&gt; 导入公钥到<a href="https://github.com/settings/keys">GitHub</a> -&gt; 选择验证方式为Authentication Key</li><li>设置代理，如果你的网络很好就不需要设置<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash">notepad %HOMEPATH%\.ssh\config</span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">vim ~/.ssh/config</span><br></code></pre></td></tr></table></figure>IdentityFile 可以指定私钥或公钥：<br>  指定私钥：免密登录<br>  <strong>指定公钥：优先轮询对应项目</strong><br>  文件权限设置：chmod 600 ~&#x2F;.ssh&#x2F;id_rsa_github（Macos&#x2F;Linux下）<figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs nix">Host github.com<br>  User git<br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br>  <span class="hljs-comment"># 注意修改绝对路径，或者修改username为电脑用户名，</span><br>  IdentityFile <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\U</span>sers<span class="hljs-char escape_">\A</span>dministrator<span class="hljs-char escape_">\.</span>ssh<span class="hljs-char escape_">\p</span>ub&quot;</span><br>  TCPKeepAlive yes<br>  <span class="hljs-comment"># MacOS/Linux使用👇</span><br>  <span class="hljs-comment"># ProxyCommand nc -v -x 127.0.0.1:7890 %h %p</span><br>  <span class="hljs-comment"># Windows使用👇</span><br>  <span class="hljs-comment"># ProxyCommand &quot;C:\git\current\mingw64\bin\connect.exe&quot; -S 127.0.0.1:7890 -a none %h %p</span><br><br>Host github2.com<br>  User git<br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br>  <span class="hljs-comment"># 注意修改绝对路径，或者修改username为电脑用户名</span><br>  IdentityFile <span class="hljs-string">&quot;C:<span class="hljs-char escape_">\U</span>sers<span class="hljs-char escape_">\A</span>dministrator<span class="hljs-char escape_">\.</span>ssh<span class="hljs-char escape_">\p</span>ub2&quot;</span><br>  TCPKeepAlive yes<br>  <span class="hljs-comment"># MacOS/Linux使用👇</span><br>  <span class="hljs-comment"># ProxyCommand nc -v -x 127.0.0.1:7890 %h %p</span><br>  <span class="hljs-comment"># Windows使用👇</span><br>  <span class="hljs-comment"># ProxyCommand &quot;C:\git\current\mingw64\bin\connect.exe&quot; -S 127.0.0.1:7890 -a none %h %p</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 原来git clone</span><br>git <span class="hljs-built_in">clone</span> git@github.com:用户名/仓库名.git<br><span class="hljs-comment"># 现在git clone</span><br>git <span class="hljs-built_in">clone</span> git@github.com:用户名/仓库名.git  <span class="hljs-comment"># one</span><br>git <span class="hljs-built_in">clone</span> git@github2.com:用户名/仓库名.git <span class="hljs-comment"># two</span><br><span class="hljs-comment"># 或者进入.git修改config成自己的项目名</span><br><br><span class="hljs-comment"># 重建origin ，关联自己账号</span><br>git remote <span class="hljs-built_in">rm</span> origin<br>git remote add origin git@github2.com:用户名/仓库名.git<br>git push origin master <span class="hljs-comment"># master/main</span><br></code></pre></td></tr></table></figure></li></ol><p>PS. 以下三种配置都能够ssh连接到GitHub，官方推荐优先顺序是：profile1 &gt; profile2 &gt;&gt; profile3。</p><figure class="highlight crmsh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs crmsh">Host profile1<br>  <span class="hljs-keyword">User</span> <span class="hljs-title">git</span><br>  Port <span class="hljs-number">22</span><br>  HostName github.com<br><br>Host profile2<br>  <span class="hljs-keyword">User</span> <span class="hljs-title">git</span><br>  Port <span class="hljs-number">443</span><br>  HostName ssh.github.com<br><br>Host profile3<br>  <span class="hljs-keyword">User</span> <span class="hljs-title">git</span><br>  Port <span class="hljs-number">22</span><br>  HostName ssh.github.com<br></code></pre></td></tr></table></figure><ol start="3"><li>使用命令行或者直接修改global config，请将下面添加到对应位置<figure class="highlight lua"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs lua">git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global gpg.format ssh</span><br>git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global commit.gpgsign true</span><br>git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global user.signingkey ~/.ssh/id_ed25519.pub</span><br># 或者 git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global user.signingkey ED25519 xxx</span><br>git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global user.email &quot;email&quot;</span><br>git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global user.name &#x27;usename&#x27;</span><br><br># 使用下面检查输出结果是否符合预期<br>git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global gpg.format</span><br>git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global commit.gpgsign</span><br>git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global user.signingkey</span><br>git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global user.email</span><br>git <span class="hljs-built_in">config</span> <span class="hljs-comment">--global user.name</span><br></code></pre></td></tr></table></figure><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-comment"># notepad %HOMEPATH%\.gitconfig</span><br><span class="hljs-comment"># vim ~/.gitconfig</span><br><span class="hljs-section">[user]</span><br>  <span class="hljs-attr">email</span> = &lt;Email&gt;<br>  <span class="hljs-attr">name</span> = &lt;Username&gt;<br>  <span class="hljs-attr">signingkey</span> = &lt;Publickey&gt;<br><span class="hljs-section">[http]</span><br>  <span class="hljs-attr">proxy</span> = http://<span class="hljs-number">127.0</span>.<span class="hljs-number">0.1</span>:<span class="hljs-number">7890</span><br><span class="hljs-section">[https]</span><br>  <span class="hljs-attr">proxy</span> = http://<span class="hljs-number">127.0</span>.<span class="hljs-number">0.1</span>:<span class="hljs-number">7890</span><br><span class="hljs-section">[gpg]</span><br>  <span class="hljs-attr">format</span> = ssh<br><span class="hljs-section">[commit]</span><br>  <span class="hljs-attr">gpgsign</span> = <span class="hljs-literal">true</span><br><span class="hljs-section">[core]</span><br>  <span class="hljs-attr">sshCommand</span> = C:/Windows/System32/OpenSSH/ssh.exe<br><span class="hljs-section">[gpg &quot;ssh&quot;]</span><br>  <span class="hljs-attr">program</span> = C:/Windows/System32/OpenSSH/ssh-keygen.exe<br></code></pre></td></tr></table></figure>首先，在需要添加代理的地方请在对应位置添加代理<br>其次，如果需要用到Bitwarden的ssh agent，必须设置：<code>signingkey = &lt;Publickey&gt;</code><br>最后，要想第一个轮询，IdentityFile要填写对应GitHub的公钥。</li></ol><figure class="highlight autohotkey"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs autohotkey">设置GitHub verified signature：<br><span class="hljs-title">  a. 同时导入公钥到[GitHub](https:</span>//github.com/settings/keys) -&gt; 选择验证方式为 `Signing Key`<br>  b. 邮箱设置要与GitHub一致，如果设置了 `Keep my email addresses private` ，那么邮箱就设置为`@users.noreply.github.com`，否则就设置为自己邮箱<br>  c. 上面的 `.gitconfig` 都要设置完成<br>  d. 使用 `git commit --allow-empty -m <span class="hljs-string">&quot;Test SSH signing&quot;</span>` 测试即可<br></code></pre></td></tr></table></figure><h2 id="hexo"><a href="#hexo" class="headerlink" title="hexo"></a>hexo</h2><p>如果第二个github用来作为hexo，那么修改在hexo目录下的_config.yaml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">deploy:</span><br>  <span class="hljs-attr">type:</span> <span class="hljs-string">&#x27;git&#x27;</span><br>  <span class="hljs-comment">#repository: git@github.com:用户名/仓库名.git</span><br>  <span class="hljs-comment"># 改为</span><br>  <span class="hljs-attr">repository:</span> <span class="hljs-string">git@two.github.com:用户名/仓库名.git</span><br>  <span class="hljs-attr">branch:</span> <span class="hljs-string">main</span><br></code></pre></td></tr></table></figure><p>然后执行 hexo g -d</p><h2 id="常见情况"><a href="#常见情况" class="headerlink" title="常见情况"></a>常见情况</h2><p>a. 使用GitHub actions更新代码，使用<code>GITHUB_TOKEN</code>一直遇到<code> ! [remote rejected] main -&gt; main (refusing to allow a GitHub App to create or update workflow .github/workflows/docker-build.yml without workflows permission)</code>.<br>原因是上游更新了workflows文件，但是加上<code>permissions: write-all</code>也不行.<br><a href="https://github.com/orgs/community/discussions/35410#discussioncomment-7645702">解决方案</a>是使用<a href="https://github.com/settings/personal-access-tokens">PAT</a>提交，别忘记给足够的权限。<br>在仓库：<code>https://github.com/&lt;repository&gt;/settings/secrets/actions</code>里面新建<code>Repository secrets</code>，起名比如<code>WORKFLOW_TOKEN</code>,内容为填PAT获取的token，</p><figure class="highlight dsconfig"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs dsconfig"><span class="hljs-string">git</span> <span class="hljs-string">remote</span> <span class="hljs-built_in">set-url</span> <span class="hljs-string">origin</span> <span class="hljs-string">&quot;https://$&#123;&#123; github.actor &#125;&#125;:$&#123;&#123; secrets.WORKFLOW_TOKEN &#125;&#125;@github.com/$&#123;&#123; github.repository &#125;&#125;&quot;</span><br><span class="hljs-string">git</span> <span class="hljs-string">push</span> <span class="hljs-string">origin</span> <span class="hljs-string">main</span> <span class="hljs-built_in">--force</span><br></code></pre></td></tr></table></figure><p>b. commit时不签名<br><code>git commit -m &quot;&quot; --no-gpg-sign</code></p><p>c. 创建空白分支<br>git checkout –orphan <branch_namw></p><p>d. 清理未提交的残余文件<br>git reset –hard<br>git clean -fd</p><p>e. 创建一个空的 commit<br>git commit –allow-empty -m “Initial commit”</p><p>参考与引用：</p><blockquote><p><a href="https://zhuanlan.zhihu.com/p/481574024">设置代理解决github被墙</a><br><a href="https://blog.csdn.net/weixin_50512542/article/details/125471724">Git的ssh配置</a><br><a href="https://bitwarden.com/help/ssh-agent/">ssh agent</a><br><a href="https://help.ppgg.in/password-manager/developer-tools/ssh-agent">SSH 代理</a><br><a href="https://github.com/orgs/community/discussions/35410#discussioncomment-7645702">https://github.com/orgs/community/discussions/35410#discussioncomment-7645702</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;如何使用Git&quot;&gt;&lt;a href=&quot;#如何使用Git&quot; class=&quot;headerlink&quot; title=&quot;如何使用Git&quot;&gt;&lt;/a&gt;如何使用Git&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;首先安装&lt;a href=&quot;https://git-scm.com/download</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="clash" scheme="https://shyi.org/tags/clash/"/>
    
    <category term="github" scheme="https://shyi.org/tags/github/"/>
    
    <category term="ssh" scheme="https://shyi.org/tags/ssh/"/>
    
    <category term="git" scheme="https://shyi.org/tags/git/"/>
    
    <category term="ssh-agent" scheme="https://shyi.org/tags/ssh-agent/"/>
    
    <category term="ssh-proxy" scheme="https://shyi.org/tags/ssh-proxy/"/>
    
    <category term="Bitwarden" scheme="https://shyi.org/tags/Bitwarden/"/>
    
  </entry>
  
  <entry>
    <title>vps截图</title>
    <link href="https://shyi.org/posts/63270/"/>
    <id>https://shyi.org/posts/63270/</id>
    <published>2022-07-05T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<p>想用vps制作视频九宫格缩略图</p><p>环境：</p><ol><li><p>安装ffmpeg  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt install ffmpeg<br></code></pre></td></tr></table></figure></li><li><p>下载<a href="http://p.outlyer.net/vcs/files/vcs-1.13.4.bash">脚本</a>          官网：<a href="http://p.outlyer.net/vcs">vcs</a>                <a href="https://0122.lanzout.com/i0V7007fn3gf">lanzou</a>密码:0000</p></li></ol><p>注意事项：可能会出现：Required program convert not found!</p><p>解决方案：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 使用一个图形处理软件时出现</span><br><br>./overfeat -n 3 samples/sample.jpg<br><br>sh: 1: convert: not found <br><br>convert是imagemagick软件编译出的工具。<br><span class="hljs-built_in">sudo</span> apt-get install imagemagick<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">ln</span> -s /root/vcs/vcs-1.13.4.bash /usr/local/bin/vcs <span class="hljs-comment">#添加环境变量，后续直接使用vcs就可以了。</span><br>/root/vcs/vcs-1.13.4.bash  -U0 -n 27 -c 3 -H 200  xxx.mp4<br><span class="hljs-comment"># -a 300/200 使用可能会导致图片比例失调</span><br><span class="hljs-comment"># 截取三列总共30张高为169px的缩略图</span><br><span class="hljs-comment"># 这里的/root/vcs/vcs-1.13.4.bash没有加入环境变量，如果加入环境变量后可直接使用vcs </span><br><span class="hljs-comment"># 暂未发现可以指定截图路径</span><br><span class="hljs-comment"># 1920x1080 长为1920，高为1080，如果想要300像素宽（长）的缩略图，那么高为1080/(1920/300)=169px</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">/root/vcs/vcs-1.13.4.bash -n 1 <br><span class="hljs-comment"># 截取单张截图</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">/root/vcs/vcs-1.13.4.bash  -U0 -n 30 -c 3 -H 200 -a 300/200  xxx.mp4 -o xxx.png<br><span class="hljs-comment"># -o 指定截图的名字，不指定就为源文件名</span><br></code></pre></td></tr></table></figure><p>VCS - 视频联系表<br>官方网页：<a href="http://p.outlyer.net/vcs/">http://p.outlyer.net/vcs/</a></p><p>界面和偏好。<br>没有界面。偏好是在命令中设置的（解释如下）</p><p>它是如何工作的。<br>VCS只需要一个命令。注意 你需要使用1.0或更高的版本，否则它不能保存为jpg&#x2F;jpeg（默认的png文件对于<a href="https://xxx.freeimage.us/%EF%BC%8C%E4%B9%9F%E8%AE%B8%E8%BF%98%E6%9C%89%E5%85%B6%E4%BB%96%E6%89%98%E7%AE%A1%E7%BD%91%E7%AB%99%E6%9D%A5%E8%AF%B4%E5%A4%AA%E5%A4%A7%EF%BC%89%E3%80%82">https://xxx.freeimage.us/，也许还有其他托管网站来说太大）。</a></p><p>打开一个终端，切换到文件所在的目录&#x2F;文件夹，然后使用以下代码。</p><p>vcs input-filename -U0 -i 1m -c 3 -H 200 -a 300&#x2F;200 -o save-filename.jpg</p><p>该命令如何工作</p><p>将input-filname编辑成你的视频文件的名称 !</p><p>-U0 (在页脚没有名字 - 否则会显示主机名 - 注意这是零而不是字母O)</p><p>-i 1m (设置捕捉时间间隔，以分钟为单位–在这里是每分钟–你也可以用-n代替，它设置捕捉的数量，例如-n 21将创建21张图像，但不要同时使用！)</p><p>-c 设置列的数量（这里是3列）</p><p>-H 200 -a 300&#x2F;200 (设置大小和长宽，以便文件不会太大–似乎你必须同时做这两件事)</p><p>-o filename.jpg (使用.jpg，因为默认的png太大了 - 并将文件名改为你自己选择的名字！)</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br></pre></td><td class="code"><pre><code class="hljs bash">选项。<br>  -i|--interval &lt; arg&gt; 将间隔时间设置为arg。可以使用的单位有<br>                        (不区分大小写），即：。<br>                            秒。      90或90s<br>                            分钟。      3m<br>                            小时。        1h<br>                            结合起来。     1小时3分90秒<br>                        使用-i或-n。<br>  -n|--numcaps &lt; arg&gt; 将捕获的图像数量设置为arg。可以使用<br>                        -i或-n。<br>  -c|--columns &lt; arg&gt; 以 <span class="hljs-string">&quot;arg &quot;</span>列的形式排列输出。<br>  -H|--height &lt; arg&gt; 设置输出（单个缩略图）的高度。宽度是<br>                        相应得出。注意宽度不能手动设置。<br>  -o|--output &lt;file&gt; 输出的文件名。当省略时，将从<br>                        的输入文件名。可以对多个文件重复操作。<br>  -a|--aspect &lt;aspect&gt; 纵横比。接受一个浮点数字或一个<br>                        分数。<br>  -f|--from &lt; arg&gt; 设置起始时间。在这之前没有上限。格式相同<br>                        作为-i。<br>  -t|--to &lt; arg&gt; 设置结束时间。除此以外没有上限。格式相同<br>                        作为-i。<br>  -T|--title &lt; arg&gt; 在视频截图上方添加一个标题。<br>  -j|--jpeg 以jpeg格式输出（默认输出为png格式）。<br>  -j2|--jpeg2 以jpeg2000格式输出<br>  -V|--dvd DVD模式。<br>                        在这种模式下，输入的&lt;文件&gt;必须是DVD<br>                        器件或ISO。当在DVD模式下，所有的输入文件<br>                        必须是DVD。<br>                        意味着-A（自动长宽比）。<br>  --dvd-title &lt; arg&gt; 要使用的DVD标题。使用0（默认）将使用<br>                        最长的标题。<br>  -M|--mplayer 使用Mplayer来捕捉 [不可用]<br>  -F|--ffmpeg 使用FFmpeg进行采集 [默认，已选择] 。<br>  -E|--end-offset &lt; arg&gt; 这个时间量被忽略，从结束的时候开始。<br>                        视频。<br>                        接受时间戳（与-i的格式相同）和百分比。<br>                        当一个明确的结束时间是，这个值不被使用<br>                        设置。<br>                        默认是5.5%。<br>  -q|--quiet 不打印进度信息，只打印错误信息。重复到<br>                        完全静音，甚至在错误的情况下。<br>  -h|--<span class="hljs-built_in">help</span> 显示基本帮助并退出。<br>  --fullhelp 显示完整的帮助并退出。<br>  -d|--<span class="hljs-built_in">disable</span> &lt; arg&gt; 禁用一些默认功能。<br>                        可以禁用的功能有。<br>                        * 时间戳：使用-dt或-<span class="hljs-built_in">disable</span>时间戳<br>                        * 阴影：使用-ds或-<span class="hljs-built_in">disable</span>阴影<br>                        * 填充：使用-dp或-<span class="hljs-built_in">disable</span> padding。<br>                          (注意阴影引入一些额外的填充物)<br><br>  -e[num] |--extended=[num]<br>                        启用扩展模式，并可选择设置扩展的<br>                        因素。-e与-e4相同。<br>  -l|--highlight &lt; arg&gt; 将在时间戳 <span class="hljs-string">&quot;arg &quot;</span>发现的帧作为<br>                        突出显示。与-i的格式相同。<br>  -m|--manual 手动模式。只有用户指示的时间戳才是<br>                        使用（与-S结合使用），当使用这个<br>                        -i和-n被忽略。<br><br>                        与-i的格式相同。<br><br>  -u|--user &lt; arg&gt; 设置用户名（默认包含在表单的<br>                        footer）到这个值。<br><br>                        设置在系统的用户列表中。<br>  -p|--profile &lt; arg&gt; 加载配置文件 <span class="hljs-string">&quot;arg&quot;</span><br>  -C|--config &lt; arg&gt; 载入配置文件 <span class="hljs-string">&quot;arg&quot;</span><br>  --生成&lt;配置|配置文件&gt;。<br>                        从当前设置生成配置或配置文件<br>  -k &lt; 参数<br>  --funky &lt; arg&gt; 时髦的模式。<br>                        这些是玩具输出模式，其中接触片<br>                        得到一个更非正式的外观。<br>                        顺序*是很重要的*。顺序不好就会有不好的结果:P<br>                        其中许多模式在本质上是随机的，所以使用<br>                        同样的模式操作两次通常会导致不同的结果。<br>                        目前可用的 <span class="hljs-string">&quot;funky modes&quot;</span>。<br>                        <span class="hljs-string">&quot;overlap&quot;</span>。  使用<span class="hljs-string">&quot;-ko &quot;</span>或<span class="hljs-string">&quot;--funky overlap&quot;</span>。<br>                            随机重叠抓取。<br>                        <span class="hljs-string">&quot;旋转&quot;</span>。     使用<span class="hljs-string">&quot;-kr &quot;</span>或<span class="hljs-string">&quot;-funky rotate&quot;</span>。<br>                            随机旋转每个图像。<br>                        <span class="hljs-string">&quot;photoframe&quot;</span>。使用<span class="hljs-string">&quot;-kf &quot;</span>或<span class="hljs-string">&quot;-funky photoframe&quot;</span>。<br>                            在每张图片上添加一个类似照片的白框。<br>                        <span class="hljs-string">&quot;polaroidframe&quot;</span>。使用<span class="hljs-string">&quot;-kL &quot;</span>或<span class="hljs-string">&quot;-funky polaroidframe&quot;</span>。<br>                            在每张照片上添加一个类似宝丽来照片的白框。<br>                            图像。<br>                        <span class="hljs-string">&quot;照片&quot;</span>。使用<span class="hljs-string">&quot;-kc &quot;</span>或<span class="hljs-string">&quot;-funky photos&quot;</span>。<br>                            旋转、相框和重叠的组合。<br>                            与-kp -kr -ko相同。<br>                        <span class="hljs-string">&quot;宝丽来&quot;</span>。使用<span class="hljs-string">&quot;-kp &quot;</span>或<span class="hljs-string">&quot;-funky polaroid&quot;</span>。<br>                            旋转、宝丽来框架和重叠的组合。<br>                            与-kL -kr -ko相同。<br>                        <span class="hljs-string">&quot;电影&quot;</span>。     使用<span class="hljs-string">&#x27;-ki&#x27;</span>或<span class="hljs-string">&#x27;--funky film&#x27;</span>。<br>                            模仿电影胶片的外观。<br>                        <span class="hljs-string">&quot;随机&quot;</span>。   使用<span class="hljs-string">&#x27;-kx&#x27;</span>或<span class="hljs-string">&#x27;-funky random&#x27;</span>。<br>                            随机化颜色和字体。<br>  --anonymous 禁用页脚的 <span class="hljs-string">&quot;预览创建者 &quot;</span>一行。<br>  -Ij|-Ik|-Ij=fontname|-Ik=fontname<br>  --nonlatin  在视频文件的标题中使用一种替代的字体<br>                        名称。要求正确显示文件名在<br>                        一些语言（中文、日文、韩文。<br>                        西里尔语，......）。<br>                        将尽量使用合理的字体。也可以设置<br>                        手动像。<br>                        $ vcs -Ij=Sazanami-Mincho-Regular file.avi<br>                        或<br>                        $ vcs -Ij=/usr/share/fonts/ttf/ttf-japanese-mincho.ttf\<br>                               文件.avi<br>                        使用 <span class="hljs-string">&quot;识别-列表字体 &quot;</span>来列出可用的字体<br>  -O|--override &lt; arg&gt; 覆盖一个变量（详见主页）。<br>                        接受的格式是<span class="hljs-string">&#x27;变量=值&#x27;</span>（可以是<br>                        也可以引用 -variable=<span class="hljs-string">&quot;某个值&quot;</span>，并且可以取一个<br>                        内部变量也是-variable=<span class="hljs-string">&#x27;$SOME_VAR&#x27;</span>-）。<br><br>  调整和变通。<br>  -Ws 增加安全测量的长度（努力尝试）。重复进行<br>                        进一步增加。<br>  -WS扫描所有视频，如果需要的话，以获得安全的测量。<br>  -Wp 提高安全测量的精度（即把安全测量精度减半<br>                        探测步数）。重复进行，进一步增加。<br>  -WP与-Wp的倒数。<br>  -Wo 改变ffmpeg的参数顺序，可能对某些人有用。<br>                        文件，否则就会失败。<br>  -Wc 禁用控制台信息中的颜色。<br>                        注意：如果你在这之前已经加载了任何配置<br>                             生效后，脚本仍可能打印一些<br>                             颜色。你可以通过设置以下内容完全禁用它<br>                             TERM变量为单色术语类型，如：。<br>                             $ <span class="hljs-built_in">env</span> TERM=vt100 vcs [选项]<br>  晦涩难懂的选项、调试工具和变通方法。<br>  -R &lt;文件&gt;<br>  --randomsource &lt;file&gt; 使用提供的文件作为 <span class="hljs-string">&quot;随机 &quot;</span>值的来源。<br>                        他们将不再是随机的，所以两次运行相同的<br>                        源和相同的参数将产生相同的输出<br>                        在使用随机化的模式中（如<br>                        <span class="hljs-string">&quot;照片 &quot;</span>和 <span class="hljs-string">&quot;宝丽来 &quot;</span>模式）。<br>  -D 调试模式。用来测试功能/完整性。它。<br>                          * 打印输入的命令行<br>                          * 设置标题以反映命令行<br>                          * 做一个基本的一致性测试<br>                          * 打印所有被调用的内部函数<br><br>例子。<br>    创建一个带有默认值的联系表（视频截图的时间间隔为10分钟）。<br>    300秒），将被保存到<span class="hljs-string">&#x27;video.avi.png&#x27;</span>。<br>        $ vcs-1.13.4.bash video.avi<br><br>    创建一张间隔为3分半钟的视频截图，保存到<br>    <span class="hljs-string">&#x27;output.jpg&#x27;</span>。<br>        $ vcs-1.13.4.bash -i 3m30 input.wmv -o output.jpg<br><br>    创建一个从3分钟开始到18分钟结束的视频剪辑表。<br>    在2米处    添加一个额外的VIDCAP，在19米处再添加一个。<br>        $ vcs-1.13.4.bash -f 3m -t 18m -S2m -S 19m input.avi<br><br>    更多的例子请见vcs的主页&lt;http://p.outlyer.net/vcs/&gt;。<br><br></code></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;想用vps制作视频九宫格缩略图&lt;/p&gt;
&lt;p&gt;环境：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;安装ffmpeg  &lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="ffmpeg" scheme="https://shyi.org/tags/ffmpeg/"/>
    
    <category term="九宫格缩略图" scheme="https://shyi.org/tags/%E4%B9%9D%E5%AE%AB%E6%A0%BC%E7%BC%A9%E7%95%A5%E5%9B%BE/"/>
    
    <category term="vcs" scheme="https://shyi.org/tags/vcs/"/>
    
  </entry>
  
  <entry>
    <title>搭建图床</title>
    <link href="https://shyi.org/posts/58867/"/>
    <id>https://shyi.org/posts/58867/</id>
    <published>2022-06-12T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.948Z</updated>
    
    <content type="html"><![CDATA[<p>一直想搭建一个图床，毕竟自己的是可控的，备份很方便、数据很安全。由于不知道自己什么时候会更换vps，而且这些图床对web环境要求比较严苛，所以使用了Docker安装的图床。</p><p>docker的优点很多:</p><ol><li><p>不用搭建那麻烦死人的web环境，我使用lnmp和宝塔均搭建失败。</p></li><li><p>换机时只需要打包对应的文件即可，十分钟后又是一条‘好汉’。</p></li></ol><p>安装过程中会遇到的问题：</p><ol><li>使用vim&#x2F;vi粘贴docker-compose.yaml会出现格式错乱</li></ol><blockquote><p>解决方案：Esc + : 输入set paste</p></blockquote><ol start="2"><li>使用nginx反代后在图床里看到是本地IP(172.23.0.1)连接的，而在nginx的访问日志里的IP是CDN的IP ？？</li></ol><blockquote><p>解决方案：</p><ol><li><p>nginx日志参考我前面写的：<br><a href="https://shyi.org/posts/16650/#%E8%8E%B7%E5%8F%96%E8%AE%BF%E5%AE%A2%E7%9C%9F%E5%AE%9EIP">传送门1</a><br><a href="https://shyi.org/posts/43696/">Nginx获取用户真实ip</a> </p></li><li><p>需要挂载functions.php</p></li></ol><p>需要先 <code>docker cp chevereto:/var/www/html/lib/G/functions.php /home/&lt;username&gt;/chevereto/lib/G/functions.php</code></p><p>&#x2F;home&#x2F;<username>&#x2F;chevereto&#x2F;lib&#x2F;G&#x2F;functions.php:&#x2F;var&#x2F;www&#x2F;html&#x2F;lib&#x2F;G&#x2F;functions.php:rw</p><p>在大约852行修改为 <code>return $_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];</code></p><p>如果使用的CDN是CF的话可以改成 <code>HTTP_CF_CONNECTING_IP</code>，但是如果后期不适应CF的话还需要改回原来的代码，建议改成 <code>HTTP_REAL_IP</code> 如果使用的不是CF就会自动把IP设置为 <code>SERVER_ADDR</code> </p><p><img src="https://img.shyi.org/images/a9a13f7eaac6b9feb01c7cc9672b92da.png"></p><p>3. </p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-comment">#nginx.conf/site.conf中的非server中写入一下</span><br><span class="hljs-attribute">map</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span> <span class="hljs-variable">$real</span>&#123;<br>    &quot;&quot;  $remote_addr;<br>    ~^(?P&lt;firstAddr&gt;[0-z\.]+),?.*$ $HTTP_CF_CONNECTING_IP;<br>&#125;<br><br><span class="hljs-comment">#img.xxx.conf中增加</span><br><span class="hljs-attribute">proxy_set_header</span> REAL-IP <span class="hljs-variable">$real</span>;<br><br><span class="hljs-comment">#在functions.php大约852行修改为&#x27;HTTP_REAL_IP&#x27;</span><br><span class="hljs-attribute">nginx</span> -t<br>nginx -s reload<br></code></pre></td></tr></table></figure><p>​我们需要明白 <code>REAL-IP</code> 代表变量，<code>HTTP_REAL_IP</code> 代表变量的值<br>​推荐第三种，如果使用cf那么获得的ip是<code>HTTP_CF_CONNECTING_IP</code>，如果不使用cf而是直连，那么获得的ip是<code>remote_addr</code></p><p>最后</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker-compose down &amp;&amp; docker-compose up -d<br></code></pre></td></tr></table></figure><ol start="4"><li>解决Chevereto图床上传大图片提示Internal Server error</li></ol><p>php.ini</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-attr">max_execution_time</span> = <span class="hljs-number">1000</span><br><span class="hljs-attr">max_input_time</span> = <span class="hljs-number">1000</span><br><span class="hljs-attr">memory_limit</span> = <span class="hljs-number">1024</span>M<br><span class="hljs-attr">upload_max_filesize</span> = <span class="hljs-number">100</span>M<br><span class="hljs-attr">post_max_size</span> = <span class="hljs-number">100</span>M<br></code></pre></td></tr></table></figure><p>nginx.conf</p><figure class="highlight abnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs abnf">client_max_body_size <span class="hljs-number">64</span>M<span class="hljs-comment">;</span><br></code></pre></td></tr></table></figure><figure class="highlight x86asm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs x86asm">nginx -s reload<br>docker-compose <span class="hljs-meta">down</span> &amp;&amp; docker-compose <span class="hljs-meta">up</span> -d<br></code></pre></td></tr></table></figure></blockquote><h2 id="1-chevereto-free"><a href="#1-chevereto-free" class="headerlink" title="1.chevereto-free"></a>1.<a href="https://hub.docker.com/r/nmtan/chevereto">chevereto-free</a></h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mkdir</span> -p /home/&lt;username&gt;/chevereto/app<br>vim /home/&lt;username&gt;/chevereto/app/php.ini<br></code></pre></td></tr></table></figure><p>php.ini</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-attr">max_execution_time</span> = <span class="hljs-number">1000</span><br><span class="hljs-attr">max_input_time</span> = <span class="hljs-number">1000</span><br><span class="hljs-attr">memory_limit</span> = <span class="hljs-number">1024</span>M<br><span class="hljs-attr">upload_max_filesize</span> = <span class="hljs-number">100</span>M<br><span class="hljs-attr">post_max_size</span> = <span class="hljs-number">100</span>M<br></code></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">db:</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">mariadb</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">mariadb_chevereto</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/&lt;username&gt;/chevereto/db_cheve:/var/lib/mysql:rw</span><br>      <span class="hljs-comment"># username改为你想要设置的用户名</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">always</span><br>    <span class="hljs-attr">privileged:</span> <span class="hljs-literal">true</span><br>    <span class="hljs-attr">networks:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">private</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-attr">MYSQL_ROOT_PASSWORD:</span> <span class="hljs-string">passwd</span><br>      <span class="hljs-comment"># 数据库主密码</span><br>      <span class="hljs-attr">MYSQL_DATABASE:</span> <span class="hljs-string">chevereto</span><br>      <span class="hljs-attr">MYSQL_USER:</span> <span class="hljs-string">chevereto</span><br>      <span class="hljs-attr">MYSQL_PASSWORD:</span> <span class="hljs-string">cheve_passwd</span><br>      <span class="hljs-comment"># 修改为你想要的密码</span><br><br>  <span class="hljs-attr">chevereto:</span><br>    <span class="hljs-attr">depends_on:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">db</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">nmtan/chevereto:1.4.1</span><br>    <span class="hljs-comment"># 最新版不支持中文</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">chevereto</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">always</span><br>    <span class="hljs-attr">networks:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">private</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-attr">CHEVERETO_DB_HOST:</span> <span class="hljs-string">db</span><br>      <span class="hljs-attr">CHEVERETO_DB_USERNAME:</span> <span class="hljs-string">chevereto</span><br>      <span class="hljs-attr">CHEVERETO_DB_PASSWORD:</span> <span class="hljs-string">cheve_passwd</span><br>      <span class="hljs-comment"># 密码与上述一致</span><br>      <span class="hljs-attr">CHEVERETO_DB_NAME:</span> <span class="hljs-string">chevereto</span><br>      <span class="hljs-attr">CHEVERETO_DB_PREFIX:</span> <span class="hljs-string">chv_</span><br>    <span class="hljs-attr">volumes:</span><br>     <span class="hljs-comment">#username改为你想要设置的用户名</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/&lt;username&gt;/chevereto/images:/var/www/html/images:rw</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/&lt;username&gt;/chevereto/app/php.ini:/usr/local/etc/php/php.ini:ro</span><br>      <span class="hljs-comment">#这两个是相册的设置</span><br>      <span class="hljs-comment">#- /home/&lt;username&gt;/chevereto/content:/var/www/html/content:rw</span><br>      <span class="hljs-comment">#- /home/&lt;username&gt;/chevereto/app/routes:/var/www/html/app/routes:rw</span><br>      <span class="hljs-comment">#这个是get_real_ip</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/&lt;username&gt;/chevereto/lib/G/functions.php:/var/www/html/lib/G/functions.php:rw</span><br>      <br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span><span class="hljs-string">:4578:80</span><br>      <span class="hljs-comment"># 修改为想要的端口</span><br>      <span class="hljs-comment"># 设置为127.0.0.1，那么我们只需要通过nginx反向代理访问，直接使用ip访问不了</span><br><br><span class="hljs-attr">networks:</span><br>  <span class="hljs-attr">private:</span><br>  <br><br></code></pre></td></tr></table></figure><blockquote><p>之前比较担心数据库的端口3306会与之前创建的数据库相冲突，查询后发现db和cheverteo在一个名为compose_private的本地网络中，其中mariadb的端口3306并没有外显出来，只是在private这个网络段里可以使用。</p></blockquote><p><del>所以我们可以只需要关闭4578端口就行了。</del><br>只需要改成 <code>127.0.0.1:4578:80</code> 就行了。</p><p>我们也可以在nginx_conf中设置如果 <code>$host</code> 为IP格式就返回403。</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">if</span> (<span class="hljs-variable">$host</span> <span class="hljs-regexp">~ &quot;[0-9]</span>&#123;1,3&#125;\.[0-9]&#123;1,3&#125;\.[0-9]&#123;1,3&#125;\.[0-9]&#123;1,3&#125;&quot;) <br>&#123;<br>    <span class="hljs-attribute">return</span> <span class="hljs-number">403</span>;<br>&#125;<br></code></pre></td></tr></table></figure><p>这样使用api上传图片，用户就变成了游客，看着很不舒服</p><p><code>content</code>文件夹主要与系统和用户设置有关；而<code>app/routes</code>则与相册的设置有关，我们需要把这两个文件夹从容器中映射出来。</p><p>首先进入容器中，打包这两个文件夹，然后移动到之前已经映射的images文件夹内，然后回到shell，将这两个文件夹解压并映射。</p><p><strong>直接使用 <code>docker cp</code> 命令复制即可，无需下面复杂的操作</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it chevereto /bin/bash<br>tar czvf content.tar.gz ./content<br>tar czvf routes.tar.gz ./app/routes/<br><span class="hljs-built_in">mv</span> content.tar.gz routes.tar.gz ./images<br>CRTL + A + D<br><span class="hljs-built_in">cd</span> /home/&lt;username&gt;/chevereto/images<br><span class="hljs-built_in">mv</span> content.tar.gz routes.tar.gz ..<br>tar xzvf content.tar.gz<br>tar xzvf routes.tar.gz<br><span class="hljs-built_in">rm</span> content.tar.gz routes.tar.gz<br><span class="hljs-comment"># 然后取消最后两行注释，打开docker-compose.yaml的路径</span><br>docker-compose up -d<br></code></pre></td></tr></table></figure><p>然后修改route文件夹下route.api.php</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /home/&lt;username&gt;/chevereto/app/routes/route.api.php<br><span class="hljs-comment"># 使用命令set nu</span><br><span class="hljs-comment"># 在大约105行，注释这一行 # $uploaded_id = CHV\Image::uploadToWebsite($source);</span><br><span class="hljs-comment"># 然后粘贴后修改为你的用户名和相册ID</span><br><span class="hljs-variable">$uploaded_id</span> = CHV\Image::uploadToWebsite(<span class="hljs-variable">$source</span>, <span class="hljs-string">&#x27;test&#x27;</span>, array(<span class="hljs-string">&#x27;album_id&#x27;</span>=&gt;5));<br></code></pre></td></tr></table></figure><p>test为你的用户名，在右上角</p><p>album_id为你的相册ID，建议新建一个相册，然后点击详细信息。</p><img src="https://img.shyi.org/images/image-20220613152507663.png"  style="zoom:67%;" /><img src="https://img.shyi.org/images/image-20220613152551943.png" style="zoom:80%;" /><p>nginx配置文件：</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-comment">#listen 443 ssl;</span><br>    <span class="hljs-attribute">server_name</span> img.demo.com;<br>    <span class="hljs-comment">#ssl_certificate       crt/pem;</span><br>    <span class="hljs-comment">#ssl_certificate_key    key;</span><br>    <br>    <span class="hljs-comment"># 禁止爬虫,if语句必须放在server或者location范围内，不能放在http范围内。</span><br>    <span class="hljs-attribute">if</span> (<span class="hljs-variable">$http_user_agent</span> <span class="hljs-regexp">~* &quot;qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!</span> Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot<span class="hljs-string">&quot; ) &#123;</span><br><span class="hljs-string">return 403;</span><br><span class="hljs-string">    &#125;</span><br><span class="hljs-string">    # 上传大图片开启</span><br><span class="hljs-string">    client_max_body_size 64M;</span><br><span class="hljs-string">    </span><br><span class="hljs-string">    # 禁止IP访问</span><br><span class="hljs-string">    if (<span class="hljs-variable">$host</span> ~ &quot;</span>[<span class="hljs-number">0</span>-<span class="hljs-number">9</span>]&#123;1,3&#125;\.[0-9]&#123;1,3&#125;\.[0-9]&#123;1,3&#125;\.[0-9]&#123;1,3&#125;&quot;) <br>&#123;<br><span class="hljs-attribute">return</span> <span class="hljs-number">403</span>;<br>&#125;<br>    <br>    <span class="hljs-comment"># 对一些静态资源设置缓存时间，务必放到 location / 的上面</span><br>    <span class="hljs-section">location</span> <span class="hljs-regexp">~ .*\.(gif|jpg|jpeg|png|bmp|swf|webp)$</span> <br>&#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:4578;<br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> REMOTE-HOST <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-comment">#proxy_set_header REAL-IP $real;</span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-comment"># 过期时间为10天，图片文件不怎么更新，过期可以设大一点，如果频繁更新，则可以设置得小一点。</span><br>        <span class="hljs-attribute">add_header</span> Cache-Control max-age=<span class="hljs-number">864000</span>;<br>&#125;<br>    <br><span class="hljs-section">location</span> /<br>    &#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:4578;<br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> REMOTE-HOST <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-comment">#proxy_set_header REAL-IP $real;</span><br>        <span class="hljs-comment"># 此方法可能不适合域名反代</span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-comment"># no-cache在发布缓存副本之前，强制要求缓存把请求提交给原始服务器进行验证 (协商缓存验证)。</span><br>        <span class="hljs-comment"># 指定 no-cache 或 max-age=0, must-revalidate 表示客户端可以缓存资源，每次使用缓存资源前都必须重新验证其有效性。这意味着每次都会发起 HTTP 请求，但当缓存内容仍有效时可以跳过 HTTP 响应体的下载。</span><br>        <span class="hljs-attribute">add_header</span> Cache-Control <span class="hljs-literal">no</span>-cache;<br>    &#125;<br>        <br>    <span class="hljs-attribute">access_log</span>  /www/wwwlogs/img.demo.com.log;  <span class="hljs-comment">#日志可以不写</span><br>    <span class="hljs-attribute">error_log</span>   /www/wwwlogs/img.demo.com.<span class="hljs-literal">error</span>.log;<br>&#125;<br></code></pre></td></tr></table></figure><blockquote><p>解释一下nginx的配置信息</p><p>server_name：表示对应的域名，如果有多个可以中间以空格隔开</p><p>每个if语句的if后面要有一个空格，例：<code>if ($</code> 。不要轻易使用if。</p><p>第一个location的作用：如果匹配到以 <code>(gif|jpg|jpeg|png|bmp|swf|webp)</code> 结尾的就不会继续向下匹配，在这个location中我们可以增加一个响应头告诉CDN或者浏览器对这个资源的缓存时间。</p><p>第二个location的作用：起到一个收底的作用，因为图床中不止有图片静态资源，所以这个里面加了一个响应头 <code>no-cache</code> ，可以缓存资源但是要验证资源的有效性。</p><p>如果这两个location更换位置，那么<code>location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|webp)$</code>，则不会起作用，因为 <code>location /</code> 能匹配一切。</p><p>将 <code>add_header Cache-Control max-age=864000;</code> 写在 <code>location /</code> 里面虽然不会出现问题，但是感觉很奇怪。</p></blockquote><h2 id="2-EasyImages"><a href="#2-EasyImages" class="headerlink" title="2.EasyImages"></a>2.<a href="https://hub.docker.com/r/ddsderek/easyimage">EasyImages</a></h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">easyimage:</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;ddsderek/easyimage:latest&#x27;</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">&#x27;easyimage&#x27;</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">&#x27;unless-stopped&#x27;</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;127.0.0.1:4579:80&#x27;</span><br>    <span class="hljs-comment"># 修改为想要的端口</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;TZ=Asia/Shanghai&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;PUID=1000&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;PGID=1000&#x27;</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/&lt;username&gt;/easyimage/config:/app/web/config</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/&lt;username&gt;/easyimage/i:/app/web/i</span><br>     <span class="hljs-comment"># - /home/&lt;username&gt;/easyimage/admin/admin.inc.php:/app/web/admin/admin.inc.php</span><br><br></code></pre></td></tr></table></figure><p>需要先将<code> admin.inc.php</code> 复制到 <code>/home/&lt;username&gt;/easyimage/admin/</code> 再取消注释的最后一行，目的是修改图床里面显示的IP地址。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">cp</span> easyimage:/app/web/admin/admin.inc.php /home/&lt;username&gt;/easyimage/admin/admin.inc.php<br><span class="hljs-comment"># 替换username为你的路径</span><br></code></pre></td></tr></table></figure><blockquote><p>  如果在 nginx.conf 里设置 map ，那么就修改 admin&#x2F;admin.inc.php 的大约第937行 <code>$_SERVER[&quot;SERVER_ADDR&quot;]</code> 改为 <code>$_SERVER[&quot;HTTP_REAL_IP&quot;]</code> ，如果没有添加 map 就改为 <code>$_SERVER[&quot;HTTP_CF_CONNECTING_IP&quot;]</code> 。</p></blockquote><p>为了安全建议设置成这样，然后将默认全部api禁用</p><img src="https://img.shyi.org/images/image-20220613213040301.png" style="zoom:67%;" /><p><img src="https://img.shyi.org/images/image-20220613213431749.png"></p><p>nginx配置文件：</p><p><strong>这个内容请参考上面那个，它们具有很大的相似性。</strong></p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">server_name</span> image.demo.com;<br>    <span class="hljs-comment"># 改为你想设置的域名</span><br>    <br>    <span class="hljs-section">location</span> /<br>    &#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:4579;<br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> remote_addr <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> REMOTE-HOST <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-comment"># 此方法可能不适合域名反代</span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-attribute">add_header</span> Cache-Control <span class="hljs-literal">no</span>-cache;<br>    &#125;<br>    <br>    <span class="hljs-comment">#禁止爬虫,if语句必须放在server或者location范围内，不能放在http范围内。</span><br>    <span class="hljs-attribute">if</span> (<span class="hljs-variable">$http_user_agent</span> <span class="hljs-regexp">~* &quot;qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!</span> Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot<span class="hljs-string">&quot; ) &#123;</span><br><span class="hljs-string">       return 403;</span><br><span class="hljs-string">    &#125;</span><br><span class="hljs-string">    </span><br><span class="hljs-string">    access_log  /www/wwwlogs/image.demo.com.log;  #日志可以不写</span><br><span class="hljs-string">    error_log   /www/wwwlogs/image.demo.com.error.log;</span><br><span class="hljs-string">&#125;</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">chmod</span> -R 755 /home/usermame/easyimage/i<br><span class="hljs-built_in">chown</span> -R www:www /home/usermame/easyimage<br></code></pre></td></tr></table></figure><h2 id="3-使用API上传图片"><a href="#3-使用API上传图片" class="headerlink" title="3.使用API上传图片"></a>3.使用API上传图片</h2><p>PicGo有app和cli两种方式，我觉得还是chevereto使用cli比较好用，设置简单。</p><ol><li><h3 id="app"><a href="#app" class="headerlink" title="app"></a><a href="https://github.com/Molunerfinn/PicGo/releases/">app</a></h3></li></ol><p>最简单</p><p>可能需要<a href="https://nodejs.org/zh-cn/">node.js</a>环境</p><p>Typora有两种上传图片的方式：</p><ol><li>每粘贴或复制一张图片点击一次上传。</li><li>在编辑完整个文档之后，点击<code>格式-&gt;图像-&gt;上传所有本地图片</code>来一次性的将整个文档的图片都上传。</li></ol><h4 id="a-对于chevereto"><a href="#a-对于chevereto" class="headerlink" title="a. 对于chevereto"></a>a. 对于chevereto</h4><p>插件设置里面搜索chevereto</p><blockquote><p>url: http:&#x2F;&#x2F;域名&#x2F;api&#x2F;1&#x2F;upload</p></blockquote><blockquote><p>key: http:&#x2F;&#x2F;域名&#x2F;dashboard&#x2F;settings&#x2F;api</p></blockquote><p><img src="https://img.shyi.org/images/image-20220613152339969.png"></p><p><img src="https://img.shyi.org/images/image-20220613152318049.png"></p><h4 id="b-对于EasyImages"><a href="#b-对于EasyImages" class="headerlink" title="b. 对于EasyImages"></a>b. 对于EasyImages</h4><p>插件设置里面搜索web-uploader，可能需要<a href="https://nodejs.org/zh-cn/">node.js</a>环境</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs json">API地址<span class="hljs-punctuation">:</span> https<span class="hljs-punctuation">:</span><span class="hljs-comment">//域名/api/index.php // 输入你的网站api地址 </span><br>POST参数名<span class="hljs-punctuation">:</span> image <br>JSON路径<span class="hljs-punctuation">:</span> url <br>自定义Body<span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><span class="hljs-attr">&quot;token&quot;</span><span class="hljs-punctuation">:</span><span class="hljs-string">&quot;1c17b11693cb5ec63859b091c5b9c1b2&quot;</span><span class="hljs-punctuation">&#125;</span> <span class="hljs-comment">// 这里输入你网站生成的token</span><br></code></pre></td></tr></table></figure><p>token建议删除所有默认的，然后新建一个，https:&#x2F;&#x2F;域名&#x2F;admin&#x2F;admin.inc.php，</p><p><img src="https://img.shyi.org/images/pjdgto-0.png"></p><ol start="2"><li><h3 id="cli"><a href="#cli" class="headerlink" title="cli:"></a>cli:</h3></li></ol><p>先安装<a href="https://nodejs.org/zh-cn/">node.js</a>环境</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">npm install picgo -g<br>picgo install chevereto<br></code></pre></td></tr></table></figure><p>CMD打开</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs CMD">notepad <span class="hljs-variable">%HOMEPATH%</span>\.picgo\config.json<br>#或者<br>notepad <span class="hljs-variable">%UserProfile%</span>\.picgo\config.json<br></code></pre></td></tr></table></figure><h4 id="a-对于chevereto-1"><a href="#a-对于chevereto-1" class="headerlink" title="a. 对于chevereto"></a>a. 对于chevereto</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs json"><span class="hljs-punctuation">&#123;</span><br>  <span class="hljs-attr">&quot;picBed&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><br>    <span class="hljs-attr">&quot;current&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;chevereto&quot;</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-attr">&quot;uploader&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;chevereto&quot;</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-attr">&quot;chevereto&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><br>      <span class="hljs-attr">&quot;key&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;上面从api里面获得的密钥&quot;</span><span class="hljs-punctuation">,</span><br>      <span class="hljs-attr">&quot;source_param&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;source&quot;</span><span class="hljs-punctuation">,</span><br>      <span class="hljs-attr">&quot;url&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;https://域名/api/1/upload&quot;</span><span class="hljs-punctuation">,</span><br>      <span class="hljs-attr">&quot;url_param&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><br>    <span class="hljs-punctuation">&#125;</span><br>  <span class="hljs-punctuation">&#125;</span><span class="hljs-punctuation">,</span><br>  <span class="hljs-attr">&quot;picgoPlugins&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><br>    <span class="hljs-attr">&quot;picgo-plugin-chevereto&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><br>  <span class="hljs-punctuation">&#125;</span><br><span class="hljs-punctuation">&#125;</span><br></code></pre></td></tr></table></figure><p><img src="https://img.shyi.org/images/image-20220613203320460.png"></p><p><img src="https://img.shyi.org/images/image-20220613203337235.png"></p><h4 id="b-对于EasyImage"><a href="#b-对于EasyImage" class="headerlink" title="b. 对于EasyImage"></a>b. 对于EasyImage</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">picgo install web-uploader<br>picgo <span class="hljs-built_in">set</span> uploader <span class="hljs-comment"># 选择web-uploader</span><br></code></pre></td></tr></table></figure><p>CMD打开</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs CMD">notepad <span class="hljs-variable">%HOMEPATH%</span>\.picgo\config.json<br></code></pre></td></tr></table></figure><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs json"><span class="hljs-punctuation">&#123;</span><br>  <span class="hljs-attr">&quot;picBed&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><br>    <span class="hljs-attr">&quot;uploader&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;web-uploader&quot;</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-attr">&quot;current&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;web-uploader&quot;</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-attr">&quot;web-uploader&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><br>      <span class="hljs-attr">&quot;url&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;https://域名/api/index.php&quot;</span><span class="hljs-punctuation">,</span><br>      <span class="hljs-attr">&quot;paramName&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;image&quot;</span><span class="hljs-punctuation">,</span><br>      <span class="hljs-attr">&quot;jsonPath&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;url&quot;</span><span class="hljs-punctuation">,</span><br>      <span class="hljs-attr">&quot;customHeader&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;&quot;</span><span class="hljs-punctuation">,</span><br>      <span class="hljs-attr">&quot;customBody&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;&#123;\&quot;token\&quot;:\&quot;1c17b11693cb5ec63859b091c5b9c1b2\&quot;&#125;&quot;</span><br>    <span class="hljs-punctuation">&#125;</span><br>  <span class="hljs-punctuation">&#125;</span><span class="hljs-punctuation">,</span><br>  <span class="hljs-attr">&quot;picgoPlugins&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">&#123;</span><br>    <span class="hljs-attr">&quot;picgo-plugin-web-uploader&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><br>  <span class="hljs-punctuation">&#125;</span><br><span class="hljs-punctuation">&#125;</span><br></code></pre></td></tr></table></figure><p><img src="https://img.shyi.org/images/z79xgf-0.png"></p><ol start="3"><li>python</li></ol><p><a href="https://www.clzly.xyz/2021/Blog/4738e413/#%E6%96%B9%E6%B3%95%E4%B8%89typora%E4%BD%BF%E7%94%A8python%E8%84%9A%E6%9C%AC">Docker系列五自建图床 | 君匡博客 (clzly.xyz)</a></p><p>这个博主写的python方案看着不错，可以试一试。</p><p>引用与参考：</p><p><a href="https://hub.docker.com/r/nmtan/chevereto">nmtan&#x2F;chevereto - Docker Image | Docker Hub</a></p><p><a href="https://registry.hub.docker.com/r/ddsderek/easyimage">ddsderek&#x2F;easyimage - Docker Image | Docker Hub</a></p><p><a href="https://github.com/keven1024/chevereto-free-multi-language">keven1024&#x2F;chevereto-free-multi-language: multi-language chevereto ( 支持多国语言的chevereto-free ) (github.com)</a></p><p><a href="https://github.com/rodber/chevereto-free">rodber&#x2F;chevereto-free: Self-hosted Image Hosting solution. Start your own Flickr&#x2F;imgur alternative with your own rules. (github.com)</a></p><p><a href="https://www.clzly.xyz/2021/Blog/4738e413/">Docker系列五自建图床 | 君匡博客 (clzly.xyz)</a></p><p><a href="https://github.com/icret/EasyImages2.0">icret&#x2F;EasyImages2.0: 新版简单强大无数据库的图床2.0版 演示地址： (github.com)</a></p><p><a href="https://www.kancloud.cn/easyimage/easyimage/2625222">简介 · 简单图床-EasyImage2.0 使用手册 · 看云 (kancloud.cn)</a></p><p><a href="https://blog.csdn.net/qq_19564393/article/details/108506062">修改Chevereto的API上传相册和用户_飞逝17的博客-CSDN博客</a></p><p><a href="https://github.com/keven1024/chevereto-free-multi-language/issues/3">get_real_ip-github</a></p><p><a href="https://blog.csdn.net/lzwjavaphp/article/details/83947058">php中$_SERVER参数HTTP_X_FORWARDED_FOR &amp; REMOTE_ADDR与获取IP</a></p><p><a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control">Cache-Control MDN</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;一直想搭建一个图床，毕竟自己的是可控的，备份很方便、数据很安全。由于不知道自己什么时候会更换vps，而且这些图床对web环境要求比较严苛，所以使用了Docker安装的图床。&lt;/p&gt;
&lt;p&gt;docker的优点很多:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;不用搭建那麻烦死人的web环</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Nginx" scheme="https://shyi.org/tags/Nginx/"/>
    
    <category term="Docker" scheme="https://shyi.org/tags/Docker/"/>
    
    <category term="chevereto" scheme="https://shyi.org/tags/chevereto/"/>
    
    <category term="easyimage" scheme="https://shyi.org/tags/easyimage/"/>
    
    <category term="Picgo" scheme="https://shyi.org/tags/Picgo/"/>
    
    <category term="picgo-cli" scheme="https://shyi.org/tags/picgo-cli/"/>
    
  </entry>
  
  <entry>
    <title>test</title>
    <link href="https://shyi.org/posts/63534/"/>
    <id>https://shyi.org/posts/63534/</id>
    <published>2022-06-09T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<p>test</p><p><img src="https://img.shyi.org/images/98d3feb33845a491fe0a160c82c2f6a7.jpg" alt="98d3feb33845a491fe0a160c82c2f6a7.jpg"></p><p><a href="https://img.shyi.org/image/q2F"><img src="https://img.shyi.org/images/98d3feb33845a491fe0a160c82c2f6a7.md.jpg" alt="98d3feb33845a491fe0a160c82c2f6a7.md.jpg"></a></p><p><a href="https://img.shyi.org/image/q2F"><img src="https://img.shyi.org/images/98d3feb33845a491fe0a160c82c2f6a7.th.jpg" alt="98d3feb33845a491fe0a160c82c2f6a7.th.jpg"></a></p><p><img src="https://img.shyi.org/images/3aa91af2bdacafe32062c5ed7bb0f53f.png" alt="3aa91af2bdacafe32062c5ed7bb0f53f.png"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;test&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img.shyi.org/images/98d3feb33845a491fe0a160c82c2f6a7.jpg&quot; alt=&quot;98d3feb33845a491fe0a160c82c2f6a7.jpg&quot;&gt;&lt;/p&gt;
&lt;</summary>
      
    
    
    
    <category term="杂项" scheme="https://shyi.org/categories/%E6%9D%82%E9%A1%B9/"/>
    
    
  </entry>
  
  <entry>
    <title>Debian的初步设置</title>
    <link href="https://shyi.org/posts/33185/"/>
    <id>https://shyi.org/posts/33185/</id>
    <published>2022-06-06T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<p>一般新买服务器我会把它装成Debian，然后对它进行一些“调教”。</p><h2 id="首先更新"><a href="#首先更新" class="headerlink" title="首先更新"></a>首先更新</h2><p>如果是国内服务器，请先修改为<a href="https://shyi.org/posts/11367/">国内源</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt update -y<br>apt upgrade -y<br></code></pre></td></tr></table></figure><h2 id="显示发行版本信息"><a href="#显示发行版本信息" class="headerlink" title="显示发行版本信息"></a>显示发行版本信息</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">lsb_release -a<br></code></pre></td></tr></table></figure><h2 id="修改root密码"><a href="#修改root密码" class="headerlink" title="修改root密码"></a>修改root密码</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">passwd root<br></code></pre></td></tr></table></figure><h3 id="如果是Ubuntu，还需要设置允许使用root账户登录"><a href="#如果是Ubuntu，还需要设置允许使用root账户登录" class="headerlink" title="如果是Ubuntu，还需要设置允许使用root账户登录"></a>如果是Ubuntu，还需要设置允许使用root账户登录</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> passwd root<br><span class="hljs-built_in">sudo</span> vi /etc/ssh/sshd_config<br><span class="hljs-comment">#PermitRootLogin 这项 将其改为 yes</span><br>systemctl restart ssh<br></code></pre></td></tr></table></figure><h2 id="修改hostname"><a href="#修改hostname" class="headerlink" title="修改hostname"></a>修改hostname</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/hostname<br>vim /etc/hosts <span class="hljs-comment"># localhost后面跟上修改后的名字</span><br></code></pre></td></tr></table></figure><h2 id="修改时区"><a href="#修改时区" class="headerlink" title="修改时区"></a>修改时区</h2><p>一般这个命令就能解决</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">timedatectl set-timezone <span class="hljs-string">&quot;Asia/Shanghai&quot;</span><br></code></pre></td></tr></table></figure><p>如果还不行就修改ntp服务器</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># systemd 自带的 timedatectl 只能控制系统自带的 systemd-timesyncd，使用 timedatectl set-ntp true 会停止 ntpd 服务。</span><br>timedatectl set-ntp <span class="hljs-literal">false</span><br><span class="hljs-comment"># 安装 ntpd 服务</span><br>apt-get install ntp<br><br>vim /etc/ntp.conf<br><br>server ntp1.aliyun.com<br>server ntp2.aliyun.com<br><br><span class="hljs-comment"># 重启生效</span><br>systemctl restart ntpd<br></code></pre></td></tr></table></figure><h2 id="中文显示"><a href="#中文显示" class="headerlink" title="中文显示"></a>中文显示</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt-get install locales<br>dpkg-reconfigure locales<br><span class="hljs-comment"># 空格键为选取/取消，Tab键为切换到确认选择</span><br><span class="hljs-comment"># 通过方向键与空格键选择&quot;en_US.UTF-8&quot;，其余全部取消</span><br>locale<br></code></pre></td></tr></table></figure><h2 id="测试vps的性能以及网速"><a href="#测试vps的性能以及网速" class="headerlink" title="测试vps的性能以及网速"></a>测试vps的性能以及网速</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run --name speedtest -d -p 8888:80 adolfintel/speedtest<br><span class="hljs-comment"># 测完速 docker stop speedtest &amp;&amp; docker rm speedtest</span><br>wget -qO- yabs.sh | bash<br>wget -qO- bench.sh | bash<br>curl -fsL https://ilemonra.in/LemonBenchIntl | bash -s fast<br></code></pre></td></tr></table></figure><h2 id="Docker安装及卸载"><a href="#Docker安装及卸载" class="headerlink" title="Docker安装及卸载"></a>Docker安装及卸载</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt install docker.io<br>curl -sSL https://get.docker.com/ | sh <span class="hljs-comment"># 国外</span><br>curl -sSL https://get.daocloud.io/docker | sh <span class="hljs-comment"># 国内</span><br><span class="hljs-comment"># 卸载</span><br><span class="hljs-built_in">sudo</span> apt-get remove docker docker-engine<br><span class="hljs-built_in">rm</span> -fr /var/lib/docker/ <br></code></pre></td></tr></table></figure><h3 id="Docker-compose安装"><a href="#Docker-compose安装" class="headerlink" title="Docker-compose安装"></a>Docker-compose安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt install docker-compose<br></code></pre></td></tr></table></figure><h2 id="安装Nginx或者lnmp"><a href="#安装Nginx或者lnmp" class="headerlink" title="安装Nginx或者lnmp"></a>安装Nginx或者lnmp</h2><p>一般我们只需要使用反代以及一些静态网页时，就可以只安装nginx，如果有搭建博客的需求还是要安装lnmp</p><h3 id="安装nginx"><a href="#安装nginx" class="headerlink" title="安装nginx"></a>安装nginx</h3><p>参考之前的<a href="https://shyi.org/posts/16650/#%E5%AE%89%E8%A3%85nginx">教程</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt install nginx -y<br></code></pre></td></tr></table></figure><h3 id="安装lnmp"><a href="#安装lnmp" class="headerlink" title="安装lnmp"></a>安装lnmp</h3><p>请参考<a href="https://lnmp.org/install.html">官网</a></p><p>实测1c1g安装用了近1小时。</p><p>如果是lnmp安装的nginx，可以使用</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">lnmp nginx &#123;start|stop|restart|reload|status|configtest|force-quit|<span class="hljs-built_in">kill</span>&#125;<br></code></pre></td></tr></table></figure><p>也可以使用一般的nginx -s reload等<a href="https://shyi.org/posts/16650/">命令</a></p><h3 id="nginx的conf的文件路径"><a href="#nginx的conf的文件路径" class="headerlink" title="nginx的conf的文件路径"></a>nginx的conf的文件路径</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash">/etc/nginx/ <span class="hljs-comment">#apt安装的</span><br>/usr/local/nginx/conf/ <span class="hljs-comment">#lnmp安装的</span><br>/usr/local/nginx/sbin/nginx <span class="hljs-comment">#可执行文件路径</span><br><span class="hljs-comment"># 不用创建也可以用</span><br><span class="hljs-built_in">ln</span> -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx<br><span class="hljs-comment"># 宝塔中的nginx在/www/server/nginx/sbin/nginx</span><br><span class="hljs-comment"># 我们可以</span><br>PATH=<span class="hljs-variable">$PATH</span>:/usr/local/bin<br><span class="hljs-built_in">ln</span> -s /www/server/nginx/sbin/nginx /usr/local/bin/nginx<br></code></pre></td></tr></table></figure><p>为了防止别人的域名解析到自己的服务器上</p><p>http:</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span> &#123;<br><span class="hljs-attribute">listen</span> <span class="hljs-number">80</span> default_server;<br><span class="hljs-attribute">server_name</span> _;<br><span class="hljs-attribute">return</span> <span class="hljs-number">500</span>;<br>&#125;<br></code></pre></td></tr></table></figure><p>https:</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span> &#123;<br><span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> default_server;<br><span class="hljs-attribute">server_name</span> _;<br><span class="hljs-attribute">ssl</span> <span class="hljs-literal">on</span>;<br><span class="hljs-attribute">ssl_certificate</span> 随便设置一个ssl证书;<br><span class="hljs-attribute">ssl_certificate_key</span> 随便设置一个ssl证书的key;<br><span class="hljs-attribute">return</span> <span class="hljs-number">500</span>;<br>&#125;<br></code></pre></td></tr></table></figure><details>  <summary>lnmp相关配置路径</summary><p><strong>LNMP相关软件安装目录</strong><br>Nginx 目录: &#x2F;usr&#x2F;local&#x2F;nginx&#x2F;<br>MySQL 目录 : &#x2F;usr&#x2F;local&#x2F;mysql&#x2F;<br>MySQL数据库所在目录：&#x2F;usr&#x2F;local&#x2F;mysql&#x2F;var&#x2F;<br>MariaDB 目录 : &#x2F;usr&#x2F;local&#x2F;mariadb&#x2F;<br>MariaDB数据库所在目录：&#x2F;usr&#x2F;local&#x2F;mariadb&#x2F;var&#x2F;<br>PHP目录 : &#x2F;usr&#x2F;local&#x2F;php&#x2F;<br>多PHP版本目录 : &#x2F;usr&#x2F;local&#x2F;php5.5&#x2F; 其他版本前面5.5的版本号换成其他即可<br>PHPMyAdmin目录 : 0.9版本为&#x2F;home&#x2F;wwwroot&#x2F;phpmyadmin&#x2F; 1.0及以后版本为 &#x2F;home&#x2F;wwwroot&#x2F;default&#x2F;phpmyadmin&#x2F; 强烈建议将此目录重命名为其不容易猜到的名字。phpmyadmin可自己从官网下载新版替换。<br>默认网站目录 : 0.9版本为 &#x2F;home&#x2F;wwwroot&#x2F; 1.0及以后版本为 &#x2F;home&#x2F;wwwroot&#x2F;default&#x2F;<br>Nginx日志目录：&#x2F;home&#x2F;wwwlogs&#x2F;<br>&#x2F;root&#x2F;vhost.sh添加的虚拟主机配置文件所在目录：&#x2F;usr&#x2F;local&#x2F;nginx&#x2F;conf&#x2F;vhost&#x2F;<br>PureFtpd 目录：&#x2F;usr&#x2F;local&#x2F;pureftpd&#x2F;<br>PureFtpd web管理目录： 0.9版为&#x2F;home&#x2F;wwwroot&#x2F;default&#x2F;ftp&#x2F; 1.0版为 &#x2F;home&#x2F;wwwroot&#x2F;default&#x2F;ftp&#x2F;<br>Proftpd 目录：&#x2F;usr&#x2F;local&#x2F;proftpd&#x2F;<br>Redis 目录：&#x2F;usr&#x2F;local&#x2F;redis&#x2F;</p><p><strong>LNMP相关配置文件位置</strong><br>Nginx主配置(默认虚拟主机)文件：&#x2F;usr&#x2F;local&#x2F;nginx&#x2F;conf&#x2F;nginx.conf<br>添加的虚拟主机配置文件：&#x2F;usr&#x2F;local&#x2F;nginx&#x2F;conf&#x2F;vhost&#x2F;域名.conf<br>MySQL配置文件：&#x2F;etc&#x2F;my.cnf<br>PHP配置文件：&#x2F;usr&#x2F;local&#x2F;php&#x2F;etc&#x2F;php.ini<br>php-fpm配置文件：&#x2F;usr&#x2F;local&#x2F;php&#x2F;etc&#x2F;php-fpm.conf<br>PureFtpd配置文件：&#x2F;usr&#x2F;local&#x2F;pureftpd&#x2F;pure-ftpd.conf 1.3及更高版本：&#x2F;usr&#x2F;local&#x2F;pureftpd&#x2F;etc&#x2F;pure-ftpd.conf<br>PureFtpd MySQL配置文件：&#x2F;usr&#x2F;local&#x2F;pureftpd&#x2F;pureftpd-mysql.conf<br>Proftpd配置文件：&#x2F;usr&#x2F;local&#x2F;proftpd&#x2F;etc&#x2F;proftpd.conf 1.2及之前版本为&#x2F;usr&#x2F;local&#x2F;proftpd&#x2F;proftpd.conf<br>Proftpd 用户配置文件：&#x2F;usr&#x2F;local&#x2F;proftpd&#x2F;etc&#x2F;vhost&#x2F;用户名.conf<br>Redis 配置文件：&#x2F;usr&#x2F;local&#x2F;redis&#x2F;etc&#x2F;redis.conf</p><p><strong>LNMPA相关目录文件位置</strong><br>Apache目录：&#x2F;usr&#x2F;local&#x2F;apache&#x2F;<br>Apache配置文件：&#x2F;usr&#x2F;local&#x2F;apache&#x2F;conf&#x2F;httpd.conf<br>Apache虚拟主机配置文件目录：&#x2F;usr&#x2F;local&#x2F;apache&#x2F;conf&#x2F;vhost&#x2F;<br>Apache默认虚拟主机配置文件：&#x2F;usr&#x2F;local&#x2F;apache&#x2F;conf&#x2F;extra&#x2F;httpd-vhosts.conf<br>虚拟主机配置文件名称：&#x2F;usr&#x2F;local&#x2F;apache&#x2F;conf&#x2F;vhost&#x2F;域名.conf</p></details><p>参考与引用：</p><blockquote><p><a href="https://bbs.vpser.net/thread-1794-1-1.html">nginx关闭默认站点&#x2F;空主机头（禁止IP直接访问、防止域名恶… - Powered by Discuz! (vpser.net)</a></p><p><a href="https://blog.csdn.net/viviliving/article/details/124092261">Ubuntu允许root直接登录设置_回到未来望过去的博客-CSDN博客_ubuntu允许root登录</a></p><p><a href="http://www.javashuo.com/article/p-ftejengj-qt.html">解决debian服务器中文显示乱码问题 - JavaShuo</a></p><p><a href="https://lnmp.org/faq/lnmp-software-list.html">LNMP安装了哪些软件？安装目录在哪？ - LNMP一键安装包</a></p><p><a href="https://pan-xiao.gitbook.io/debian/config/ntp#ntpd">时间同步-Debian 快速入门攻略</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;一般新买服务器我会把它装成Debian，然后对它进行一些“调教”。&lt;/p&gt;
&lt;h2 id=&quot;首先更新&quot;&gt;&lt;a href=&quot;#首先更新&quot; class=&quot;headerlink&quot; title=&quot;首先更新&quot;&gt;&lt;/a&gt;首先更新&lt;/h2&gt;&lt;p&gt;如果是国内服务器，请先修改为&lt;a href</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="debian" scheme="https://shyi.org/tags/debian/"/>
    
    <category term="Nginx" scheme="https://shyi.org/tags/Nginx/"/>
    
    <category term="lnmp" scheme="https://shyi.org/tags/lnmp/"/>
    
    <category term="Docker" scheme="https://shyi.org/tags/Docker/"/>
    
    <category term="speedtest" scheme="https://shyi.org/tags/speedtest/"/>
    
  </entry>
  
  <entry>
    <title>Markdown折叠代码块</title>
    <link href="https://shyi.org/posts/50576/"/>
    <id>https://shyi.org/posts/50576/</id>
    <published>2022-05-25T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<p>使用一下代码直接折叠代码块</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">details</span>&gt;</span><br>  <span class="hljs-tag">&lt;<span class="hljs-name">summary</span>&gt;</span>折叠时显示的标题<span class="hljs-tag">&lt;/<span class="hljs-name">summary</span>&gt;</span><br><br>```java<br>System.out.println(&quot;Hello world！&quot;);<br>```<br><span class="hljs-tag">&lt;/<span class="hljs-name">details</span>&gt;</span><br></code></pre></td></tr></table></figure><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs xml"># <span class="hljs-tag">&lt;<span class="hljs-name">summary</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">summary</span>&gt;</span>标签下要空一行<br></code></pre></td></tr></table></figure><details>  <summary>点击</summary><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs java">System.out.println(<span class="hljs-string">&quot;Hello world！&quot;</span>);<br></code></pre></td></tr></table></figure></details><p>引用与参考：</p><blockquote><p><a href="https://www.gmlyo.com/2019/06/16/Markdown%E4%BB%A3%E7%A0%81%E6%8A%98%E5%8F%A0%E4%B8%8E%E6%94%B6%E8%B5%B7/">Markdown代码折叠与收起</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;使用一下代码直接折叠代码块&lt;/p&gt;
&lt;figure class=&quot;highlight html&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
  </entry>
  
  <entry>
    <title>Docker安装E5 RenewX</title>
    <link href="https://shyi.org/posts/10089/"/>
    <id>https://shyi.org/posts/10089/</id>
    <published>2022-05-25T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<p>Docker安装E5 RenewX</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -d \<br>    --name=<span class="hljs-string">&quot;RenewX&quot;</span> \<br>    --restart=unless-stopped \<br>    -p 1066:1066 \<br>    -v /home/&lt;username&gt;/renewx/Deploy:/renewx/Deploy \<br>    -v /home/&lt;username&gt;/renewx/appdata:/renewx/appdata \<br>gladtbam/ms365_e5_renewx:latest<br></code></pre></td></tr></table></figure><p>docker-compose.yaml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>    <span class="hljs-attr">ms365_e5_renewx:</span><br>        <span class="hljs-attr">container_name:</span> <span class="hljs-string">&#x27;RenewX&#x27;</span><br>        <span class="hljs-attr">restart:</span> <span class="hljs-string">&#x27;unless-stopped&#x27;</span><br>        <span class="hljs-attr">user:</span> <span class="hljs-string">&#x27;1000:1000&#x27;</span><br>        <span class="hljs-attr">ports:</span><br>            <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;1066:1066&#x27;</span>  <span class="hljs-comment"># &#x27;127.0.0.1:1066:1066&#x27;</span><br>        <span class="hljs-attr">volumes:</span><br>            <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;/home/&lt;username&gt;/renewx/Deploy:/renewx/Deploy&#x27;</span><br>            <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;/home/&lt;username&gt;/renewx/appdata:/renewx/appdata&#x27;</span><br>        <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;gladtbam/ms365_e5_renewx:latest&#x27;</span><br></code></pre></td></tr></table></figure><p>然后上传<a href="https://sundayrx.lanzoui.com/aW09Lsss75g">Config.xml</a>文件到&#x2F;home&#x2F;user&#x2F;renewx&#x2F;Deploy</p><p>执行</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker restart RenewX<br></code></pre></td></tr></table></figure><details>  <summary>Config.xml</summary><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br></pre></td><td class="code"><pre><code class="hljs xml"><span class="hljs-meta">&lt;?xml version=<span class="hljs-string">&quot;1.0&quot;</span> encoding=<span class="hljs-string">&quot;utf-8&quot;</span> ?&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Configuration</span>&gt;</span><br><span class="hljs-comment">&lt;!--站点服务器基本配置--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Serivce</span>&gt;</span><br><span class="hljs-comment">&lt;!--服务访问端口--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Port</span>&gt;</span>1066<span class="hljs-tag">&lt;/<span class="hljs-name">Port</span>&gt;</span><br><span class="hljs-comment">&lt;!--管理员密码(管理员登录路由/Admin/Login) 重要：首次启动前必须更改--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">LoginPassword</span>&gt;</span>123456789<span class="hljs-tag">&lt;/<span class="hljs-name">LoginPassword</span>&gt;</span><br><span class="hljs-comment">&lt;!--是否启用内核多线程支持--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">CoreMultiThread</span>&gt;</span>true<span class="hljs-tag">&lt;/<span class="hljs-name">CoreMultiThread</span>&gt;</span><br><span class="hljs-comment">&lt;!--网站备案（选填）--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">ICP</span>&gt;</span><br><span class="hljs-comment">&lt;!--备案显示文本--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Text</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">Text</span>&gt;</span><br><span class="hljs-comment">&lt;!--备案管理查询机构跳转链接--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Link</span>&gt;</span>https://beian.miit.gov.cn<span class="hljs-tag">&lt;/<span class="hljs-name">Link</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">ICP</span>&gt;</span><br><span class="hljs-comment">&lt;!--Bootstrap CDN 若要更改请务必使用bootstrap@5.1.3版本（选填）--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">CDN</span>&gt;</span><br><span class="hljs-comment">&lt;!--Bootstrap CSS文件CDN bootstrap.min.css--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">CSS</span>&gt;</span>https://cdn.staticfile.org/bootstrap/5.1.3/css/bootstrap.min.css<span class="hljs-tag">&lt;/<span class="hljs-name">CSS</span>&gt;</span><br><span class="hljs-comment">&lt;!--Bootstrap JS文件CDN bootstrap.bundle.min.js--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">JS</span>&gt;</span>https://cdn.staticfile.org/bootstrap/5.1.3/js/bootstrap.bundle.min.js<span class="hljs-tag">&lt;/<span class="hljs-name">JS</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">CDN</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">Serivce</span>&gt;</span><br><span class="hljs-comment">&lt;!--站点Kestrel服务器HTTPS配置 （只支持IIS证书类型 即PFX格式的证书）--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">HTTPS</span>&gt;</span><br><span class="hljs-comment">&lt;!--Kestrel是否启用HTTPS(SSL加密传输)--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Enable</span>&gt;</span>false<span class="hljs-tag">&lt;/<span class="hljs-name">Enable</span>&gt;</span><br><span class="hljs-comment">&lt;!--SSL证书文件名 (需要将PFX格式的SSL证书放置于该配置文件的同级目录Deploy文件夹下) 如e5.sundayrx.net.pfx--&gt;</span><br><span class="hljs-comment">&lt;!--不填则默认使用Dev localhost 本地证书--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Certificate</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">Certificate</span>&gt;</span><br><span class="hljs-comment">&lt;!--SSL证书密钥(PFX证书的访问密钥)--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Password</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">Password</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">HTTPS</span>&gt;</span><br><span class="hljs-comment">&lt;!--共享站点配置,不共享可无视以下内容 (若要共享站点 请自备以下所需的配置信息 且配置中HTTPS必须启用)--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">ShareSite</span>&gt;</span><br><span class="hljs-comment">&lt;!--是否启用站点共享--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Enable</span>&gt;</span>false<span class="hljs-tag">&lt;/<span class="hljs-name">Enable</span>&gt;</span><br><span class="hljs-comment">&lt;!--SMTP邮件发送支持--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">SMTP</span>&gt;</span><br><span class="hljs-comment">&lt;!--发件邮箱--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Email</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">Email</span>&gt;</span><br><span class="hljs-comment">&lt;!--邮箱密钥--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Password</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">Password</span>&gt;</span><br><span class="hljs-comment">&lt;!--SMTP服务器地址--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Host</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">Host</span>&gt;</span><br><span class="hljs-comment">&lt;!--SMTP服务器端口--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Port</span>&gt;</span>587<span class="hljs-tag">&lt;/<span class="hljs-name">Port</span>&gt;</span><br><span class="hljs-comment">&lt;!--SMTP服务器是否使用SSL传输--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">EnableSSL</span>&gt;</span>true<span class="hljs-tag">&lt;/<span class="hljs-name">EnableSSL</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">SMTP</span>&gt;</span><br><span class="hljs-comment">&lt;!--第三方OAuth登录支持(至少启用以下一种OAuth否则其他用户无法注册)--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">OAuth</span>&gt;</span><br><span class="hljs-comment">&lt;!--微软登录授权--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Microsoft</span>&gt;</span><br><span class="hljs-comment">&lt;!--是否启用该OAuth--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Enable</span>&gt;</span>true<span class="hljs-tag">&lt;/<span class="hljs-name">Enable</span>&gt;</span><br><span class="hljs-comment">&lt;!--应用程序Id--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">ClientId</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">ClientId</span>&gt;</span><br><span class="hljs-comment">&lt;!--应用程序访问机密--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">ClientSecret</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">ClientSecret</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">Microsoft</span>&gt;</span><br><span class="hljs-comment">&lt;!--GitHub登录授权--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Github</span>&gt;</span><br><span class="hljs-comment">&lt;!--是否启用该OAuth--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Enable</span>&gt;</span>true<span class="hljs-tag">&lt;/<span class="hljs-name">Enable</span>&gt;</span><br><span class="hljs-comment">&lt;!--应用程序Id--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">ClientId</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">ClientId</span>&gt;</span><br><span class="hljs-comment">&lt;!--应用程序访问机密--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">ClientSecret</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">ClientSecret</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">Github</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">OAuth</span>&gt;</span><br><span class="hljs-comment">&lt;!--站点系统设置--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">System</span>&gt;</span><br><span class="hljs-comment">&lt;!--站点启动后默认是否允许用户注册 建议为false--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">AllowRegister</span>&gt;</span>false<span class="hljs-tag">&lt;/<span class="hljs-name">AllowRegister</span>&gt;</span><br><span class="hljs-comment">&lt;!--站点启动后默认公告（换行符请使用 &amp;#x000D;&amp;#x000A; 进行换行）--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Notice</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">Notice</span>&gt;</span><br><span class="hljs-comment">&lt;!--站点运营者--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">Master</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">Master</span>&gt;</span><br><span class="hljs-comment">&lt;!--站点运营者推广链接--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">MasterLink</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">MasterLink</span>&gt;</span><br><span class="hljs-comment">&lt;!--站点新用户默认配额数--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">DefaultQuota</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">DefaultQuota</span>&gt;</span><br><span class="hljs-comment">&lt;!--站点自动特赦时间间隔 （单位：天 至少30天）--&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">AutoSpecialPardonInterval</span>&gt;</span>30<span class="hljs-tag">&lt;/<span class="hljs-name">AutoSpecialPardonInterval</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">System</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">ShareSite</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">Configuration</span>&gt;</span><br></code></pre></td></tr></table></figure></details><p>然后Nginx进行反代</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">server_name</span> demon.com;<br>    <span class="hljs-comment">#ssl_certificate        crt/pem;</span><br>    <span class="hljs-comment">#ssl_certificate_key    key;</span><br>    <span class="hljs-section">location</span> /<br>    &#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:1066;<br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> REMOTE-HOST <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-attribute">add_header</span> Cache-Control <span class="hljs-literal">no</span>-cache;<br>    &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p>登陆后需要在<a href="https://portal.azure.com/#home">微软Azure</a>进行<a href="https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade">应用注册</a></p><p>点击新注册，名字随便起，受支持的账户类型选择“任何组织目录（）中的账户和个人Microsoft账户（）”，重定向先不填。</p><p>选择刚才新建应用，点概述，选择添加重定向URL，添加平台，移动和桌面应用程序，选择<code>https://login.microsoftonline.com/common/oauth2/nativeclient</code>即可，允许公共客户端流改为是，然后保存。</p><p>然后使用<a href="https://blog.csdn.net/qq_33212020/article/details/114482595">Win版本</a>的Microsoft365 E5进行自动授权，这一步需要登录管理员的账户。</p><p>然后记录下应用程序（客户端）ID</p><p>建议选择登录调用，就可以在web或者电脑上开启调用了。</p><p><strong>一些常用链接：</strong></p><p><a href="https://developer.microsoft.com/zh-cn/microsoft-365/profile">查看E5账号剩余天数</a>，需要使用注册E5的账户登录</p><p><a href="https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade">Azure应用注册</a></p><p><a href="https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview">关闭Azure AD双重验证</a></p><p><a href="https://admin.onedrive.com/?v=StorageSettings">OneDrive储存设置</a></p><p>参考与引用：</p><blockquote><p><a href="https://www.gladtbam.top/posts/22256/">Microsoft 365 E5 Renew X Docker 部署 | 我的测试 (gladtbam.top)</a></p><p><a href="https://www.curious.host/post-226">教程：用Docker Compose的方式部署可共享的MS365 E5 RenewX到你的服务器 – 遥庆欢宴之宾 (curious.host)</a></p><p><a href="https://github.com/hongyonghan/Docker_Microsoft365_E5_Renew_X">hongyonghan&#x2F;Docker_Microsoft365_E5_Renew_X: Docker版本的E5调用API续订服务：Microsoft 365 E5 Renew X (github.com)</a></p><p><a href="https://blog.csdn.net/qq_33212020/article/details/114482595">E5 调用API续订程序：Microsoft 365 E5 Renew Plus_SundayRX的博客-CSDN博客_e5续订</a></p><p><a href="https://ednovas.xyz/2022/01/10/e5renewplus/">Microsoft 365 E5 Renew Plus 续订程序 | EdNovas的小站</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Docker安装E5 RenewX&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Nginx" scheme="https://shyi.org/tags/Nginx/"/>
    
    <category term="Docker" scheme="https://shyi.org/tags/Docker/"/>
    
    <category term="MS E5" scheme="https://shyi.org/tags/MS-E5/"/>
    
  </entry>
  
  <entry>
    <title>常用命令</title>
    <link href="https://shyi.org/posts/62534/"/>
    <id>https://shyi.org/posts/62534/</id>
    <published>2022-05-23T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.947Z</updated>
    
    <content type="html"><![CDATA[<p>修改hosts：</p><p>Windows以管理员身份运行CMD，然后输入</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">notepad %windir%\system32\drivers\etc\hosts<br></code></pre></td></tr></table></figure><p>Linux</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vim /etc/hosts<br></code></pre></td></tr></table></figure><p>立即休眠Windows：</p><p>CMD运行下行代码，或者加入到快捷方式中</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs stylus">C:\Windows\System32\rundll32<span class="hljs-selector-class">.exe</span> powrprof<span class="hljs-selector-class">.dll</span>,SetSuspendState Hibemate<br></code></pre></td></tr></table></figure><p>查看Docker各容器的使用状况</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">docker stats</span><br></code></pre></td></tr></table></figure><p>docker command to docker-compose.yaml</p><blockquote><p>  <a href="https://www.composerize.com/">https://www.composerize.com/</a></p><p>  <a href="https://github.com/magicmark/composerize">https://github.com/magicmark/composerize</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;修改hosts：&lt;/p&gt;
&lt;p&gt;Windows以管理员身份运行CMD，然后输入&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Docker" scheme="https://shyi.org/tags/Docker/"/>
    
    <category term="linux" scheme="https://shyi.org/tags/linux/"/>
    
    <category term="windows" scheme="https://shyi.org/tags/windows/"/>
    
  </entry>
  
  <entry>
    <title>镜像源加速下载</title>
    <link href="https://shyi.org/posts/11367/"/>
    <id>https://shyi.org/posts/11367/</id>
    <published>2022-05-04T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.946Z</updated>
    
    <content type="html"><![CDATA[<p>对于一些服务，国内的服务器下载的速度很慢，这时我们可以使用一些镜像源来加速下载。</p><h3 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h3><h4 id="0-docker-install"><a href="#0-docker-install" class="headerlink" title="0. docker install"></a>0. docker install</h4><blockquote><ul><li>docker-ce:<br><a href="https://docs.docker.com/engine/install/">https://docs.docker.com/engine/install/</a><br><a href="https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/">https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/</a></li></ul></blockquote><blockquote><ul><li>docker.io<br>sudo apt install docker.io</li></ul></blockquote><h4 id="1-使用cf-Workers自建"><a href="#1-使用cf-Workers自建" class="headerlink" title="1. 使用cf Workers自建"></a>1. 使用cf Workers自建</h4><blockquote><p>  <a href="https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6">https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6</a></p><p>  cf自建1: <a href="https://github.com/yaming116/docker-pull-proxy/blob/main/worker.js">https://github.com/yaming116/docker-pull-proxy/blob/main/worker.js</a></p><p>  cf自建2: <a href="https://github.com/mzzsfy/Dockerfile/blob/main/cf-worker/docker-image.js">https://github.com/mzzsfy/Dockerfile/blob/main/cf-worker/docker-image.js</a></p><p>  cf自建3: <a href="https://github.com/ciiiii/cloudflare-docker-proxy/blob/master/src/index.js">https://github.com/ciiiii/cloudflare-docker-proxy/blob/master/src/index.js</a></p><p>  cf自建4: <a href="https://github.com/lework/cloudflare-workers/blob/master/docker_proxy.js">https://github.com/lework/cloudflare-workers/blob/master/docker_proxy.js</a></p><p>  在Works和Pages填入下面的代码后，需要添加对应的DNS记录（随便填，可以填8.8.8.8）和绑定Works路由（“docker.xxx.xyz&#x2F;*”与对应Works绑定）。</p></blockquote><h4 id="2-一些docker镜像源"><a href="#2-一些docker镜像源" class="headerlink" title="2. 一些docker镜像源"></a>2. 一些docker镜像源</h4><p>（不稳定，强烈建议使用cf自建）</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs bash">https://docker.m.daocloud.io  <span class="hljs-comment"># 慢</span><br>https://docker.chenby.cn<br>https://docker.1panel.live<br>https://hub.rat.dev<br>https://hub.uuuadc.top<br>https://docker.anyhub.us.kg<br>https://dockerhub.jobcher.com<br>https://dockerhub.icu<br>https://docker.ckyl.me<br>https://docker.awsl9527.cn<br>https://docker.hpcloud.cloud<br>https://ustc-edu-cn.mirror.aliyuncs.com  <span class="hljs-comment"># 版本非常旧</span><br>https://ccr.ccs.tencentyun.com  <span class="hljs-comment">#旧</span><br>https://atomhub.openatom.cn  <span class="hljs-comment"># 部分镜像可用，300多，旧</span><br></code></pre></td></tr></table></figure><h4 id="3-Linux修改"><a href="#3-Linux修改" class="headerlink" title="3. Linux修改"></a>3. Linux修改</h4><p>修改&#x2F;etc&#x2F;docker&#x2F;daemon.json配置文件</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /etc/docker<br><span class="hljs-built_in">sudo</span> vim /etc/docker/daemon.json<br><span class="hljs-comment"># 配置单个mirror</span><br>&#123;<br><span class="hljs-string">&quot;registry-mirrors&quot;</span>: [<span class="hljs-string">&quot;https://docker.chenby.cn&quot;</span>]<br>&#125;<br><span class="hljs-comment"># 配置多个mirror</span><br>&#123;<br>    <span class="hljs-string">&quot;registry-mirrors&quot;</span>: [<br>        <span class="hljs-string">&quot;https://docker.chenby.cn&quot;</span>,<br>        <span class="hljs-string">&quot;https://docker.m.daocloud.io&quot;</span>,<br>        <span class="hljs-string">&quot;https://docker.1panel.live&quot;</span>,<br>        <span class="hljs-string">&quot;https://hub.rat.dev&quot;</span>,<br>        <span class="hljs-string">&quot;https://hub.uuuadc.top&quot;</span><br>    ]<br>&#125;<br><span class="hljs-comment"># 或者</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /etc/docker/daemon.json &lt;&lt;-<span class="hljs-string">&#x27;EOF&#x27;</span><br>&#123;<br>    <span class="hljs-string">&quot;registry-mirrors&quot;</span>: [<br>        <span class="hljs-string">&quot;https://docker.chenby.cn&quot;</span>,<br>        <span class="hljs-string">&quot;https://docker.m.daocloud.io&quot;</span>,<br>        <span class="hljs-string">&quot;https://docker.1panel.live&quot;</span>,<br>        <span class="hljs-string">&quot;https://hub.rat.dev&quot;</span>,<br>        <span class="hljs-string">&quot;https://hub.uuuadc.top&quot;</span><br>    ]<br>&#125;<br>EOF<br><span class="hljs-comment"># 重启docker</span><br><span class="hljs-built_in">sudo</span> systemctl daemon-reload<br><span class="hljs-built_in">sudo</span> systemctl restart docker<br><br><span class="hljs-comment"># 使用一下命令查看是否配置成功</span><br>docker info<br><span class="hljs-comment"># Registry Mirrors:</span><br><span class="hljs-comment">#  [...]</span><br><span class="hljs-comment">#  https://docker.m.daocloud.io</span><br></code></pre></td></tr></table></figure><h4 id="4-群晖修改"><a href="#4-群晖修改" class="headerlink" title="4. 群晖修改"></a>4. 群晖修改</h4><h5 id="4-1-修改注册表方式"><a href="#4-1-修改注册表方式" class="headerlink" title="4.1 修改注册表方式"></a>4.1 修改注册表方式</h5><p>对于群晖来说需要依次点击docker-&gt;注册表-&gt;设置-&gt;编辑Docker Hub-&gt;勾选启动注册表镜像和信任SSL自我签署证书，在注册表镜像URL里填写更换镜像源的链接。最后重启Docker和DSM（不一定需要），如下图方式。</p><img src="https://img.shyi.org/images/98ba46e7e95acf42f9598f965f5f54ea.jpg" style="zoom:50%;" /><h5 id="4-2-命令行或docker-compose附加"><a href="#4-2-命令行或docker-compose附加" class="headerlink" title="4.2 命令行或docker-compose附加"></a>4.2 命令行或docker-compose附加</h5><blockquote><p>  也可以使用命令行docker pull，或者使用docker-compose，只需要在image的前面加上镜像前缀即可。</p>  <figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs stylus">docker pull docker<span class="hljs-selector-class">.m</span><span class="hljs-selector-class">.daocloud</span>.io/linuxserver/emby:latest<br><span class="hljs-selector-tag">image</span>: <span class="hljs-string">&quot;docker.m.daocloud.io/linuxserver/emby:latest&quot;</span><br></code></pre></td></tr></table></figure></blockquote><h5 id="4-3-修改环境变量（不建议）"><a href="#4-3-修改环境变量（不建议）" class="headerlink" title="4.3 修改环境变量（不建议）"></a>4.3 修改环境变量（不建议）</h5><p>群晖可以参考以下链接进行尝试修改，修改前请备份对应文件！</p><blockquote><p><a href="https://www.v2ex.com/t/981481#r_14833577">https://www.v2ex.com/t/981481#r_14833577</a><br><a href="https://post.m.smzdm.com/p/ag82opxd/">https://post.m.smzdm.com/p/ag82opxd/</a></p></blockquote><p>其他的地址</p><blockquote><p>  gcr.io  &gt;&gt;&gt;&gt;&gt;  gcr.chenby.cn<br>  quay.io  &gt;&gt;&gt;&gt;&gt;  quay.chenby.cn<br>  ghcr.io  &gt;&gt;&gt;&gt;&gt;  ghcr.chenby.cn<br>  docker.io  &gt;&gt;&gt;&gt;&gt;  docker.chenby.cn<br>  k8s.gcr.io  &gt;&gt;&gt;&gt;&gt;  k8s.chenby.cn<br>  registry.k8s.io  &gt;&gt;&gt;&gt;&gt;  k8s.chenby.cn<br>  docker.elastic.co  &gt;&gt;&gt;&gt;&gt;  elastic.chenby.cn<br>  docker.cloudsmith.io  &gt;&gt;&gt;&gt;&gt;  cloudsmith.chenby.cn</p></blockquote><blockquote><p>  cr.l5d.io  &gt;&gt;&gt;&gt;&gt;  l5d.m.daocloud.io<br>  docker.elastic.co   &gt;&gt;&gt;&gt;&gt;  elastic.m.daocloud.io<br>  docker.io  &gt;&gt;&gt;&gt;&gt;  docker.m.daocloud.io<br>  gcr.io  &gt;&gt;&gt;&gt;&gt;  gcr.m.daocloud.io<br>  ghcr.io  &gt;&gt;&gt;&gt;&gt;  ghcr.m.daocloud.io<br>  k8s.gcr.io  &gt;&gt;&gt;&gt;&gt;  k8s-gcr.m.daocloud.io<br>  registry.k8s.io  &gt;&gt;&gt;&gt;&gt;  k8s.m.daocloud.io<br>  mcr.microsoft.com  &gt;&gt;&gt;&gt;&gt;  mcr.m.daocloud.io<br>  nvcr.io  &gt;&gt;&gt;&gt;&gt; nvcr.m.daocloud.io<br>  quay.io  &gt;&gt;&gt;&gt;&gt; quay.m.daocloud.io<br>  registry.jujucharms.com  &gt;&gt;&gt;&gt;&gt;  jujucharms.m.daocloud.io<br>  rocks.canonical.com  &gt;&gt;&gt;&gt;&gt;  rocks-canonical.m.daocloud.io</p></blockquote><h3 id="Ubuntu-Debian-Centos加速下载"><a href="#Ubuntu-Debian-Centos加速下载" class="headerlink" title="Ubuntu&#x2F;Debian&#x2F;Centos加速下载"></a>Ubuntu&#x2F;Debian&#x2F;Centos加速下载</h3><figure class="highlight avrasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs avrasm"><span class="hljs-symbol">https:</span>//mirrors.tuna.tsinghua.edu.cn <span class="hljs-meta"># 清华大学</span><br><span class="hljs-symbol">http:</span>//mirrors.ustc.edu.cn <span class="hljs-meta"># 中国科学技术大学</span><br><span class="hljs-symbol">https:</span>//developer.aliyun.com/mirror <span class="hljs-meta"># 阿里云</span><br><span class="hljs-symbol">http:</span>//mirrors<span class="hljs-number">.163</span>.com <span class="hljs-meta"># 网易</span><br><span class="hljs-symbol">https:</span>//debian.bjtu.edu.cn <span class="hljs-meta"># 北京交通大学</span><br><span class="hljs-symbol">http:</span>//mirrors.sohu.com <span class="hljs-meta">#搜狐</span><br><span class="hljs-meta"># 越往下越慢</span><br></code></pre></td></tr></table></figure><h4 id="1-Ubuntu"><a href="#1-Ubuntu" class="headerlink" title="1.Ubuntu"></a>1.Ubuntu</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash">lsb_release -a <span class="hljs-comment"># 查看版本</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> /etc/apt/sources.list /etc/apt/sources.list.backup <span class="hljs-comment">#存个备份</span><br>vim /etc/apt/sources.list<br><span class="hljs-comment"># 或者</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> &gt; /etc/apt/sources.list &lt;&lt;<span class="hljs-string">EOF</span><br><span class="hljs-string"># 源</span><br><span class="hljs-string">EOF</span><br></code></pre></td></tr></table></figure><p><a href="https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/">清华源</a></p><p>Ubuntu12</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> &gt; /etc/apt/sources.list &lt;&lt;<span class="hljs-string">EOF</span><br><span class="hljs-string">deb http://mirrors.aliyun.com/oldubuntu-releases/ubuntu precise main universe restricted multiverse</span><br><span class="hljs-string">deb http://mirrors.aliyun.com/oldubuntu-releases/ubuntu precise-security universe main multiverse restricted</span><br><span class="hljs-string">deb http://mirrors.aliyun.com/oldubuntu-releases/ubuntu precise-updates universe main multiverse restricted</span><br><span class="hljs-string">deb http://mirrors.aliyun.com/oldubuntu-releases/ubuntu precise-proposed universe main multiverse restricted</span><br><span class="hljs-string">EOF</span><br></code></pre></td></tr></table></figure><details><summary>14.04 LTS</summary><pre><code class="hljs"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse# 预发布软件源，不建议启用# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse</code></pre></details><details><summary>16.04 LTS</summary><pre><code class="hljs"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse# 预发布软件源，不建议启用# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse</code></pre></details><details><summary>18.04 LTS</summary><pre><code class="hljs"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse# 预发布软件源，不建议启用# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse</code></pre></details><details><summary>20.04 LTS</summary><pre><code class="hljs"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse# 预发布软件源，不建议启用# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse</code></pre></details><details><summary>21.04</summary><pre><code class="hljs"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-updates main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-backports main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-backports main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-security main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-security main restricted universe multiverse# 预发布软件源，不建议启用# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-proposed main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ hirsute-proposed main restricted universe multiverse</code></pre></details><details><summary>21.10</summary><pre><code class="hljs"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-backports main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-backports main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-security main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-security main restricted universe multiverse# 预发布软件源，不建议启用# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse</code></pre></details><details><summary>22.04 LTS</summary><pre><code class="hljs"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse# 预发布软件源，不建议启用# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</code></pre></details><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt-get update<br><span class="hljs-built_in">sudo</span> apt-get upgrade<br><span class="hljs-comment"># 出现tsinghua证明成功</span><br></code></pre></td></tr></table></figure><h4 id="2-Debian"><a href="#2-Debian" class="headerlink" title="2.Debian"></a>2.Debian</h4><p><a href="https://mirrors.tuna.tsinghua.edu.cn/help/debian/">清华源</a></p><h4 id="3-Centos"><a href="#3-Centos" class="headerlink" title="3.Centos"></a>3.Centos</h4><p><a href="https://mirrors.tuna.tsinghua.edu.cn/help/centos/">清华源</a></p><h3 id="cmd"><a href="#cmd" class="headerlink" title="cmd"></a>cmd</h3><h4 id="临时生效"><a href="#临时生效" class="headerlink" title="临时生效"></a>临时生效</h4><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs routeros"><span class="hljs-comment"># 使用sock5代理</span><br><span class="hljs-built_in">set</span> <span class="hljs-attribute">http_proxy</span>=socks5://127.0.0.1:7890<br><span class="hljs-built_in">set</span> <span class="hljs-attribute">https_proxy</span>=socks5://127.0.0.1:7890<br><br><span class="hljs-comment"># 使用http代理</span><br><span class="hljs-built_in">set</span> <span class="hljs-attribute">http_proxy</span>=http://127.0.0.1:7890<br><span class="hljs-built_in">set</span> <span class="hljs-attribute">https_proxy</span>=http://127.0.0.1:7890<br><br><span class="hljs-comment"># 如果代理服务器要账户和密码</span><br><span class="hljs-built_in">set</span> <span class="hljs-attribute">http_proxy_user</span>=username<br><span class="hljs-built_in">set</span> <span class="hljs-attribute">http_proxy_pass</span>=password<br></code></pre></td></tr></table></figure><p>取消</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs routeros"><span class="hljs-comment"># 留空即可</span><br><span class="hljs-built_in">set</span> http_proxy=<br><span class="hljs-built_in">set</span> https_proxy=<br></code></pre></td></tr></table></figure><h4 id="永久生效"><a href="#永久生效" class="headerlink" title="永久生效"></a>永久生效</h4><p>右键【我的电脑 】-&gt; 属性 -&gt; 高级系统设置 -&gt; 高级 -&gt; 环境变量 -&gt; 系统环境变量</p><table><thead><tr><th>变量</th><th>值</th></tr></thead><tbody><tr><td><code>http_proxy</code></td><td><code>http://127.0.0.1:7890</code></td></tr><tr><td><code>https_proxy</code></td><td><code>http://127.0.0.1:7890</code></td></tr><tr><td># 账户和密码（如果有的话）</td><td></td></tr><tr><td><code>http_proxy_user</code></td><td><code>username</code></td></tr><tr><td><code>http_proxy_pass</code></td><td><code>password</code></td></tr></tbody></table><h3 id="git"><a href="#git" class="headerlink" title="git"></a>git</h3><p>参考之前写的</p><p><a href="https://shyi.org/posts/14780/">点击跳转</a></p><h3 id="pip"><a href="#pip" class="headerlink" title="pip"></a>pip</h3><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs awk">http:<span class="hljs-regexp">//mi</span>rrors.aliyun.com<span class="hljs-regexp">/pypi/</span>simple/ <span class="hljs-comment"># 阿里云 </span><br>http:<span class="hljs-regexp">//</span>pypi.douban.com<span class="hljs-regexp">/simple/</span> <span class="hljs-comment"># 豆瓣</span><br>https:<span class="hljs-regexp">//</span>pypi.tuna.tsinghua.edu.cn<span class="hljs-regexp">/simple/</span> <span class="hljs-comment"># 清华大学 </span><br>http:<span class="hljs-regexp">//</span>pypi.mirrors.ustc.edu.cn<span class="hljs-regexp">/simple/</span> <span class="hljs-comment"># 中国科学技术大学 </span><br>http:<span class="hljs-regexp">//</span>pypi.hustunique.com/ <span class="hljs-comment"># 华中科技大学</span><br></code></pre></td></tr></table></figure><h4 id="1-临时使用："><a href="#1-临时使用：" class="headerlink" title="1.临时使用："></a>1.临时使用：</h4><p>可以在使用pip的时候，加上参数-i和镜像地址</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 从清华镜像安装pandas库，或者为pip3</span><br>[/usr/bin/]python3 -m pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple<br><span class="hljs-comment"># 安装到对应python上</span><br>[/usr/bin/]python3 -m pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple<br></code></pre></td></tr></table></figure><h4 id="2-永久修改"><a href="#2-永久修改" class="headerlink" title="2.永久修改"></a>2.永久修改</h4><h5 id="推荐使用"><a href="#推荐使用" class="headerlink" title="推荐使用"></a>推荐使用</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装到对应python上，或者为pip3</span><br>[/usr/bin/]python3 -m pip config <span class="hljs-built_in">set</span> global.index-url https://pypi.tuna.tsinghua.edu.cn/simple<br>[/usr/bin/]python3 -m pip config <span class="hljs-built_in">set</span> install.trusted-host pypi.tuna.tsinghua.edu.cn<br>[/usr/bin/]python3 -m pip config list<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 配置多个镜像源</span><br>[/usr/bin/]python3 pip config <span class="hljs-built_in">set</span> global.extra-index-url <span class="hljs-string">&quot;&lt;url1&gt; &lt;url2&gt;...&quot;</span><br></code></pre></td></tr></table></figure><h5 id="a-Linux"><a href="#a-Linux" class="headerlink" title="a. Linux"></a>a. Linux</h5><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs pgsql">vim ~/.pip/pip.conf # 在用户根目录下 ~ 下创建 .pip 隐藏文件夹<br># 没有就创建一个文件夹及文件<br># 内容如下<br><br>[<span class="hljs-keyword">global</span>]<br><span class="hljs-keyword">index</span>-url = https://pypi.tuna.tsinghua.edu.cn/simple<br>[install]<br>use-mirrors =<span class="hljs-keyword">true</span><br>mirrors = https://pypi.tuna.tsinghua.edu.cn/simple<br><span class="hljs-keyword">trusted</span>-host = pypi.tuna.tsinghua.edu.cn<br></code></pre></td></tr></table></figure><h5 id="b-Windows"><a href="#b-Windows" class="headerlink" title="b. Windows"></a>b. Windows</h5><figure class="highlight livescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs livescript"><span class="hljs-number">1</span>、文件管理器文件路径地址栏敲：%APPDATA% 回车，快速进入 C:<span class="hljs-string">\Users\电脑用户\AppData\Roaming</span> 文件夹中<br><span class="hljs-number">2</span>、新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件<br><span class="hljs-number">3</span>、新增 pip.ini 配置文件内容<br><span class="hljs-comment">#  内容如上</span><br></code></pre></td></tr></table></figure><h3 id="github加速"><a href="#github加速" class="headerlink" title="github加速"></a>github加速</h3><ol><li><h4 id="github加速访问"><a href="#github加速访问" class="headerlink" title="github加速访问"></a>github加速访问</h4></li></ol><h5 id="a-添加hosts"><a href="#a-添加hosts" class="headerlink" title="a. 添加hosts"></a>a. 添加hosts</h5><p>  <a href="https://ping.chinaz.com/github.com">点击</a>寻找合适的ip，不出意外的话大陆都是红色，将香港、台湾、新加坡的IP加入hosts，应该可行。</p><h5 id="b-使用镜像站"><a href="#b-使用镜像站" class="headerlink" title="b. 使用镜像站"></a>b. 使用镜像站</h5><ol><li><a href="https://hub.fastgit.xyz/">https://hub.fastgit.xyz</a></li><li><a href="https://hub.おうか.tw/">https://hub.xn--p8jhe.tw</a></li></ol><h5 id="c-使用steam-、ds、FastGithub"><a href="#c-使用steam-、ds、FastGithub" class="headerlink" title="c. 使用steam++、ds、FastGithub"></a>c. 使用steam++、ds、FastGithub</h5><ol><li><a href="https://steampp.net/">steam++ </a> </li><li><a href="https://github.com/docmirror/dev-sidecar">dev-sidecar</a> </li><li><a href="https://github.com/dotnetcore/FastGithub">FastGithub</a></li></ol><h5 id="d-梯子"><a href="#d-梯子" class="headerlink" title="d. 梯子"></a>d. 梯子</h5><p>  不介绍</p><ol start="2"><li><h4 id="github加速下载"><a href="#github加速下载" class="headerlink" title="github加速下载"></a>github加速下载</h4></li></ol><h5 id="油猴插件加速"><a href="#油猴插件加速" class="headerlink" title="油猴插件加速"></a>油猴插件加速</h5><p><a href="https://greasyfork.org/zh-CN/scripts/412245-github-%E5%A2%9E%E5%BC%BA-%E9%AB%98%E9%80%9F%E4%B8%8B%E8%BD%BD">Github 增强</a></p><h5 id="Release、Code-ZIP-文件加速："><a href="#Release、Code-ZIP-文件加速：" class="headerlink" title="Release、Code(ZIP) 文件加速："></a>Release、Code(ZIP) 文件加速：</h5><blockquote><p>使用方法为：前面为代理地址，后面为你想要下载的地址</p><p><img src="https://img.shyi.org/images/f176801295be098866cd67709f1db584.png"></p><p>示例：<a href="https://gh.shyi.org/https://github.com/hunshcn/project/archive/master.zip">https://gh.shyi.org/https://github.com/hunshcn/project/archive/master.zip</a></p></blockquote><ol><li><a href="https://gh.shyi.org/">https://gh.shyi.org</a></li><li><a href="https://gh.api.99988866.xyz/">https://gh.api.99988866.xyz</a></li><li><a href="https://gh.gh2233.ml/">https://gh.gh2233.ml</a></li><li><a href="https://gh2.yanqishui.work/">https://gh2.yanqishui.work</a></li><li><a href="https://gh.ddlc.top/">https://gh.ddlc.top</a></li></ol><p>以上使用的是cf work，有些地区打不开</p><ol start="7"><li><a href="https://ghproxy.com/">https://ghproxy.com</a></li><li><a href="https://mirror.ghproxy.com/">https://mirror.ghproxy.com</a></li><li><a href="https://download.fastgit.org/">https://download.fastgit.org</a>  # 需要将github.com替换成download.fastgit.org</li></ol><h5 id="Git-Clone-加速："><a href="#Git-Clone-加速：" class="headerlink" title="Git Clone 加速："></a>Git Clone 加速：</h5><ol><li><p><a href="https://ghproxy.com/">https://ghproxy.com</a></p></li><li><p><a href="https://mirror.ghproxy.com/">https://mirror.ghproxy.com</a></p></li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">clone</span> https://ghproxy.com/https://github.com/stilleshan/ServerStatus<br></code></pre></td></tr></table></figure><p>git clone 私有仓库</p><p>Clone 私有仓库需要用户在 <a href="https://github.com/settings/tokens">Personal access tokens</a> 申请 Token 配合使用.<br><strong>git clone</strong> https:&#x2F;&#x2F;<strong>user:your_token</strong>@ghproxy.com&#x2F;<a href="https://github.com/your_name/your_private_repo">https://github.com/your_name/your_private_repo</a></p><ol start="3"><li><a href="https://ghproxy.futils.com/">https://ghproxy.futils.com</a></li><li><a href="https://gh.shyi.org/">https://gh.shyi.org</a></li></ol><h3 id="npm"><a href="#npm" class="headerlink" title="npm"></a>npm</h3><h4 id="一、"><a href="#一、" class="headerlink" title="一、"></a>一、</h4><p>npm换源</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">npm config <span class="hljs-built_in">set</span> registry http://registry.npm.taobao.org/ <span class="hljs-comment"># 淘宝源</span><br>npm i --registry https://registry.npm.taobao.org <span class="hljs-comment">#淘宝源</span><br>npm config <span class="hljs-built_in">set</span> registry https://registry.npmjs.org/ <span class="hljs-comment"># 官方源</span><br></code></pre></td></tr></table></figure><p>npm设置代理</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 设置</span><br>npm config <span class="hljs-built_in">set</span> proxy http://server:port<br>npm config <span class="hljs-built_in">set</span> https-proxy http://server:port<br><br><span class="hljs-comment"># 取消</span><br>npm config delete proxy<br>npm config delete https-proxy<br></code></pre></td></tr></table></figure><h4 id="二、"><a href="#二、" class="headerlink" title="二、"></a>二、</h4><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">https:</span><span class="hljs-comment">//npmmirror.com</span><br></code></pre></td></tr></table></figure><p>1.使用 cnpm命令行工具代替默认的 npm</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs stylus">npm install -<span class="hljs-selector-tag">g</span> cnpm <span class="hljs-attr">--registry</span>=https:<span class="hljs-comment">//registry.npmmirror.com</span><br></code></pre></td></tr></table></figure><p>2.添加 <code>npm</code> 参数 <code>alias</code> 一个新命令</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs jboss-cli"><span class="hljs-keyword">alias</span> cnpm=<span class="hljs-string">&quot;npm --registry=https://registry.npmmirror.com \</span><br><span class="hljs-string">--cache=$HOME/.npm/.cache/cnpm \</span><br><span class="hljs-string">--disturl=https://npmmirror.com/mirrors/node \</span><br><span class="hljs-string">--userconfig=$HOME/.cnpmrc&quot;</span><br><br><span class="hljs-comment"># Or alias it in .bashrc or .zshrc</span><br><span class="hljs-keyword">echo</span> &#x27;\n<span class="hljs-comment">#alias for cnpm\nalias cnpm=&quot;npm --registry=https://registry.npmmirror.com \</span><br><span class="hljs-params">--cache=</span>$HOME/<span class="hljs-string">.npm/.cache/cnpm</span> \<br><span class="hljs-params">--disturl=https</span>:<span class="hljs-string">//npmmirror.com/mirrors/node</span> \<br><span class="hljs-params">--userconfig=</span>$HOME/<span class="hljs-string">.cnpmrc</span><span class="hljs-string">&quot;&#x27; &gt;&gt; ~/.zshrc &amp;&amp; source ~/.zshrc</span><br></code></pre></td></tr></table></figure><p>安装模块</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">cnpm</span> install<span class="hljs-meta"> [name]</span><br></code></pre></td></tr></table></figure><p>同步模块</p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs vim"># 直接通过 <span class="hljs-keyword">sync</span> 命令马上同步一个模块, 只有 cnpm 命令行才有此功能:<br>cnpm <span class="hljs-keyword">sync</span> express<br># 通过 web 方式来同步: /<span class="hljs-keyword">sync</span>/express<br><span class="hljs-keyword">open</span> https://npmmirror.<span class="hljs-keyword">com</span>/<span class="hljs-keyword">sync</span>/express<br></code></pre></td></tr></table></figure><p>其他命令</p><p>支持 npm 除了 publish 之外的所有命令</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">cnpm</span> <span class="hljs-literal">info</span> express<br></code></pre></td></tr></table></figure><h3 id="gg"><a href="#gg" class="headerlink" title="gg"></a>gg</h3><p><a href="https://github.com/mzz2017/gg">https://github.com/mzz2017/gg</a></p><p>gg 是一个命令行工具，可在 Linux 环境下对任意命令进行一键代理，而无需安装 v2ray 等其他工具。</p><p>你只需要在想代理的命令之前添加 <code>gg</code> 即可，例如: <code>gg python -m pip install torch</code>.</p><p>引用与参考：</p><p><a href="https://mirrors.tuna.tsinghua.edu.cn/">清华大学开源软件镜像站 | Tsinghua Open Source Mirror</a></p><p><a href="http://mirrors.ustc.edu.cn/">USTC Open Source Software Mirror</a></p><p><a href="https://www.cnblogs.com/xiaoyao404/p/15644051.html">Docker更换国内镜像源 - 憨厚的小怪 - 博客园 (cnblogs.com)</a></p><p><a href="https://blog.csdn.net/Falleaves_Yu/article/details/120316411">群晖docker镜像源更换为阿里云镜像源_MoFalleaves的博客-CSDN博客_群晖docker源</a></p><p><a href="http://t.zoukankan.com/mengw-p-11408118.html">Ubuntu 更换下载源 - 走看看 (zoukankan.com)</a></p><p><a href="https://blog.csdn.net/weixin_42284219/article/details/117406855">修改Ubuntu系统默认软件下载源_达少Rising的博客-CSDN博客_ubuntu更换下载源</a></p><p><a href="https://blog.csdn.net/djzhao627/article/details/89977411">Markdown中如何实现内容折叠操作</a></p><p><a href="http://www.sins7.cn/changing-the-download-source-of-python-pip/">python pip更换下载源 (sins7.cn)</a></p><p><a href="https://blog.csdn.net/qq_36019490/article/details/95184976">切换python的pip源</a></p><p><a href="https://npmmirror.com/">npmmirror 中国镜像站</a></p><p><a href="https://greasyfork.org/zh-CN/scripts/412245-github-%E5%A2%9E%E5%BC%BA-%E9%AB%98%E9%80%9F%E4%B8%8B%E8%BD%BD">Github 增强 - 高速下载</a></p><p><a href="https://ghproxy.com/">GitHub Proxy</a></p><p><a href="https://github.com/hunshcn/gh-proxy">gh-proxy</a></p><p><a href="https://www.library.ac.cn/">Mirror List</a></p><p><a href="https://imnks.com/8302.html">关于Docker官方镜像仓库被墙的一些解决办法</a></p><p><a href="https://imnks.com/go/aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20veTBuZ2Ixbi83ZThmMTZhZjMyNDJjNzgxNWU3Y2EyZjA4MzNkM2VhNg">国内的 Docker Hub 镜像加速器</a></p><p><a href="https://github.com/DaoCloud/public-image-mirror">https://github.com/DaoCloud/public-image-mirror</a></p><p><a href="https://www.oiox.cn/index.php/archives/405/">https://www.oiox.cn/index.php/archives/405/</a></p><p><a href="https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6">https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6</a></p><p><a href="https://www.wangdu.site/course/2109.html">https://www.wangdu.site/course/2109.html</a></p><p><a href="https://github.com/mzz2017/gg">https://github.com/mzz2017/gg</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;对于一些服务，国内的服务器下载的速度很慢，这时我们可以使用一些镜像源来加速下载。&lt;/p&gt;
&lt;h3 id=&quot;Docker&quot;&gt;&lt;a href=&quot;#Docker&quot; class=&quot;headerlink&quot; title=&quot;Docker&quot;&gt;&lt;/a&gt;Docker&lt;/h3&gt;&lt;h4 id=&quot;0</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="github加速" scheme="https://shyi.org/tags/github%E5%8A%A0%E9%80%9F/"/>
    
    <category term="docker加速" scheme="https://shyi.org/tags/docker%E5%8A%A0%E9%80%9F/"/>
    
    <category term="pip" scheme="https://shyi.org/tags/pip/"/>
    
    <category term="npm" scheme="https://shyi.org/tags/npm/"/>
    
    <category term="linux镜像" scheme="https://shyi.org/tags/linux%E9%95%9C%E5%83%8F/"/>
    
  </entry>
  
  <entry>
    <title>Nginx实现反代任意网站</title>
    <link href="https://shyi.org/posts/35776/"/>
    <id>https://shyi.org/posts/35776/</id>
    <published>2022-05-03T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Nginx实现反代任意网站："><a href="#Nginx实现反代任意网站：" class="headerlink" title="Nginx实现反代任意网站："></a>Nginx实现反代任意网站：</h2><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span> &#123;<br>        <span class="hljs-attribute">listen</span>        <span class="hljs-number">80</span>;<br>        <span class="hljs-attribute">server_name</span>  aa.com; <span class="hljs-comment">#改成自己的域名</span><br>        <span class="hljs-attribute">root</span>   <span class="hljs-string">&quot;/www/wwwroot/aa.com&quot;</span>; <span class="hljs-comment">#改自己的服务器目录</span><br><br>        <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host</span> <span class="hljs-string">&quot;https://www.baidu.com&quot;</span>;<br>        <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host3</span> <span class="hljs-string">&quot;/&quot;</span>;<br>        <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host5</span> <span class="hljs-string">&quot;/&quot;</span>;<br>        <span class="hljs-attribute">if</span> (<span class="hljs-variable">$request_uri</span> <span class="hljs-regexp">~* ^\/((http|https)://(www.)?(\w+(\.)?)+)(.*?)$)</span> &#123;<br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host</span> <span class="hljs-variable">$1</span>;<br><br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host3</span> <span class="hljs-variable">$6</span>;<br>        &#125;<br>        <br>        <span class="hljs-attribute">if</span> (<span class="hljs-variable">$custom_host3</span> = <span class="hljs-string">&quot;&quot;</span>)&#123;<br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host3</span> <span class="hljs-string">&quot;/&quot;</span>;<br>        &#125;<br>        <span class="hljs-attribute">if</span> (<span class="hljs-variable">$custom_host3</span> = <span class="hljs-string">&quot; &quot;</span>)&#123;<br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host3</span> <span class="hljs-string">&quot;/&quot;</span>;<br>        &#125;<br>        <span class="hljs-attribute">if</span> (<span class="hljs-variable">$request_uri</span> <span class="hljs-regexp">~* ^\/((http|https)://(www.)?(\w+(\.)?)+)(.+)\?(.+)$)</span> &#123;<br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host3</span> <span class="hljs-variable">$6</span>;<br>        &#125;<br>        <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host2</span> <span class="hljs-string">&quot;www.baidu.com&quot;</span>;<br><br>        <span class="hljs-attribute">if</span> (<span class="hljs-variable">$request_uri</span> <span class="hljs-regexp">~* ^\/((http|https)://)((www.)?(\w+(\.)?)+)(.*?)$)</span> &#123;<br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host2</span> <span class="hljs-variable">$3</span>;<br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host5</span> <span class="hljs-variable">$1</span>;<br>        &#125;<br>        <span class="hljs-attribute">if</span> (<span class="hljs-variable">$request_uri</span> <span class="hljs-regexp">~* ^\/((http|https)://)((www.)?(\w+(\.)?)+)$)</span> &#123;<br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host2</span> <span class="hljs-variable">$3</span>;<br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$custom_host5</span> <span class="hljs-variable">$1</span>;<br>        &#125;<br>        <span class="hljs-attribute">set</span> <span class="hljs-variable">$current</span> <span class="hljs-string">&quot;http://&quot;</span>;<br>        <span class="hljs-attribute">if</span> (<span class="hljs-variable">$scheme</span> = https) &#123;<br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$current</span> <span class="hljs-string">&quot;https://&quot;</span>;<br>        &#125;<br>        <span class="hljs-section">location</span> / &#123;<br>            <span class="hljs-attribute">rewrite</span> /(.*)$ <span class="hljs-variable">$custom_host3</span> <span class="hljs-literal">break</span>;<br>            <span class="hljs-attribute">proxy_connect_timeout</span> <span class="hljs-number">100s</span>;<br>            <span class="hljs-comment"># proxy_set_header x-forwarded-for $remote_addr;</span><br>            <span class="hljs-comment"># proxy_set_header X-Real-IP $remote_addr;</span><br>            <span class="hljs-comment"># proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br>            <span class="hljs-attribute">set</span> <span class="hljs-variable">$ishttp</span> <span class="hljs-string">&quot;http&quot;</span>;<br>            <span class="hljs-attribute">if</span> (<span class="hljs-variable">$custom_host5</span> = https://) &#123;<br>                <span class="hljs-attribute">set</span> <span class="hljs-variable">$ishttp</span> <span class="hljs-string">&quot;https&quot;</span>;<br>            &#125;<br>            <span class="hljs-attribute">proxy_ssl_server_name</span> <span class="hljs-literal">on</span>;<br>            <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto <span class="hljs-variable">$ishttp</span>;<br>            <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$custom_host2</span>;<br>            <span class="hljs-attribute">proxy_cache_key</span>    <span class="hljs-variable">$host</span><span class="hljs-variable">$uri</span><span class="hljs-variable">$is_args</span><span class="hljs-variable">$args</span>;<br>            <span class="hljs-attribute">proxy_headers_hash_max_size</span> <span class="hljs-number">512</span>;    <br><br>            <span class="hljs-attribute">proxy_headers_hash_bucket_size</span> <span class="hljs-number">128</span>; <br>            <span class="hljs-attribute">proxy_buffer_size</span>  <span class="hljs-number">64k</span>;<br>            <span class="hljs-attribute">proxy_buffers</span>   <span class="hljs-number">32</span> <span class="hljs-number">64k</span>;<br>            <span class="hljs-attribute">proxy_busy_buffers_size</span> <span class="hljs-number">128k</span>;<br>            <span class="hljs-attribute">proxy_set_header</span> Cookie <span class="hljs-variable">$http_cookie</span>;<br>            <span class="hljs-attribute">proxy_cache_methods</span> GET;<br>            <span class="hljs-attribute">proxy_cache_methods</span> POST;<br>            <span class="hljs-attribute">proxy_cache_methods</span> HEAD;<br>            <span class="hljs-attribute">proxy_redirect</span> <span class="hljs-literal">off</span>;<br>            <span class="hljs-attribute">proxy_set_header</span>  Referer           https://<span class="hljs-variable">$custom_host2</span><span class="hljs-variable">$custom_host3</span>;<br>            <span class="hljs-attribute">proxy_set_header</span>  User-Agent        <span class="hljs-variable">$http_user_agent</span>;<br>            <span class="hljs-comment"># 防止谷歌返回压缩的内容，因为压缩的内容无法替换字符串</span><br>            <span class="hljs-attribute">proxy_set_header</span> Accept-Encoding <span class="hljs-string">&quot;&quot;</span>;<br>            <span class="hljs-comment">#proxy_connect_timeout      15000;</span><br>            <span class="hljs-attribute">proxy_send_timeout</span>         <span class="hljs-number">15000</span>;<br>            <span class="hljs-attribute">proxy_read_timeout</span>         <span class="hljs-number">15000</span>;<br>            <span class="hljs-attribute">sub_filter_types</span> *;<br>            <span class="hljs-attribute">proxy_cache_valid</span> <span class="hljs-number">200</span> <span class="hljs-number">304</span> <span class="hljs-number">301</span> <span class="hljs-number">1s</span>;<br>            <span class="hljs-attribute">add_header</span> MJJCDN-Cache <span class="hljs-string">&quot;<span class="hljs-variable">$upstream_cache_status</span>&quot;</span>;<br>            <span class="hljs-comment"># proxy_temp_file_write_size 512000k;</span><br>            <span class="hljs-attribute">resolver</span> <span class="hljs-number">8.8.8.8</span>; <span class="hljs-comment">#改为自己想要的DNS</span><br>            <span class="hljs-attribute">proxy_set_header</span> Accept-Encoding <span class="hljs-string">&quot;&quot;</span>;<br>            <span class="hljs-attribute">sub_filter_types</span> *;<br><br>            <span class="hljs-attribute">sub_filter_once</span> <span class="hljs-literal">off</span>;<br>            <span class="hljs-attribute">proxy_temp_file_write_size</span> <span class="hljs-number">512000k</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&quot;&lt;head&quot;</span> <span class="hljs-string">&#x27;&lt;base href=&quot;<span class="hljs-variable">$current</span><span class="hljs-variable">$host</span>/<span class="hljs-variable">$custom_host</span>/&quot; /&gt;\n&lt;head&#x27;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&#x27;https://&#x27;</span> <span class="hljs-string">&#x27;<span class="hljs-variable">$current</span><span class="hljs-variable">$host</span>/https://&#x27;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&#x27;http://&#x27;</span> <span class="hljs-string">&#x27;<span class="hljs-variable">$current</span><span class="hljs-variable">$host</span>/https://&#x27;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&quot;\&quot;//&quot;</span> <span class="hljs-string">&#x27;&quot;<span class="hljs-variable">$current</span><span class="hljs-variable">$host</span>/https://&#x27;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&#x27;&quot;/&#x27;</span> <span class="hljs-string">&#x27;&quot;<span class="hljs-variable">$current</span><span class="hljs-variable">$host</span>/<span class="hljs-variable">$custom_host</span>/&#x27;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&quot;&#x27;//&quot;</span> <span class="hljs-string">&quot;&#x27;<span class="hljs-variable">$current</span><span class="hljs-variable">$host</span>/https://&quot;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&quot;&#x27;/&quot;</span> <span class="hljs-string">&quot;&#x27;<span class="hljs-variable">$current</span><span class="hljs-variable">$host</span>/<span class="hljs-variable">$custom_host</span>/&quot;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&#x27;&quot;/search&#x27;</span> <span class="hljs-string">&#x27;&quot;search&#x27;</span>;<br>            <br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&#x27;&quot;/images&#x27;</span> <span class="hljs-string">&#x27;&quot;images&#x27;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&#x27;, /images&#x27;</span> <span class="hljs-string">&#x27;, images&#x27;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&quot;http://<span class="hljs-variable">$custom_host2</span>&quot;</span> <span class="hljs-string">&quot;<span class="hljs-variable">$current</span><span class="hljs-variable">$host</span>/<span class="hljs-variable">$custom_host</span>&quot;</span>;<br>            <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&quot;https://<span class="hljs-variable">$custom_host2</span>&quot;</span> <span class="hljs-string">&quot;<span class="hljs-variable">$current</span><span class="hljs-variable">$host</span>/<span class="hljs-variable">$custom_host</span>&quot;</span>;<br>            <span class="hljs-attribute">proxy_pass</span> <span class="hljs-variable">$custom_host</span>;<br><br>            <span class="hljs-comment"># # set $request_uri &quot;qqqq&quot;;</span><br>            <span class="hljs-comment"># add_header Content-Type &quot;text/plain;charset=utf-8&quot;;</span><br>            <span class="hljs-comment"># return 200 &quot;Your IP Address:$custom_host2&lt;/br&gt;$request_uri&quot;;</span><br>        &#125;<br><br>&#125;<br></code></pre></td></tr></table></figure><p>这个网站可能有点要注意安全性，建议给网站加个密码<a href="https://shyi.org/posts/16650/#nginx%E7%94%9F%E6%88%90%E8%AE%BF%E9%97%AE%E5%AF%86%E7%A0%81%EF%BC%9A">点击访问</a></p><h3 id="使用教程："><a href="#使用教程：" class="headerlink" title="使用教程："></a>使用教程：</h3><p>默认打开反代是百度主页，</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">aa.com <span class="hljs-comment">#默认是百度</span><br>aa.com/https://www.google.com <span class="hljs-comment">#则打开的是Google</span><br></code></pre></td></tr></table></figure><p>引用：</p><p><a href="https://hostloc.com/thread-1011338-1-1.html">分享一个nginx任意反向代理配置，支持 google、等</a></p><p><a href="https://github.com/linwoodpendleton/nginx_proxy_conf">GitHub - linwoodpendleton&#x2F;nginx_proxy_conf: nginx任意反向代理配置(支持github,ip138,google)</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Nginx实现反代任意网站：&quot;&gt;&lt;a href=&quot;#Nginx实现反代任意网站：&quot; class=&quot;headerlink&quot; title=&quot;Nginx实现反代任意网站：&quot;&gt;&lt;/a&gt;Nginx实现反代任意网站：&lt;/h2&gt;&lt;figure class=&quot;highlight </summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Nginx" scheme="https://shyi.org/tags/Nginx/"/>
    
  </entry>
  
  <entry>
    <title>Clash系使用</title>
    <link href="https://shyi.org/posts/9859/"/>
    <id>https://shyi.org/posts/9859/</id>
    <published>2022-05-01T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.945Z</updated>
    
    <content type="html"><![CDATA[<p>由于CFW不再更新，所以本文新增Clash Verge的使用</p><h2 id="Clash-Verge"><a href="#Clash-Verge" class="headerlink" title="Clash Verge"></a>Clash Verge</h2><p>Clash Verge直接使用机场链接可能加载不成功，所以需要订阅转换，推荐：<a href="https://sub.v1.mk/">https://sub.v1.mk/</a></p><p>下载Clash Verge：<a href="https://github.com/zzzgydi/clash-verge/releases/">github</a> , <a href="https://www.mediafire.com/folder/mn8rn7ia85hpt/Clash_Verge">mediafire</a>, <a href="https://mega.nz/folder/07VmWLyZ#7ydAKwslBX57dSZIvZtG1w">mega</a></p><ol><li><p>设置 -&gt; 修改Clash内核为<strong>Clash Meta</strong></p></li><li><p>点击配置 -&gt; 新建一个Remote配置和Merge配置（Remote用来更新机场订阅，Merge用来添加代理规则，建议在prepend-rules内添加规则，遵循yaml格式）</p></li><li><p>点击配置界面右上角的<strong>刷新</strong>和<strong>重新激活按钮</strong></p></li><li><p>点击代理界面右上角的<strong>规则</strong>，检查每个代理组是不是都是正常的（比如某个该走代理的组选了DIRECT）</p></li><li><p>点击代理界面右上角的<strong>全局</strong>，然后勾选为<strong>节点选择</strong>或者<strong>自动选择</strong>（默认勾选的是DIRECT会导致访问一些需要代理的网站走直连）</p></li><li><p>打开设置或者右键托盘的<strong>系统代理</strong>即可使用。</p></li></ol><figure class="highlight tex"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs tex">prepend-rules：类型和clash rules配置一致，内容合并到rules 前<br>append-rules：类型和clash rules配置一致，内容合并到rules 后<br>prepend-proxies：类型和clash proxies配置一致，内容合并到proxies 前<br>append-proxies：类型和clash proxies配置一致，内容合并到proxies 后<br>prepend-proxy-groups：类型和clash proxy-groups配置一致，内容合并到proxy-groups 前<br>append-proxy-groups：类型和clash proxy-groups配置一致，内容合并到proxy-groups 后<br>其他clash的字段：5个默认使用的字段（rules, proxies, proxy-groups, proxy-providers, rule-providers）以及其他clash/clash meta支持的字段，直接设置这些字段将直接覆盖profile对应字段的内容。<br>注意：需要使用其他字段时，例如dns,tun等，需要在设置页 - Clash Field(Clash 字段)里勾选对应的字段，不勾选的字段将被忽略。<br></code></pre></td></tr></table></figure><h2 id="Clash-for-windows"><a href="#Clash-for-windows" class="headerlink" title="Clash for windows"></a>Clash for windows</h2><h3 id="Profiles"><a href="#Profiles" class="headerlink" title="Profiles"></a>Profiles</h3><p>在clash的Profiles界面里你可以下载更新你的配置文件，我们右键edit可以看到配置文件</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">mixed-port:</span> <span class="hljs-number">7890</span><br><span class="hljs-attr">allow-lan:</span> <span class="hljs-literal">true</span><br><span class="hljs-attr">bind-address:</span> <span class="hljs-string">&quot;*&quot;</span><br><span class="hljs-attr">mode:</span> <span class="hljs-string">rule</span><br><span class="hljs-attr">log-level:</span> <span class="hljs-string">info</span><br><span class="hljs-attr">external-controller:</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span><span class="hljs-string">:9090</span><br><span class="hljs-attr">dns:</span><br><span class="hljs-attr">proxies:</span><br><span class="hljs-attr">proxy-groups:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">自动选择</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">url-test</span><br>    <span class="hljs-attr">proxies:</span><br>     <span class="hljs-comment"># 你想要自动选择的线路，提供方设置</span><br>    <span class="hljs-attr">url:</span> <span class="hljs-string">xx</span><br>    <span class="hljs-attr">interval:</span> <span class="hljs-number">86400</span><br><span class="hljs-comment"># 以上是你购买VPN的节点信息，无需修改（更新配置文件后会变回）</span><br><span class="hljs-attr">rules:</span><br>  <span class="hljs-comment"># 我们修改的规则会被追加到这里。</span><br>  <br>  <span class="hljs-bullet">-</span> <span class="hljs-string">DOMAIN-SUFFIX,local,DIRECT</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">IP-CIDR,127.0.0.0/8,DIRECT</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">IP-CIDR,172.16.0.0/12,DIRECT</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">IP-CIDR,192.168.0.0/16,DIRECT</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">IP-CIDR,10.0.0.0/8,DIRECT</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">IP-CIDR,17.0.0.0/8,DIRECT</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">IP-CIDR,100.64.0.0/10,DIRECT</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">IP-CIDR,224.0.0.0/4,DIRECT</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">IP-CIDR6,fe80::/10,DIRECT,no-resolve</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">GEOIP,CN,DIRECT</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-string">MATCH,GLOBAL</span> <span class="hljs-comment">#当上面所有规则都未命中那么就会命中这条</span><br><span class="hljs-attr">proxy-providers:</span> &#123;&#125;<br><span class="hljs-attr">rule-providers:</span> &#123;&#125;<br><br></code></pre></td></tr></table></figure><h3 id="下载地址"><a href="#下载地址" class="headerlink" title="下载地址"></a>下载地址</h3><h6 id="a-中文："><a href="#a-中文：" class="headerlink" title="a. 中文："></a>a. 中文：</h6><p><a href="https://0122.lanzout.com/b03j2mnrc">蓝奏</a>密码:0000</p><p><a href="https://github.com/ender-zhao/Clash-for-Windows_Chinese/releases">github</a></p><p>加速下载地址1：<a href="https://ghproxy.com/https://github.com/ender-zhao/Clash-for-Windows_Chinese/releases/download/CFW-V0.19.22_CN/Clash.for.Windows.Setup.0.19.22.exe">exe</a><a href="https://ghproxy.com/https://github.com/ender-zhao/Clash-for-Windows_Chinese/releases/download/CFW-V0.19.22_CN/Clash.for.Windows-0.19.22-win.7z">7z</a></p><p>加速下载地址2：<a href="https://gh.shyi.io/https://github.com/ender-zhao/Clash-for-Windows_Chinese/releases/download/CFW-V0.19.22_CN/Clash.for.Windows.Setup.0.19.22.exe">exe</a><a href="https://gh.shyi.io/https://github.com/ender-zhao/Clash-for-Windows_Chinese/releases/download/CFW-V0.19.22_CN/Clash.for.Windows-0.19.22-win.7z">7z</a></p><h6 id="b-英文："><a href="#b-英文：" class="headerlink" title="b. 英文："></a>b. 英文：</h6><p><a href="https://0122.lanzout.com/b03j2mnxi">蓝奏</a>密码:0000</p><p><a href="https://github.com/Fndroid/clash_for_windows_pkg/releases">github</a></p><p>加速下载地址1：<a href="https://ghproxy.com/https://github.com/Fndroid/clash_for_windows_pkg/releases/download/0.19.22/Clash.for.Windows.Setup.0.19.22.exe">exe</a><a href="https://ghproxy.com/https://github.com/Fndroid/clash_for_windows_pkg/releases/download/0.19.22/Clash.for.Windows-0.19.22-win.7z">7z</a></p><p>加速下载地址1：<a href="https://gh.shyi.io/https://github.com/Fndroid/clash_for_windows_pkg/releases/download/0.19.22/Clash.for.Windows.Setup.0.19.22.exe">exe</a><a href="https://gh.shyi.io/https://github.com/Fndroid/clash_for_windows_pkg/releases/download/0.19.22/Clash.for.Windows-0.19.22-win.7z">7z</a></p><h3 id="自定义规则"><a href="#自定义规则" class="headerlink" title="自定义规则"></a>自定义规则</h3><p>Setting，找到Profiles（配置文件下）的Parsers </p><p><strong>更改完Parsers文件后要去Profiles里刷新配置文件</strong></p><p>当clash命中某条rule时，那么就不会继续向下匹配，就直接使用当前规则。我们写的规则默认加到vpn提供方的规则之前，所以对于一些网站的放行与否取决于我们。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">parsers:</span> <br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">url:</span> <span class="hljs-string">https://xxx.com/psaakey=xxx</span> <span class="hljs-comment">#指定单一的url追加rules</span><br>  <span class="hljs-comment">#- reg: ^.*$ # 匹配全部url，即给所有的配置文件追加rules</span><br>  <span class="hljs-comment">#- reg: (xxx.com|aaa.com) # 匹配指定的url追加rules</span><br>  <span class="hljs-comment"># 上面只需要打开其一</span><br>    <span class="hljs-attr">yaml:</span><br>      <span class="hljs-attr">prepend-rules:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">DOMAIN-SUFFIX,google.com,GLOBAL</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">DOMAIN-SUFFIX,baidu.com,DIRECT</span><br>        <span class="hljs-comment"># 这里填入自定义规则</span><br></code></pre></td></tr></table></figure><blockquote><p>DOMAIN-SUFFIX：域名后缀匹配<br>DOMAIN：域名匹配<br>DOMAIN-KEYWORD：域名关键字匹配<br>IP-CIDR：IP段匹配 ,no-resolve<br>SRC-IP-CIDR：源IP段匹配<br>GEOIP：GEOIP数据库（国家代码）匹配<br>DST-PORT：目标端口匹配<br>SRC-PORT：源端口匹配<br>PROCESS-NAME：源进程名匹配<br>RULE-SET：Rule Provider规则匹配</p><p>DIRECT：不走代理 </p><p>GLOBAL：全局代理</p><p>REJECT：禁止连接</p></blockquote><h4 id="参数说明"><a href="#参数说明" class="headerlink" title="参数说明"></a>参数说明</h4><table><thead><tr><th align="left">键</th><th>值类型</th><th>操作</th></tr></thead><tbody><tr><td align="left">append-rules</td><td>数组</td><td>数组合并至原配置<code>rules</code>数组<strong>后</strong></td></tr><tr><td align="left">prepend-rules</td><td>数组</td><td>数组合并至原配置<code>rules</code>数组<strong>前</strong></td></tr><tr><td align="left">append-proxies</td><td>数组</td><td>数组合并至原配置<code>proxies</code>数组<strong>后</strong></td></tr><tr><td align="left">prepend-proxies</td><td>数组</td><td>数组合并至原配置<code>proxies</code>数组<strong>前</strong></td></tr><tr><td align="left">append-proxy-groups</td><td>数组</td><td>数组合并至原配置<code>proxy-groups</code>数组<strong>后</strong></td></tr><tr><td align="left">prepend-proxy-groups</td><td>数组</td><td>数组合并至原配置<code>proxy-groups</code>数组<strong>前</strong></td></tr><tr><td align="left">mix-proxy-providers</td><td>对象</td><td>对象合并至原配置<code>proxy-providers</code>中</td></tr><tr><td align="left">mix-rule-providers</td><td>对象</td><td>对象合并至原配置<code>rule-providers</code>中</td></tr><tr><td align="left">mix-object</td><td>对象</td><td>对象合并至原配置最外层中</td></tr><tr><td align="left">commands</td><td>数组</td><td>在上面操作完成后执行简单命令操作配置文件</td></tr></tbody></table><p>参考与引用：</p><p><a href="https://yattazen.com/tutorial/clash-custom-config.html">简易教程 | Clash | 自定义在线分流规则策略组 - Yatta漫游小镇 (yattazen.com)</a></p><p><a href="https://tomorrow505.xyz/clash%E9%85%8D%E7%BD%AE%E8%87%AA%E5%AE%9A%E4%B9%89%E8%A7%84%E5%88%99/">clash配置自定义规则 - Tomorrow’s blog (tomorrow505.xyz)</a></p><p><a href="https://www.bilibili.com/read/cv10989428">【Clash】使用配置文件预处理防止自定义规则被覆盖 - 哔哩哔哩 (bilibili.com)</a></p><p><a href="https://github.com/Loyalsoldier/clash-rules/issues/27">提供一种parser可以自动替换订阅的规则为自定义规则 · Issue #27 · Loyalsoldier&#x2F;clash-rules (github.com)</a></p><p><a href="https://docs.cfw.lbyczf.com/contents/parser.html">CFW配置文件预处理</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;由于CFW不再更新，所以本文新增Clash Verge的使用&lt;/p&gt;
&lt;h2 id=&quot;Clash-Verge&quot;&gt;&lt;a href=&quot;#Clash-Verge&quot; class=&quot;headerlink&quot; title=&quot;Clash Verge&quot;&gt;&lt;/a&gt;Clash Verge&lt;/h2</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="clash" scheme="https://shyi.org/tags/clash/"/>
    
    <category term="CFW" scheme="https://shyi.org/tags/CFW/"/>
    
    <category term="Clash Verge" scheme="https://shyi.org/tags/Clash-Verge/"/>
    
  </entry>
  
  <entry>
    <title>Nginx基本配置</title>
    <link href="https://shyi.org/posts/16650/"/>
    <id>https://shyi.org/posts/16650/</id>
    <published>2022-04-26T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.946Z</updated>
    
    <content type="html"><![CDATA[<h3 id="Nginx常用命令"><a href="#Nginx常用命令" class="headerlink" title="Nginx常用命令"></a>Nginx常用命令</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">nginx -t <span class="hljs-comment">#检查配置文件的语法的正确性</span><br>systemctl restart nginx <span class="hljs-comment">#重启服务</span><br>nginx -s reload <span class="hljs-comment">#因改变了Nginx相关配置，需要重新加载配置而重载。</span><br>systemctl <span class="hljs-built_in">enable</span> nginx <span class="hljs-comment">#开启自启</span><br></code></pre></td></tr></table></figure><h3 id="安装nginx"><a href="#安装nginx" class="headerlink" title="安装nginx"></a>安装nginx</h3><h4 id="Debian-Ubuntu"><a href="#Debian-Ubuntu" class="headerlink" title="Debian&#x2F;Ubuntu:"></a>Debian&#x2F;Ubuntu:</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt install nginx -y<br></code></pre></td></tr></table></figure><h4 id="Centos"><a href="#Centos" class="headerlink" title="Centos:"></a>Centos:</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum -y install epel-release <span class="hljs-comment">#安装EPEL源</span><br>yum install nginx<br></code></pre></td></tr></table></figure><p>卸载nginx：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt autoremove nginx <span class="hljs-comment">#卸载nginx</span><br></code></pre></td></tr></table></figure><p>卸载nginx：(centos)</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#先停止nginx</span><br>service nginx stop<br><span class="hljs-comment">#关闭自启动</span><br>chkconfig nginx off<br><span class="hljs-comment">#删除相关文件</span><br><span class="hljs-built_in">rm</span> -rf /usr/sbin/nginx<br><span class="hljs-built_in">rm</span> -rf /etc/nginx<br><span class="hljs-built_in">rm</span> -rf /etc/init.d/nginx<br><span class="hljs-comment">#卸载</span><br>yum remove nginx<br><span class="hljs-comment">#检查是否还有残余文件，有的话执行步骤3继续删除</span><br>whereis nginx<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl start nginx <span class="hljs-comment">#启动nginx</span><br>systemctl status nginx <span class="hljs-comment">#检查服务状态</span><br>systemctl <span class="hljs-built_in">enable</span> nginx <span class="hljs-comment">#开启自启</span><br>systemctl <span class="hljs-built_in">disable</span> nginx <span class="hljs-comment">#关闭自启</span><br>systemctl stop nginx <span class="hljs-comment">#停止nginx</span><br>systemctl restart nginx <span class="hljs-comment">#重启服务</span><br>systemctl reload nginx <span class="hljs-comment">#重载服务</span><br>nginx -s stop  <span class="hljs-comment">#快速关闭Nginx，可能不保存相关信息，并迅速终止web服务。</span><br>nginx -s quit <span class="hljs-comment">#平稳关闭Nginx，保存相关信息，有安排的结束web服务。</span><br>nginx -s reload <span class="hljs-comment">#因改变了Nginx相关配置，需要重新加载配置而重载。</span><br>nginx -t <span class="hljs-comment">#不运行，而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性，并尝试打开配置文件中所引用到的文件。</span><br>nginx -v  <span class="hljs-comment">#显示 nginx 的版本。</span><br>nginx -V  <span class="hljs-comment">#显示 nginx 的版本，编译器版本和配置参数。</span><br></code></pre></td></tr></table></figure><h4 id="编译nginx-moudles"><a href="#编译nginx-moudles" class="headerlink" title="编译nginx moudles"></a>编译nginx moudles</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 首先去官网下载 http://nginx.org</span><br>wget http://nginx.org/download/nginx-1.22.0.tar.gz<br>tar zxvf nginx-1.22.0.tar.gz<br><span class="hljs-built_in">cd</span> nginx-1.22.0<br><span class="hljs-comment"># 输入你想要添加的module</span><br>./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-openssl-opt=<span class="hljs-string">&#x27;enable-weak-ssl-ciphers&#x27;</span> --with-ld-opt=<span class="hljs-string">&#x27;-ljemalloc&#x27;</span> --with-http_realip_module<br><span class="hljs-comment"># make install会覆盖安装</span><br>make <span class="hljs-comment"># make后会在objs下多出一个nginx</span><br><span class="hljs-comment"># 备份旧的nginx程序，路径可能不同，lnmp安装的路径是这样的，apt安装的路径应该是/usr/sbin/nginx</span><br><span class="hljs-built_in">cp</span> /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak<br><span class="hljs-comment"># 新的nginx覆盖旧的</span><br><span class="hljs-built_in">cp</span> objs/nginx /usr/local/nginx/sbin/nginx<br><span class="hljs-comment"># 执行不成功可以使用 </span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> -rfp objs/nginx /usr/local/nginx/sbin/nginx<br>nginx -V <span class="hljs-comment"># 检测一下是否编译成功</span><br></code></pre></td></tr></table></figure><p>编译安装nginx</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs bash">./configure --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-pcre --with-http_ssl_module --with-debug --conf-path=/etc/nginx/nginx.conf \<br>--conf-path=/etc/nginx/nginx.conf \<br>--sbin-path=/usr/sbin/nginx \<br>--pid-path=/var/log/nginx/nginx.pid \<br>--error-log-path=/var/log/nginx/error.log \<br>--http-log-path=/var/log/nginx/access.log \<br>--modules-path=/usr/lib/nginx/modules \<br><br><span class="hljs-comment"># 或者</span><br><span class="hljs-comment"># 路径什么的自己记住就可以了，一般放在用户目录下</span><br>./configure --prefix=/usr/local/nginx<br><br><span class="hljs-comment"># 编译安装nginx</span><br>make &amp;&amp; make install<br><span class="hljs-comment"># /usr/bin和/usr/sbin是系统预装的可执行程序，会随着系统升级而改变</span><br><span class="hljs-comment"># /usr/local/bin目录是给用户放置自己的可执行程序的地方，推荐放在这里，不会被系统升级而覆盖同名文件。</span><br><span class="hljs-comment"># 定义一个软连接，类似于快捷方式。</span><br><span class="hljs-built_in">ln</span> -s /usr/sbin/nginx /usr/local/bin/nginx<br><span class="hljs-comment"># 如果/usr/local/bin未加入环境变量，则执行</span><br>PATH=<span class="hljs-variable">$PATH</span>:/usr/local/bin<br></code></pre></td></tr></table></figure><p>可能会遇到的问题</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># nginx: [error] open() &quot;/usr/local/nginx/logs/nginx.pid&quot; failed (2: No such file or directory)错误</span><br>/usr/sbin/nginx -c /etc/nginx/nginx.conf <span class="hljs-comment"># 使用nginx -c的参数指定nginx.conf文件的位置</span><br></code></pre></td></tr></table></figure><h3 id="配置文件"><a href="#配置文件" class="headerlink" title="配置文件"></a>配置文件</h3><p>nginx目录</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs bash">|-- conf.d<br>|   |-- demo.com.conf <span class="hljs-comment">#个人网站配置</span><br>|-- fastcgi.conf<br>|-- fastcgi_params<br>|-- koi-utf<br>|-- koi-win<br>|-- mime.types<br>|-- modules-available<br>|-- modules-enabled<br>|-- nginx.conf  <span class="hljs-comment">#nginx主配置文件，不建议在里面添加网站。</span><br>|-- proxy_params<br>|-- scgi_params<br>|-- sites-available<br>|   `-- default<br>|-- sites-enabled<br>|   `-- default -&gt; /etc/nginx/sites-available/default<br>|-- snippets<br>|   |-- fastcgi-php.conf<br>|   `-- snakeoil.conf<br>|-- uwsgi_params<br>`-- win-utf<br></code></pre></td></tr></table></figure><p>一般的网站配置文件的命名都是网站名.conf然后放入到&#x2F;etc&#x2F;nginx&#x2F;conf.d&#x2F;下，其实不然，因为在cat &#x2F;etc&#x2F;nginx&#x2F;nginx.conf 发现有这样一句话 include &#x2F;etc&#x2F;nginx&#x2F;conf.d&#x2F;*.conf;</p><p>其实完全可以创建新的文件夹，只需要在nginx.conf里将文件夹路径添加进去就可以正常使用。</p><p><strong>nginx.conf只对括号敏感，不需要遵守yaml的缩进。</strong></p><p>nginx.conf 主文件详解 <a href="https://www.runoob.com/w3cnote/nginx-install-and-config.html">点击</a></p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">user</span>  www www;<br><span class="hljs-attribute">worker_processes</span>  <span class="hljs-number">2</span>;<br><span class="hljs-attribute">error_log</span>  logs/<span class="hljs-literal">error</span>.log;<br><span class="hljs-comment">#error_log  logs/error.log  notice;</span><br><span class="hljs-comment">#error_log  logs/error.log  info;</span><br><span class="hljs-attribute">pid</span>        logs/nginx.pid;<br><span class="hljs-section">events</span> &#123;<br>    <span class="hljs-attribute">use</span> <span class="hljs-literal">epoll</span>;<br>    <span class="hljs-attribute">worker_connections</span>  <span class="hljs-number">2048</span>;<br>&#125;<br><br><span class="hljs-section">http</span> &#123;<br>  <span class="hljs-comment"># gzip压缩功能设置</span><br>    <span class="hljs-attribute">gzip</span> <span class="hljs-literal">on</span>;<br>    <span class="hljs-attribute">gzip_min_length</span> <span class="hljs-number">1k</span>;<br>    <span class="hljs-attribute">gzip_buffers</span>    <span class="hljs-number">4</span> <span class="hljs-number">16k</span>;<br>    <span class="hljs-attribute">gzip_http_version</span> <span class="hljs-number">1</span>.<span class="hljs-number">0</span>;<br>    <span class="hljs-attribute">gzip_comp_level</span> <span class="hljs-number">6</span>;<br>    <span class="hljs-attribute">gzip_types</span> text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;<br>    <span class="hljs-attribute">gzip_vary</span> <span class="hljs-literal">on</span>;<br>    <br>    <span class="hljs-comment">#获取用户真实IP，并赋值给变量$clientRealIP</span><br><span class="hljs-attribute">map</span> <span class="hljs-variable">$http_x_forwarded_for</span>  <span class="hljs-variable">$clientRealIp</span> <br>    &#123;<br>        &quot;&quot;      $remote_addr;<br>        ~^(?P&lt;firstAddr&gt;[0-z\.]+),?.*$  $firstAddr;<br>    &#125;<br>    <span class="hljs-comment">#通过 map 指令，我们为 nginx 创建了一个变量 $clientRealIp ，这个就是原始用户的真实 IP 地址，不论用户是直接访问，还是通过一串 CDN 之后的访问，我们都能取得正确的原始IP地址。</span><br><br>    <span class="hljs-comment">#http_proxy 设置</span><br>    <span class="hljs-attribute">client_max_body_size</span>   <span class="hljs-number">10m</span>;<br>    <span class="hljs-attribute">client_body_buffer_size</span>   <span class="hljs-number">128k</span>;<br>    <span class="hljs-attribute">proxy_connect_timeout</span>   <span class="hljs-number">75</span>;<br>    <span class="hljs-attribute">proxy_send_timeout</span>   <span class="hljs-number">75</span>;<br>    <span class="hljs-attribute">proxy_read_timeout</span>   <span class="hljs-number">75</span>;<br>    <span class="hljs-attribute">proxy_buffer_size</span>   <span class="hljs-number">4k</span>;<br>    <span class="hljs-attribute">proxy_buffers</span>   <span class="hljs-number">4</span> <span class="hljs-number">32k</span>;<br>    <span class="hljs-attribute">proxy_busy_buffers_size</span>   <span class="hljs-number">64k</span>;<br>    <span class="hljs-attribute">proxy_temp_file_write_size</span>  <span class="hljs-number">64k</span>;<br>    <span class="hljs-attribute">proxy_temp_path</span>   /usr/local/nginx/proxy_temp <span class="hljs-number">1</span> <span class="hljs-number">2</span>;<br>  <span class="hljs-comment"># 设定负载均衡后台服务器列表 </span><br>    <span class="hljs-section">upstream</span>  backend  &#123; <br>              <span class="hljs-comment">#ip_hash; </span><br>              <span class="hljs-attribute">server</span>   <span class="hljs-number">192.168.10.100:8080</span> max_fails=<span class="hljs-number">2</span> fail_timeout=<span class="hljs-number">30s</span> ;  <br>              <span class="hljs-attribute">server</span>   <span class="hljs-number">192.168.10.101:8080</span> max_fails=<span class="hljs-number">2</span> fail_timeout=<span class="hljs-number">30s</span> ;  <br>    &#125;<br>    <br>  <span class="hljs-comment"># 很重要的虚拟主机配置</span><br>     <span class="hljs-section">server</span> &#123;<br>        <span class="hljs-attribute">listen</span>       <span class="hljs-number">80</span>;<br>        <span class="hljs-attribute">server_name</span>  itoatest.example.com;<br>        <span class="hljs-attribute">root</span>   /apps/oaapp;<br>        <span class="hljs-attribute">charset</span> utf-<span class="hljs-number">8</span>;<br>        <span class="hljs-attribute">access_log</span>  logs/host.access.log  main;<br>        <br>        <span class="hljs-comment">#对 / 所有做负载均衡+反向代理</span><br>        <span class="hljs-section">location</span> / &#123;<br>            <span class="hljs-attribute">root</span>   /apps/oaapp;<br>            <span class="hljs-attribute">index</span>  index.jsp index.html index.htm;<br>            <span class="hljs-attribute">proxy_pass</span>        http://backend;  <br>            <span class="hljs-attribute">proxy_redirect</span> <span class="hljs-literal">off</span>;<br>            <span class="hljs-comment"># 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP</span><br>            <span class="hljs-attribute">proxy_set_header</span>  Host  <span class="hljs-variable">$host</span>;<br>            <span class="hljs-attribute">proxy_set_header</span>  X-Real-IP  <span class="hljs-variable">$remote_addr</span>;  <br>            <span class="hljs-attribute">proxy_set_header</span>  X-Forwarded-For  <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>            <span class="hljs-attribute">proxy_next_upstream</span> <span class="hljs-literal">error</span> timeout invalid_header http_500 http_502 http_503 http_504;<br><br>        &#125;<br>        <span class="hljs-comment">#静态文件，nginx自己处理，不去backend请求tomcat</span><br>        <span class="hljs-section">location</span>  <span class="hljs-regexp">~* /download/</span> &#123;  <br>            <span class="hljs-attribute">root</span> /apps/oa/fs;  <br><br>        &#125;<br>        <br>        <span class="hljs-section">location</span> <span class="hljs-regexp">~ .*/.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$</span> &#123;   <br>            <span class="hljs-attribute">root</span> /apps/oaapp;   <br>            <span class="hljs-attribute">expires</span>      <span class="hljs-number">7d</span>; <br>        &#125;<br>        <br>        <span class="hljs-section">location</span> /nginx_status &#123;<br>            <span class="hljs-attribute">stub_status</span> <span class="hljs-literal">on</span>;<br>            <span class="hljs-attribute">access_log</span> <span class="hljs-literal">off</span>;<br>            <span class="hljs-attribute">allow</span> <span class="hljs-number">192.168.10.0</span>/<span class="hljs-number">24</span>;<br>            <span class="hljs-attribute">deny</span> all;<br>        &#125;<br>        <br>        <span class="hljs-section">location</span> <span class="hljs-regexp">~ ^/(WEB-INF)/</span> &#123;   <br>            <span class="hljs-attribute">deny</span> all;   <br>        &#125;<br>        <br>        <span class="hljs-comment">#error_page  404              /404.html;</span><br>        <span class="hljs-comment"># redirect server error pages to the static page /50x.html</span><br>        <span class="hljs-comment">#</span><br>        <span class="hljs-attribute">error_page</span>   <span class="hljs-number">500</span> <span class="hljs-number">502</span> <span class="hljs-number">503</span> <span class="hljs-number">504</span>  /50x.html;<br>        <br>        <span class="hljs-section">location</span> = /50x.html &#123;<br>            <span class="hljs-attribute">root</span>   html;<br>        &#125;<br>    &#125;<br>    <span class="hljs-comment">#其它虚拟主机，server 指令开始</span><br>    <span class="hljs-attribute">include</span> /etc/nginx/conf.d/<span class="hljs-regexp">*.conf</span>;<br>        <br>    <span class="hljs-comment">#我们写的server&#123;&#125;本质是写在http&#123;&#125;中的，但是我们一般不在nginx.conf中更改，</span><br>    <span class="hljs-comment">#而是使用include一个新的文件夹，这样方便。因为我们更改一般都是清空后粘贴的，所以如果写在nginx.conf中更改会变得比较麻烦。</span><br>    <span class="hljs-comment">#location就是匹配url后面的目录，nginx可以直接处理静态文件。</span><br>     <br>&#125;<br></code></pre></td></tr></table></figure><figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs 1c">location指令说明<br>该指令用于匹配URL。·语法如下<span class="hljs-punctuation">:</span><br><br>location [ <span class="hljs-punctuation">=</span> <span class="hljs-string">| ~ | ~*| ^~] uri &#123;</span><br>&#125;<br><br><span class="hljs-number">1</span>、<span class="hljs-punctuation">=</span> <span class="hljs-punctuation">:</span>用于不含正则表达式的uri前，要求请求字符串与uri.严格匹配，如果匹配成功，就停止继续向下搜索并立即处理该请求。<br><span class="hljs-number">2</span>、<span class="hljs-symbol">~</span>:用于表示uri包含正则表达式，并且区分大小写。<br><span class="hljs-number">3</span>、<span class="hljs-symbol">~*用于表示 uri包含正则表达式，并且不区分大小写。</span><br><span class="hljs-symbol">4、^~</span>:用于不含正则表达式的uri前，要求 Nginx服务器找到标识uri和请求字<br></code></pre></td></tr></table></figure><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">location</span>  = /<br>&#123;<br>  <span class="hljs-comment"># 精确匹配 / ，主机名后面不能带任何字符串</span><br>  [ <span class="hljs-attribute">configuration</span> A ]<br>&#125;<br><br>location  /<br>&#123;<br>  <span class="hljs-comment"># 因为所有的地址都以 / 开头，所以这条规则将匹配到所有请求</span><br>  <span class="hljs-comment"># 但是正则和最长字符串会优先匹配</span><br>  [ <span class="hljs-attribute">configuration</span> B ]<br>&#125;<br><br>location /documents/<br>&#123;  <br>  <span class="hljs-comment"># 匹配任何以 /documents/ 开头的地址，匹配符合以后，还要继续往下搜索</span><br>  <span class="hljs-comment"># 只有后面的正则表达式没有匹配到时，这一条才会采用这一条</span><br>  [ <span class="hljs-attribute">configuration</span> C ]<br>&#125;<br>location <span class="hljs-regexp">~ /documents/Abc</span><br>&#123;  <br>  <span class="hljs-comment"># 匹配任何以 /documents/Abc 开头的地址，匹配符合以后，还要继续往下搜索，只有后面的正则表达式没有匹配到时，这一条才会采用这一条</span><br>  [ <span class="hljs-attribute">configuration</span> CC ]<br>&#125;<br><br>location<span class="hljs-regexp"> ^~</span> /images/<br>&#123;  <span class="hljs-comment"># 匹配任何以 /images/ 开头的地址，匹配符合以后，停止往下搜索正则，采用这一条。</span><br>  [ <span class="hljs-attribute">configuration</span> D ]<br>&#125;<br><br>location <span class="hljs-regexp">~* \.(gif|jpg|jpeg)$</span><br>&#123;  <br>  <span class="hljs-comment"># 匹配所有以 gif,jpg或jpeg 结尾的请求</span><br>  <span class="hljs-comment"># 然而，所有请求 /images/ 下的图片会被 config D 处理，因为 ^~ 到达不了这一条正则</span><br>  [ <span class="hljs-attribute">configuration</span> E ]<br>&#125;<br><br>location /images/<br>&#123;  <br>   <span class="hljs-comment"># 字符匹配到 /images/，继续往下，会发现 ^~ 存在</span><br>  [ <span class="hljs-attribute">configuration</span> F ]<br>&#125;<br><br>location /images/abc<br>&#123;  <br>  <span class="hljs-comment"># 最长字符匹配到 /images/abc，继续往下，会发现 ^~ 存在</span><br>  <span class="hljs-comment"># F与G的放置顺序是没有关系的</span><br>  [ <span class="hljs-attribute">configuration</span> G ]<br>&#125;<br><br>location <span class="hljs-regexp">~ /images/abc/</span><br>&#123;  <br>  <span class="hljs-comment"># 只有去掉 config D 才有效：先最长匹配 config G 开头的地址，继续往下搜索，匹配到这一条正则，采用</span><br>  <span class="hljs-comment"># 因为都是正则匹配，优先级一样，选择最上面的</span><br>    [ <span class="hljs-attribute">configuration</span> H ]<br>&#125;<br><br><span class="hljs-comment"># location ~* /js/.*/\.js</span><br><br><span class="hljs-comment"># 优先级</span><br>( location = ) &gt; ( location 完整路径 ) &gt; ( location<span class="hljs-regexp"> ^~</span> 路径 ) &gt; ( location ,* 正则顺序 ) &gt; ( location 部分起始路径 ) &gt; ( / )<br></code></pre></td></tr></table></figure><h4 id="反代"><a href="#反代" class="headerlink" title="反代"></a>反代</h4><h5 id="反代http"><a href="#反代http" class="headerlink" title="反代http"></a>反代http</h5><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">server_name</span> demo.com;<br>    <span class="hljs-section">location</span> /<br>    &#123;<br>        <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:9091;<br>        <span class="hljs-comment"># 反代gpt相关服务没有打字机效果开启下面</span><br>        <span class="hljs-comment"># proxy_buffering off;</span><br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> REMOTE-HOST <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-comment"># 此方法可能不适合域名反代</span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-attribute">add_header</span> Cache-Control <span class="hljs-literal">no</span>-cache;<br>    &#125;<br>    <span class="hljs-comment">#access_log  /www/wwwlogs/demo.com.log;  #日志可以不写</span><br>    <span class="hljs-comment">#error_log   /www/wwwlogs/demo.com.error.log;</span><br>&#125;<br></code></pre></td></tr></table></figure><h5 id="反代https，这里以byr为例"><a href="#反代https，这里以byr为例" class="headerlink" title="反代https，这里以byr为例"></a>反代https，这里以byr为例</h5><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span>                 <span class="hljs-number">80</span>;<br>    <span class="hljs-comment">#listen                 443 ssl;</span><br>    <span class="hljs-attribute">server_name</span>            demo.com xx2.com;<br>    <span class="hljs-comment">#ssl_certificate        crt/pem;</span><br>    <span class="hljs-comment">#ssl_certificate_key    key;</span><br>    <span class="hljs-comment">#经过测试，反代https不是必须使用https，这里使用https还是为了安全而已。</span><br>    <br>    <span class="hljs-comment">#禁止搜索引擎访问</span><br><span class="hljs-comment"># include bloke_spyder.conf;</span><br><br>    <span class="hljs-section">location</span> <span class="hljs-regexp">~ signup\.php</span> &#123; <span class="hljs-attribute">deny</span> all; &#125;<br>    <br>    <span class="hljs-section">location</span> /<br>    &#123;<br>        <span class="hljs-attribute">proxy_pass</span> https://byr.pt; <span class="hljs-comment">#你想要反代的域名</span><br>        <span class="hljs-attribute">proxy_set_header</span> Host byr.pt; <span class="hljs-comment">#这里替换一下</span><br>        <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> REMOTE-HOST <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> Accept-Encoding <span class="hljs-string">&quot;&quot;</span>;<br>        <span class="hljs-attribute">sub_filter</span> <span class="hljs-string">&quot;byr.pt&quot;</span> <span class="hljs-string">&quot;demo.com&quot;</span>; <span class="hljs-comment">#rewrite url 替换</span><br>        <span class="hljs-attribute">sub_filter_once</span> <span class="hljs-literal">off</span>;<br><br>        <span class="hljs-attribute">proxy_ssl_server_name</span> <span class="hljs-literal">on</span>; <span class="hljs-comment">#反代https必开</span><br>        <span class="hljs-attribute">add_header</span> X-Cache <span class="hljs-variable">$upstream_cache_status</span>; <br>    &#125;<br>    <span class="hljs-comment">#access_log  /www/wwwlogs/demo.com.log;  #日志可以不写</span><br>    <span class="hljs-comment">#error_log   /www/wwwlogs/demo.com.error.log;</span><br>&#125;<br><br></code></pre></td></tr></table></figure><p>bloke_spyder.conf，位置为 &#x2F;etc&#x2F;nginx&#x2F;bloke_spyder.conf</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">if</span> (<span class="hljs-variable">$http_user_agent</span> <span class="hljs-regexp">~* &quot;qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!</span> Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot<span class="hljs-string">&quot; ) </span><br><span class="hljs-string">&#123;</span><br><span class="hljs-string">    return 403;</span><br><span class="hljs-string">&#125;</span><br></code></pre></td></tr></table></figure><h4 id="server配置拓展"><a href="#server配置拓展" class="headerlink" title="server配置拓展"></a>server配置拓展</h4><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">listen</span> [::]:<span class="hljs-number">80</span>;<br>    <span class="hljs-comment">#listen 443 ssl http2;</span><br>    <span class="hljs-attribute">server_name</span> demo.com demo2.com; <span class="hljs-comment">#多个域名中间空格隔开</span><br>    <br>    <span class="hljs-comment"># 位置为 /etc/nginx/agent_deny.conf</span><br>    <span class="hljs-attribute">include</span> agent_deny.conf;<br>    <br>    <span class="hljs-comment"># 开ssl的话要开启证书验证</span><br>    <span class="hljs-comment">#ssl_certificate        crt/pem; #ssl证书文件位置(常见证书文件格式为：crt/pem)</span><br>    <span class="hljs-comment">#ssl_certificate_key    key; #ssl证书key位置</span><br>    <span class="hljs-comment">#ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;</span><br>    <span class="hljs-comment">#ssl_session_timeout 60m;</span><br>    <span class="hljs-comment">#~~我觉得一般网站都不需要开启https，套个cf简简单单不好吗?~~</span><br>    <span class="hljs-comment">#使用证书真香</span><br>    <br>http&#123;<br>    ...<br>    <span class="hljs-attribute">map</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span> <span class="hljs-variable">$real</span> &#123;<br>    &quot;&quot; $remote_addr;<br>    <span class="hljs-attribute">default</span> <span class="hljs-variable">$HTTP_CF_CONNECTING_IP</span>;<br>&#125;<br>    <br>    <span class="hljs-attribute">limit_conn_zone</span> <span class="hljs-variable">$real</span> zone=perserver:<span class="hljs-number">10m</span>;<br>    <span class="hljs-attribute">limit_conn</span> perserver <span class="hljs-number">20</span>;  <span class="hljs-comment"># 每个IP 最多同时建立20个连接</span><br>    <span class="hljs-attribute">limit_conn_log_level</span> <span class="hljs-literal">notice</span>;<br>    <span class="hljs-attribute">limit_req_zone</span> <span class="hljs-variable">$real</span> zone=one:<span class="hljs-number">10m</span> rate=15r/s;  <span class="hljs-comment"># 每个IP允许每秒发送10个请求</span><br>    <span class="hljs-attribute">limit_req_log_level</span> <span class="hljs-literal">notice</span>;<br>    <span class="hljs-attribute">limit_req_status</span> <span class="hljs-number">403</span>;  <span class="hljs-comment"># 返回状态403！</span><br>    <span class="hljs-attribute">limit_req</span> zone=one burst=<span class="hljs-number">10</span> nodelay;  <span class="hljs-comment"># 瞬时请求不超过 5 个，不延迟处理请求</span><br>    ...<br>&#125;<br>server&#123;<br>    ...<br>    <span class="hljs-comment">#也可以加到每个站点配置中</span><br>    <span class="hljs-comment">#limit_conn perserver 50;</span><br><span class="hljs-comment">#limit_req zone=one burst=10 nodelay;  # 不建议在子项中开启nodelay，如果有一些静态文件特别多很容易触发流控，可以适当增加这两个值。</span><br>    <span class="hljs-comment">#limit_rate_after 10m; #前10m不限速</span><br>    <span class="hljs-comment">#limit_rate 512k; #流量限制</span><br>    ...<br>&#125;<br>    <br>    <span class="hljs-comment">#auth_basic &quot;Please input password&quot;; #这里是验证时的提示信息  </span><br>    <span class="hljs-comment">#auth_basic_user_file /home/htpasswd.pass; </span><br>    <span class="hljs-comment">#我们一般都会搭建比较隐私一点或者不想让其他人访问的页面，</span><br>    <span class="hljs-comment">#那么我们就可以加上密码验证，这个页面比较简陋不能够使用密码软件填充，就像tr的登录界面一样。</span><br>    <span class="hljs-comment">#这里添加密码验证则打开域名就会要求输入密码。</span><br>    <br>    <span class="hljs-comment">#关闭nginx版本号显示</span><br>    <span class="hljs-attribute">vim</span> /etc/nginx/nginx.conf<br>    <span class="hljs-comment">#在http段取消注释或者增加下面代码</span><br>    server_tokens <span class="hljs-literal">off</span>;<br>    <br>    <span class="hljs-comment">#禁止其他域名解析到自己服务器，同时禁止直接使用IP访问网站，同时禁止IP泄露证书。</span><br>1.http:<br>    <span class="hljs-section">server</span> <br>    &#123;<br>        <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span> default_server;<br>        <span class="hljs-attribute">server_name</span> _;<br>        <span class="hljs-attribute">return</span> <span class="hljs-number">500</span>;<br>    &#125;<br>    <br>2.https:<br>    <span class="hljs-section">server</span> <br>    &#123;<br>        <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> default_server ssl;<br>        <span class="hljs-attribute">server_name</span> _;<br>        <span class="hljs-attribute">ssl_certificate</span> 随便设置一个ssl证书;<br>        <span class="hljs-attribute">ssl_certificate_key</span> 随便设置一个ssl证书的key;<br>        <span class="hljs-attribute">return</span> <span class="hljs-number">500</span>;<br>&#125;<br>3.http&amp;https:<br>    <span class="hljs-section">server</span> <br>    &#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span> default_server;<br>        <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> default_server ssl;<br>        <span class="hljs-attribute">server_name</span> _;<br>        <span class="hljs-attribute">ssl_certificate</span> 随便设置一个ssl证书;<br>        <span class="hljs-attribute">ssl_certificate_key</span> 随便设置一个ssl证书的key;<br>        <span class="hljs-attribute">return</span> <span class="hljs-number">500</span>;<br>&#125;<br>    <br>    <span class="hljs-comment"># 强制https，根据端口</span><br>    <span class="hljs-attribute">if</span> (<span class="hljs-variable">$server_port</span> !<span class="hljs-regexp">~ 443)</span>&#123;<br>        <span class="hljs-attribute">rewrite</span><span class="hljs-regexp"> ^(/.*)$</span> https://<span class="hljs-variable">$host</span><span class="hljs-variable">$1</span> <span class="hljs-literal">permanent</span>;<br>    &#125;<br>    <br>    <span class="hljs-comment"># 强制https，根据协议</span><br><span class="hljs-attribute">if</span> (<span class="hljs-variable">$scheme</span> = http) &#123;<br><span class="hljs-attribute">return</span> <span class="hljs-number">301</span> https://<span class="hljs-variable">$server_name</span><span class="hljs-variable">$request_uri</span>;<br>&#125;<br><br>    <br><span class="hljs-section">location</span> / <br>&#123;<br>        <span class="hljs-attribute">root</span> /www/wwwroot/blog/; <span class="hljs-comment"># 打开就能看到index.html的文件夹路径</span><br>        <span class="hljs-attribute">index</span> index.html; <span class="hljs-comment"># 主页</span><br>        <span class="hljs-comment">#auth_basic               &quot;password Required&quot;;</span><br>        <span class="hljs-comment">#auth_basic_user_file     /home/htpasswd.pass; </span><br>        <span class="hljs-comment"># 密码生成往下看</span><br>        <span class="hljs-comment"># 这里添加密码验证则匹配时才会要求输入密码。</span><br>&#125;<br>    <br><span class="hljs-section">location</span> /dl <br>&#123;<br>        <span class="hljs-attribute">alias</span>   /home/user/dl/;  <span class="hljs-comment"># 对于alias的dl后的&quot;/&quot;必须存在</span><br>        <span class="hljs-attribute">charset</span> utf-<span class="hljs-number">8</span>,gbk; <span class="hljs-comment"># 避免中文乱码</span><br>        <span class="hljs-attribute">autoindex</span> <span class="hljs-literal">on</span>; <span class="hljs-comment"># 开启目录文件列表</span><br>        <span class="hljs-attribute">autoindex_exact_size</span> <span class="hljs-literal">on</span>; <span class="hljs-comment"># 显示出文件的确切大小，单位是bytes</span><br>        <span class="hljs-attribute">autoindex_localtime</span> <span class="hljs-literal">on</span>; <span class="hljs-comment"># 显示的文件时间为文件的服务器时间</span><br>&#125;<br>      <br>   <span class="hljs-section">location</span> /nginx-test <br>    &#123;<br><span class="hljs-attribute">echo</span> <span class="hljs-variable">$clientRealIp</span>;<br>&#125;<br>    <span class="hljs-comment">#当用户访问 /nginx-test 的时候，我们输出 $clientRealIp 变量，看看这个变量值是不是真的用户源IP地址</span><br>    <br>    <span class="hljs-comment"># 路径301 302重定向</span><br>    <span class="hljs-attribute">rewrite</span><span class="hljs-regexp"> ^/baidu(.*)</span> https://www.baidu.com<span class="hljs-variable">$1</span> <span class="hljs-literal">permanent</span>;  <span class="hljs-comment"># 301</span><br>    <span class="hljs-attribute">rewrite</span><span class="hljs-regexp"> ^/baidu(.*)</span> https://www.baidu.com<span class="hljs-variable">$1</span> <span class="hljs-literal">redirect</span>;  <span class="hljs-comment"># 302</span><br>    <br>    <span class="hljs-comment"># 域名301、302重定向</span><br>    <span class="hljs-comment"># rewrite 指令允许你使用正则表达式来匹配 URL，并将其重写为另一个 URL。可以进行复杂的重定向逻辑。</span><br>    <span class="hljs-attribute">rewrite</span><span class="hljs-regexp"> ^/(.*)$</span> https://shyi.org/<span class="hljs-variable">$1</span> <span class="hljs-literal">permanent</span>;  <span class="hljs-comment"># 301</span><br>    <span class="hljs-attribute">rewrite</span><span class="hljs-regexp"> ^/(.*)$</span> https://shyi.org/<span class="hljs-variable">$1</span> <span class="hljs-literal">redirect</span>;  <span class="hljs-comment"># 302</span><br>    <br>    <span class="hljs-attribute">return</span> <span class="hljs-number">301</span> https://shyi.org<span class="hljs-variable">$request_uri</span>;  <span class="hljs-comment"># 301</span><br>    <span class="hljs-attribute">return</span> <span class="hljs-number">302</span> https://shyi.org<span class="hljs-variable">$request_uri</span>;  <span class="hljs-comment"># 302</span><br>    <br>    <br>    <span class="hljs-comment"># 基于if的域名301 302重定向，使用if可能会出现一些问题，不建议使用if条件块</span><br>    <span class="hljs-comment"># if ($request_uri ~* &quot;/old&quot;)</span><br>    <span class="hljs-comment"># if ($http_user_agent ~* &quot;MSIE&quot;)</span><br>    <span class="hljs-attribute">if</span> (<span class="hljs-variable">$host</span> <span class="hljs-regexp">~ &#x27;^demo.com&#x27;)</span> &#123;<br>        <span class="hljs-attribute">return</span> <span class="hljs-number">301</span> https://www.baidu.com<span class="hljs-variable">$request_uri</span>;<br>        <span class="hljs-comment">#return 302 https://www.baidu.com$request_uri;</span><br>    &#125;<br>    <br>    <span class="hljs-comment"># 使用 location 块进行重定向</span><br>    <span class="hljs-section">location</span> /old &#123;<br>        <span class="hljs-attribute">return</span> <span class="hljs-number">301</span> http://example.com/new;<br>    &#125;<br>    <br><span class="hljs-comment"># 日志可以不写</span><br>    <span class="hljs-comment">#access_log  /www/wwwlogs/demo.com.log; </span><br>    <span class="hljs-comment">#error_log   /www/wwwlogs/demo.com.error.log;</span><br>&#125;<br></code></pre></td></tr></table></figure><blockquote><p>root和alias的区别：</p><p>root的处理结果是：root路径＋location路径<br>alias的处理结果是：使用alias路径替换location路径</p><p>alias是一个目录别名的定义，root则是最上层目录的定义。还有一个重要的区别是alias后面必须要用”&#x2F;“结束，否则会找不到文件的，而root则可有可无。</p></blockquote><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">location</span> /dl<br>&#123;<br><span class="hljs-comment">#root /home/user/downloads; # 错误写法</span><br><span class="hljs-attribute">alias</span> /home/user/downloads/;<br>&#125;<br><span class="hljs-comment">#这里如果是root访问 demo.com/dl 实际上nginx提供的是 /home/user/downloads/dl，所以会404</span><br><span class="hljs-comment">#如果是alias的话，访问 demo.com/dl 实际上nginx提供的是 /home/user/downloads/。</span><br><br></code></pre></td></tr></table></figure><p>重定向</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span><br>&#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> ssl;<br>    <span class="hljs-attribute">ssl_certificate</span> crt/pem;<br><span class="hljs-attribute">ssl_certificate_key</span> key;<br>    <span class="hljs-attribute">server_name</span> shyi.io www.shyi.io;<br>    <span class="hljs-attribute">rewrite</span><span class="hljs-regexp"> ^/(.*)$</span> https://shyi.org/<span class="hljs-variable">$1</span> <span class="hljs-literal">permanent</span>; <span class="hljs-comment">#301</span><br>&#125;<br></code></pre></td></tr></table></figure><h5 id="agent-deny"><a href="#agent-deny" class="headerlink" title="agent_deny"></a>agent_deny</h5><p>需要“include agent_deny.conf;”，放在server或者location范围内。位置为&#x2F;etc&#x2F;nginx&#x2F;agent_deny.conf</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-comment"># 禁止Scrapy等工具的抓取</span><br><span class="hljs-attribute">if</span> (<span class="hljs-variable">$http_user_agent</span> <span class="hljs-regexp">~* (Scrapy|Curl|HttpClient))</span> <br>&#123;<br>    <span class="hljs-attribute">return</span> <span class="hljs-number">403</span>;<br>&#125;<br><br><span class="hljs-comment"># 禁止指定UA及UA为空的访问</span><br><span class="hljs-attribute">if</span> (<span class="hljs-variable">$http_user_agent</span> <span class="hljs-regexp">~* &quot;WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|JikeSpider|Indy</span> Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Java|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/<span class="hljs-number">0</span>.<span class="hljs-number">1</span>|YandexBot|FlightDeckReports|Linguee Bot|^$<span class="hljs-string">&quot;) </span><br><span class="hljs-string">&#123;</span><br><span class="hljs-string">    return 403;  </span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string"></span><br><span class="hljs-string"></span><br><span class="hljs-string"># 禁止非GET|HEAD|POST方式的抓取</span><br><span class="hljs-string">if (<span class="hljs-variable">$request_method</span> !~ ^(GET|HEAD|POST)$) </span><br><span class="hljs-string">&#123;</span><br><span class="hljs-string">    return 403;</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string"></span><br><span class="hljs-string"># 禁止爬虫,if语句必须放在server或者location范围内，不能放在http范围内。</span><br><span class="hljs-string">if (<span class="hljs-variable">$http_user_agent</span> ~* &quot;</span>qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot<span class="hljs-string">&quot; ) </span><br><span class="hljs-string">&#123;</span><br><span class="hljs-string">    return 403;</span><br><span class="hljs-string">&#125;</span><br></code></pre></td></tr></table></figure><h5 id="获取访客真实IP"><a href="#获取访客真实IP" class="headerlink" title="获取访客真实IP"></a>获取访客真实IP</h5><ul><li>Remote Address：他是TCP中的概念，是无法伪造的，在应用程序中获取到的Remote Address值，是直接和应用服务器建立TCP连接的IP，可能是用户真实ip（用户直接访问应用服务器时），也可能是代理服务器（通过nginx负载均衡代理时）。</li><li>在有CDN的情况下，remote_addr获取的是最后一个与你握手的ip(CDN的ip)。</li></ul><blockquote><p>一、1.在nginx.conf或者site.conf里的非server{}添加如下</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">log_format</span>  main  <span class="hljs-string">&#x27;<span class="hljs-variable">$http_x_forwarded_for</span>- <span class="hljs-variable">$remote_user</span> [<span class="hljs-variable">$time_local</span>] &#x27;</span> <span class="hljs-string">&#x27;&quot;<span class="hljs-variable">$request</span>&quot; <span class="hljs-variable">$status</span> <span class="hljs-variable">$body_bytes_sent</span> &#x27;</span> <span class="hljs-string">&#x27;&quot;<span class="hljs-variable">$http_referer</span>&quot; &quot;<span class="hljs-variable">$http_user_agent</span>&quot;&#x27;</span>;<br>例如<br><span class="hljs-comment"># log_format  main  &#x27;$real - $http_cf_ipcountry $remote_user [$time_local] &#x27; &#x27;&quot;$request&quot; $status $body_bytes_sent &#x27; &#x27;&quot;$http_referer&quot; &quot;$http_user_agent&quot; &quot;$remote_addr&quot; &quot;$request_time&quot;&#x27;;</span><br><span class="hljs-comment">#可以放在nginx.conf，也可以放在site.conf里，但是注意不要放入serve&#123;&#125;里</span><br><span class="hljs-comment">#这里的main可以自己更改，但是下面要一致。</span><br></code></pre></td></tr></table></figure><p>2.添加main</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">access_log</span>  /www/wwwlogs/test.log main;<br></code></pre></td></tr></table></figure><p>二、1.需要在 <code>http&#123;&#125;段</code> 里添加（非server{}）</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-comment">#获取用户真实ip并赋值给$clientRealIP</span><br><span class="hljs-comment">#0-z能够完整获取到ipv6，而0-9只能获取ipv4</span><br><span class="hljs-attribute">map</span> <span class="hljs-variable">$http_x_forwarded_for</span> <span class="hljs-variable">$clientRealIP</span>&#123;<br>&quot;&quot; $remote_addr;<br>~^(?P&lt;firstAddr&gt;[0-z\.]+),?.*$ $firstAddr; &#125;<br></code></pre></td></tr></table></figure><p>2.在nginx.conf或者site.conf里的非server{}添加如下</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">log_format</span>  main  <span class="hljs-string">&#x27;<span class="hljs-variable">$clientRealIP</span>- <span class="hljs-variable">$remote_user</span> [<span class="hljs-variable">$time_local</span>] &#x27;</span> <span class="hljs-string">&#x27;&quot;<span class="hljs-variable">$request</span>&quot; <span class="hljs-variable">$status</span> <span class="hljs-variable">$body_bytes_sent</span> &#x27;</span> <span class="hljs-string">&#x27;&quot;<span class="hljs-variable">$http_referer</span>&quot; &quot;<span class="hljs-variable">$http_user_agent</span>&quot;&#x27;</span>;<br>例如<br><span class="hljs-comment"># log_format  main  &#x27;$real - $http_cf_ipcountry $remote_user [$time_local] &#x27; &#x27;&quot;$request&quot; $status $body_bytes_sent &#x27; &#x27;&quot;$http_referer&quot; &quot;$http_user_agent&quot; &quot;$remote_addr&quot; &quot;$request_time&quot;&#x27;;</span><br><span class="hljs-comment">#可以放在nginx.conf，也可以放在site.conf里。</span><br></code></pre></td></tr></table></figure><p>3.在access_log后面添加main</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">access_log</span>  /www/wwwlogs/test.log main;<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">这样改变不了<span class="hljs-string">&quot;<span class="hljs-variable">$remote_addr</span>&quot;</span>的值，只需要在用到 <span class="hljs-string">&quot;<span class="hljs-variable">$remote_addr</span>&quot;</span>改成<span class="hljs-variable">$clientRealIP</span>即可<br></code></pre></td></tr></table></figure></blockquote><p>最后 <strong>nginx -s reload</strong>即可。详情查看后续文章。</p><p>有一些变量需要改一下，比如map中的 <code>$real</code> , <code>$clientRealIP</code></p><p>log_format  main 中的 <code>$real</code> , <code>$clientRealIP</code> , <code>$http_x_forwarded_for</code></p><p><code>log_format</code>  和 <code>map</code> 要放在server{}以外</p><p><a href="https://shyi.org/posts/43696/">Nginx获取用户真实ip</a></p><p><a href="https://shyi.org/posts/58867/">搭建图床</a></p><h5 id="nginx生成访问密码："><a href="#nginx生成访问密码：" class="headerlink" title="nginx生成访问密码："></a>nginx生成访问密码：</h5><p>安装htpasswd工具：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">(yum安装)：yum -y install httpd-tools -y<br><br>(debian)：apt-get install apache2-utils -y<br><br>(离线安装)：rpm -ivh httpd-tools-2.4.6-88.el7.centos.x86_64.rpm<br></code></pre></td></tr></table></figure><p>生成用户名和密码</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">htpasswd -bc /home/htpasswd.pass admin 123456<br><span class="hljs-comment">#其中/home/htpasswd.pass是生成密码文件路径</span><br>htpasswd -b /home/htpasswd.pass user 123456   <span class="hljs-comment"># 多添加一个认证用户sea</span><br>htpasswd -b /home/htpasswd.pass user 1234567 <span class="hljs-comment"># 修改密码</span><br>htpasswd -D /home/htpasswd.pass user <span class="hljs-comment"># 删除用户名和密码</span><br><span class="hljs-built_in">cat</span> /home/htpasswd.pass<br><span class="hljs-comment">#显示admin:$apr1$G9CsNcuD$lctm0cOoDTx0h5CW7lKVc/</span><br><span class="hljs-comment">#其中admin是用户名，分号后面就是密码（密码已经加过密）</span><br></code></pre></td></tr></table></figure><h5 id="自签证书"><a href="#自签证书" class="headerlink" title="自签证书"></a>自签证书</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs bash">openssl req \<br>-newkey rsa:2048 \<br>-x509 \<br>-nodes \<br>-keyout file.key \<br>-new \<br>-out file.crt \<br>-subj /CN=xxx.ccss.vip \<br>-reqexts SAN \<br>-extensions SAN \<br>-config &lt;(<span class="hljs-built_in">cat</span> /usr/local/openssl/openssl.cnf \<br>    &lt;(<span class="hljs-built_in">printf</span> <span class="hljs-string">&#x27;[SAN]\nsubjectAltName=DNS:xxx.com,IP:11.11.11.11&#x27;</span>)) \<br>-sha256 \<br>-days 3650<br></code></pre></td></tr></table></figure><p>引用：</p><blockquote><p>部分参数参考自宝塔面板</p><p><a href="https://www.runoob.com/w3cnote/nginx-install-and-config.html">Nginx 服务器安装及配置文件详解 | 菜鸟教程 (runoob.com)</a></p><p><a href="https://cn.wiki.ptbox.dev/nginx/">Nginx 相关 | QuickBox Lite 知识库 (ptbox.dev)</a></p><p><a href="https://blog.rhilip.info/archives/72/">搭建北邮人BT反代域名过程小记 - R酱小窝 ~ 个人博客 (rhilip.info)</a></p><p><a href="https://carloo.cc/archives/53/">使用nginx反代北邮人实现无IPV6环境访问北邮人 - carlo’ blogs (carloo.cc)</a></p><p><a href="https://smalloutcome.com/2021/08/03/Nginx-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86-htpps-%E7%AB%99%E7%82%B9-502-%E6%8E%92%E6%9F%A5%E6%80%9D%E8%B7%AF/">Nginx 反向代理 htpps 站点 502 排查思路 | 一小步 (smalloutcome.com)</a></p><p><a href="https://blog.csdn.net/dream8062/article/details/78416234">nginx配置访问密码</a></p><p><a href="https://www.cnblogs.com/nickchou/p/12678339.html">centos nginx 卸载 - nickchou - 博客园 (cnblogs.com)</a></p><p><a href="https://blog.csdn.net/qq_40907977/article/details/106815216">Nginx之location详解</a></p><p><a href="https://blog.csdn.net/leiwuhen92/article/details/106349470">文件路径 alias与root区别</a></p><p><a href="https://www.linuxidc.com/Linux/2013-06/86438.htm">Nginx重新编译添加模块_服务器应用_Linux公社-Linux系统门户网站 (linuxidc.com)</a></p><p><a href="https://blog.mimvp.com/article/25833.html">Nginx 限制单个IP的并发连接数&#x2F;速度防止恶意攻击&#x2F;蜘蛛爬虫采集</a></p><p><a href="https://blog.51cto.com/u_15069485/2612828">Nginx通过UserAgent屏蔽蜘蛛和采集</a></p><p><a href="https://www.31du.cn/blog/nginx-cdn-real-ip.html">Nginx 挂CDN 如何获取真实访客IP地址</a></p><p><a href="https://stackoverflow.com/questions/4262081/serverremote-addr-gives-server-ip-rather-than-visitor-ip">$_SERVER[“REMOTE_ADDR”] gives server IP rather than visitor IP</a></p><p><a href="https://developers.google.com/speed/public-dns/docs/using">Google Public DNS IP addresses</a></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;Nginx常用命令&quot;&gt;&lt;a href=&quot;#Nginx常用命令&quot; class=&quot;headerlink&quot; title=&quot;Nginx常用命令&quot;&gt;&lt;/a&gt;Nginx常用命令&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Nginx" scheme="https://shyi.org/tags/Nginx/"/>
    
    <category term="获取用户真实ip" scheme="https://shyi.org/tags/%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E7%9C%9F%E5%AE%9Eip/"/>
    
  </entry>
  
  <entry>
    <title>程序员应该访问的最佳网站中文版</title>
    <link href="https://shyi.org/posts/3491/"/>
    <id>https://shyi.org/posts/3491/</id>
    <published>2022-04-22T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.949Z</updated>
    
    <content type="html"><![CDATA[<h1 align="center">    <br>    <img width="200" src="https://cdn.rawgit.com/sindresorhus/awesome/master/media/logo.svg" alt="awesome">    <br></h1><h1 id="程序员应该访问的最佳网站中文版原版"><a href="#程序员应该访问的最佳网站中文版原版" class="headerlink" title="程序员应该访问的最佳网站中文版原版"></a>程序员应该访问的最佳网站中文版<a href="https://github.com/sdmg15/Best-websites-a-programmer-should-visit">原版</a></h1><p>一些对程序员有用的网站</p><p>在学习CS的时候有一些你必须知道的有用的站点来获取通知为了你的技术储备和学习新知识。这里是一个你应该访问的不是非常全面的一些站点的列表，这个列表会不断更新，只要我能得到链接，你也可以通过添加你知道的来为此做出贡献</p><h3>Index</h3><p>索引   </p><ul><li><a href="#when-you-get-stuck">当你遇到问题时</a></li><li><a href="#news">新闻篇</a></li><li><a href="#magazines">杂志篇</a></li><li><a href="#coding-practice-for-beginners">针对新手的代码训练</a></li><li><a href="#cryptocurrency">加密货币</a></li><li><a href="#for-those-who-want-to-start-a-small-project-but-cant-find-the-ideas">针对那些想开始一个小的项目但是无从下手的人</a></li><li><a href="#general-coding-advice">通用编码建议</a></li><li><a href="#coding-style">编码风格</a></li><li><a href="#general-tools">通用工具</a></li><li><a href="#interview-preparation">面试准备</a></li><li><a href="#documentaries">纪录片</a></li><li><a href="#moocs-for-learning-something-new">学习新知识-mooc</a></li><li><a href="#sites-related-to-your-preferred-programming-language-for-me-java">与你首选的编程语言的站点(对我来说是java)</a></li><li><a href="#learn-ai">AI学习</a></li><li><a href="#seminar--research-writing--talks-etc">研讨会、研究性写作、会谈等</a></li><li><a href="#everything-in-one-place">Reddit知识汇总</a></li><li><a href="#youtube-channels">Youtube频道</a></li><li><a href="#good-articles">好文章</a></li><li><a href="bash-and-shell-scripting">bash和shell脚本</a></li><li><a href="#podcasts">播客</a></li><li><a href="#building-a-simple-compilerinterpreter">构建一个简单的编译器&#x2F;解释器</a></li><li><a href="#watch-others-code">欣赏他人的代码</a></li><li><a href="#tutorials">教程</a></li><li><a href="#what-should-a-programmer-know">一个程序员应该知道的东西</a></li><li><a href="#competitive-programming">编程比赛</a></li><li><a href="#computer-books">计算机书籍</a></li><li><a href="#video-tutorials">视频指南</a></li><li><a href="#online-compiler-and-sharing-code-snippets">在线编译和共享代码片段</a></li><li><a href="#blogs-of-developers">开发者博客</a></li><li><a href="#for-improving-your-english">用来提高你的英语</a></li><li><a href="#when-you-get-bored-from-cs-related-stuff">当你厌倦了CS相关的东西</a></li><li><a href="#open-source-websites">开源网站</a></li></ul><h1 id='when-you-get-stuck'>当你遇到问题时</h1><ul><li><a href="https://www.codementor.io/">Codementor</a>: 国际版在行，更侧重于开发者之间的帮助，可以从某些方面的专家那里获取帮助</li><li><a href="https://www.devrant.io/">devRant</a>: 供你吐槽和释放压力的地方</li><li><a href="https://learn-anything.xyz/">Learn Anything</a>: 帮助你找到学习任何知识时的最佳路径</li><li><a href="https://www.quora.com/">Quora</a>: 一个共享知识和更好的理解世界的地方</li><li><a href="http://stackoverflow.com/">Stack Overflow</a>: 订阅他们的每周新闻和任何你感兴趣的主题</li></ul><h1 id='news'>新闻篇</h1><ul><li><a href="http://technews.acm.org/">ACM TechNews</a> : 科技新闻</li><li><a href="https://stratechery.com/">Stratechery</a> : 类似于个人博客</li><li><a href="https://alternativeto.net/">AlternativeTo</a> : 众包软件推荐</li><li><a href="https://arstechnica.com/">Ars Technica</a> : 精品文章</li><li><a href="https://betterdev.link/">Better Dev Links</a> : 每周一次的链接推送帮助你成为更好的开发者</li><li><a href="http://devopslinks.com/">DevOpsLinks</a> : 一个对DevOps感兴趣的众多开发者和it专家的在线社区</li><li><a href="http://www.gsmarena.com/">GSMArena.com</a> : 与最新手机和android相关的新闻</li><li><a href="https://hndigest.com/">Hacker News Digest</a> : Hacker News文摘</li><li><a href="https://news.ycombinator.com/">Hacker News</a>: 针对程序员的新闻聚合，通过新闻稿获取头条新闻</li><li><a href="http://www.hackernewsletter.com/">Hacker Newsletter</a> : 手工编辑，周周更新</li><li><a href="https://hackernoon.com/">Hacker Noon</a> : 一些技术科技类文章的网站</li><li><a href="http://highscalability.com/">High Scalability</a> : 不同公司在他们的apps上的成功的故事</li><li><a href="https://lobste.rs/">Lobsters</a> : Lobsters是一个聚焦于技术的社区，主要是链接聚合和对话题进行讨论</li><li><a href="https://www.producthunt.com/">product hunt </a> : 寻找你最喜欢的东西</li><li><a href="https://www.recode.net/">Recode</a> : 聚焦硅谷商业的科技新闻</li><li><a href="https://www.reddit.com/r/programming/">Reddit.com&#x2F;r&#x2F;programming</a> :科技新闻和文章的聚合</li><li><a href="https://slashdot.org/">Slashdot</a> : 新闻，社会新闻</li><li><a href="https://stackshare.io/">Stack Share</a> :各公司技术栈共享站点</li><li><a href="http://techcrunch.com/">TechCrunch</a> : 一个科技新闻的站点</li><li><a href="https://dev.to/">The DEV Community</a> : 程序员分享想法和互相帮助的地方</li><li><a href="http://arstechnica.com/">Ars Technica</a> : 发表的独特的精品文章</li><li><a href="https://www.theverge.com/">The Verge</a> : 更多面向产品的科技新闻</li><li><a href="https://www.xda-developers.com/">XDA</a> :Android开发者新闻</li></ul><h1 id='magazines'>杂志篇</h1><ul><li><a href="https://www.technologyreview.com/magazine/">Mit技术评论</a> :麻省理工学院技术评论杂志</li><li><a href="http://nautil.us/">Nautilus</a> : 纽约人看技术</li><li><a href="https://lwn.net/">LWN</a> :开源技术，编程等的新闻周刊等（原linux每周新闻）</li></ul><h1 id='coding-practice-for-beginners'>针对初学者的代码练习</h1><ul><li><a href="https://caveofprogramming.com/">Cave of programming</a> : 学习编程，提升技巧</li><li><a href="https://www.codecademy.com/">Codeacademy</a> : 交互式编码学习，免费</li><li><a href="http://codeabbey.com/">CodeAbbey - 一个任何人都能精通编程的地方</a> : 从菜鸟到专家进阶之地</li><li><a href="http://exercism.io/">Exercism.io</a> : 用超过30种不同的语言解决实践问题，与其他人分享你的解决方案</li><li><a href="https://www.freecodecamp.com/">freeCodeCamp</a> : 学习编码并且为非营利性组织构建项目。打造你的全栈开发技能</li><li><a href="https://github.com/karan/Projects-Solutions">karan&#x2F;Projects-Solutions</a> 用不同语言实现的项目</li><li><a href="http://lod-cloud.net/">Lod - Cloud</a> : 开放数据云图</li><li><a href="http://programmingbydoing.com/">Programming by Doing</a> : 编程进阶站点</li><li><a href="http://www.reddit.com/r/dailyprogrammer">Reddit.com&#x2F;r&#x2F;dailyprogrammer</a> :  有趣的编程挑战，在这里你能学习其他人的编码，对于你解决不了的编码你能看看其他人是怎么解决的</li><li><a href="https://www.peoplecanprogram.com/">People Can Program</a> :互联网上最友好的编程学习应用</li><li><a href="http://rosettacode.org/wiki/Category:Programming_Tasks">Programming Tasks</a> : 小程序汇总，不是微信的小程序</li><li><a href="https://vim-adventures.com/">Vim adventures</a> :边玩边学vim</li><li><a href="https://www.pramp.com/">Pramp</a> : 尝试面试官角色，结束后，可以点击左边的按钮交换角色</li><li><a href="http://paqmind.com/">Paqmind</a> :学习编程的指南和挑战</li><li><a href="https://teamtreehouse.com/">treehouse</a> :快速容易和经济实惠的方法来提升技巧</li></ul><h1 id='cryptocurrency'>加密货币</h1><ul><li><a href="http://www.ofnumbers.com/2017/09/21/eight-things-cryptocurrency-enthusiasts-probably-wont-tell-you/">加密货币爱好者必知内容</a> :加密货币爱好者必须要知道的8项内容</li><li><a href="https://www.sitepen.com/blog/2017/09/21/blockchain-basics/">区块链基础</a> :区块链介绍</li></ul><h1 id='for-those-who-want-to-start-a-small-project-but-cant-find-the-ideas'>针对那些想开始一个小的项目但是无从下手的人</h1><ul><li><a href="https://medium.freecodecamp.org/every-time-you-build-a-to-do-list-app-a-puppy-dies-505b54637a5d?gi=c786640fbd11">freeCodeCamp | React project ideas</a> :学习react的27个有趣的想法</li><li><a href="http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/">martyr2s-mega-project-ideas-list</a> : 包含125个项目，从初级到中级</li><li><a href="https://github.com/karan/Projects">karan&#x2F;Projects</a> : 针对新手的小项目的汇总</li><li><a href="http://rodiongork.tumblr.com/post/108155476418/wrong-big-projects-for-beginners">Wrong “big projects” for beginners</a> : 怎样选择，从哪里开始</li><li><a href="https://github.com/vicky002/1000_Projects">vicky002&#x2F;1000-Projects</a> : 一个能够用任何编程语言解决的巨型项目清单</li></ul><h1 id='general-coding-advice'>通用编码建议</h1><ul><li><a href="https://stephenhaunts.files.wordpress.com/2014/04/10-ways-to-be-a-better-developer.png">成为一名优秀开发者的10种方法</a></li><li><a href="http://kevinlondon.com/2015/05/05/code-review-best-practices.html">代码审查最佳实践</a>: Kevin London的博客</li><li><a href="https://stephenhaunts.com/2013/12/11/dieter-rams-10-principles-of-good-product-design/">Dieter Rams : 好的产品设计的10个原则</a></li><li><a href="https://sourcemaking.com/design_patterns">设计模式</a> : 用例子详细说明设计模式</li><li><a href="https://okepi.wordpress.com/2014/08/21/how-to-become-a-programmer-or-the-art-of-googling-well/">如何成为一个程序员或谷歌搜索的艺术</a></li><li><a href="https://github.com/wearehive/project-guidelines">js项目指南</a>:javascript项目最佳实践集合</li><li><a href="https://learntocodewith.me/">Learn to Code With Me</a> : 一个资源非常全的网站，旨在为科技界的开发人员提供资源</li><li><a href="http://thecodist.com/article/lessons_from_a_lifetime_of_being_a_programmer">一个程序员一生应遵循的原则</a></li><li><a href="https://webpro.github.io/programming-principles/">编程规范</a> :程序设计原理与模式分类综述</li><li><a href="https://en.wikipedia.org/wiki/Software_design_pattern">软件设计模式</a> : 设计模式的汇总</li><li><a href="http://www.artima.com/weblogs/viewpost.jsp?thread=331531">良好的编程原则</a></li><li><a href="https://medium.freecodecamp.com/things-i-wish-someone-had-told-me-when-i-was-learning-how-to-code-565fc9dcb329#.y5wbd3pj6">我希望在我一开始学习编码的时候就能得到的一些建议 — Free Code Camp</a> : 从教别人处学到的东西</li><li><a href="http://matt.might.net/articles/what-cs-majors-should-know/">在计算机科学专业应该知道什么</a> :良好的编程规范</li><li><a href="https://henrikwarne.com/2012/12/12/working-as-a-software-developer/">软件开发者的工作</a> : Henrik Warne的博客</li></ul><h1 id='coding-style'>编码风格</h1><ul><li><a href="https://github.com/airbnb/javascript">Airbnb JS 风格指南</a> : 写JavaScript最好的方式  </li><li><a href="https://github.com/airbnb/ruby">Airbnb Ruby 风格指南</a> : Airbnb的ruby风格指南</li><li><a href="https://github.com/bbatsov/ruby-style-guide">Ruby 编码风格指南</a> : 社区驱动的Ruby编码风格指南</li><li><a href="https://github.com/johnpapa/angular-styleguide/tree/master/a1">Angular 1 风格指南</a> : 官方认可的风格指南，作者John Pappa</li><li><a href="http://stanford.edu/class/archive/cs/cs106b/cs106b.1158/styleguide.shtml">CS 106B 编码风格指南</a> : 代码臃肿者必看  </li><li><a href="http://www.umich.edu/~eecs381/generalFAQ/Debugging.html">调试问题</a> :检查如何调试程序</li><li><a href="https://github.com/prakhar1989/awesome-courses">CS课程目录(许多在线讲座)</a> : 另一个在线CS课程</li><li><a href="https://github.com/open-source-society/computer-science">在线CS课程目录</a> : 免费的在线CS课程</li><li><a href="https://www.reddit.com/r/C_Programming/comments/1vuubw/good_c_programming_habits/">优秀的 C 编码习惯 • &#x2F;r&#x2F;C_Programming</a>  </li><li><a href="https://google.github.io/styleguide/cppguide.html">google C++ 编码风格</a>  </li><li><a href="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html">怎样高效的报告Bug</a>  </li><li><a href="https://www.reddit.com/r/learnprogramming/comments/1i4ds4/what_are_some_bad_coding_habits_you_would/">建议初学者避免使用的坏的编码习惯?</a>  </li><li><a href="https://www.python.org/dev/peps/pep-0008/">PEP8 - Python编码风格指南</a></li><li><a href="https://standardjs.com/">标准 JS 风格指南</a> : JavaScript风格指南</li><li><a href="https://google.github.io/styleguide/pyguide.html">Google Python 风格指南</a></li><li><a href="https://github.com/behzad888/Aurelia-styleguide">Aurelia 风格指南</a></li></ul><h1 id='general-tools'>通用工具</h1><ul><li><a href="https://codepad.remoteinterview.io/DDCUYLAEYS">CodePad</a> : 远程面试工具</li><li><a href="https://codepen.io/">CodePen</a> : 基于浏览器共享前端代码的地方</li><li><a href="http://vorillaz.github.io/devicons/#/main">Devicons</a> : 免费图标汇总</li><li><a href="https://regex101.com/">regex101</a> : 在线正则表达式测试和调试，国内也有不少</li><li><a href="https://regexr.com/">regexr</a> : 另一个在线学习、测试正则表达式的工具</li><li><a href="https://wit.ai/">Wit AI</a> :帮助开发者灵活的控制应用，适合没有移动端开发经验的用户</li></ul><h2 id='#'>bash和shell脚本</h2><ul><li><a href="http://tldp.org/LDP/abs/html/">Advanced Bash-Scripting Guide</a> :对shell脚本艺术的深入挖掘</li><li><a href="http://www.tldp.org/LDP/Bash-Beginners-Guide/html/">Bash Guide for Beginners</a> :对新手的bash使用指南</li><li><a href="http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html">Bash编程</a></li><li><a href="https://www.gnu.org/software/bash/manual/bashref.html">Bash参考手册</a> </li><li><a href="http://mywiki.wooledge.org/BashGuide">Bash指南</a></li><li><a href="http://conqueringthecommandline.com/book/frontmatter">Conquering the Command Line</a> : 针对开发者的Unix和Linux命令</li></ul><h2 id='interview-preparation'>面试准备</h2><ul><li><a href="https://www.reddit.com/r/cscareerquestions/comments/20ahfq/heres_a_pretty_big_list_of_programming_interview/">&#x2F;r&#x2F;cscareerquestions</a> : 这是一个非常大的面试问题列表是我在为4大面试时用到的，我认为对大家也是有用的</li><li><a href="http://java67.blogspot.in/2013/04/10-frequently-asked-sql-query-interview-questions-answers-database.html">10个最频繁的SQL查询面试问题</a></li><li><a href="http://puzzles.nigelcoldwell.co.uk/">逻辑题答案汇总</a></li><li><a href="http://www.hiredintech.com/algorithm-design/">算法设计流程</a></li><li><a href="http://www.indiabix.com/">资质问题与答案</a> : Quant and aptitude preparation</li><li><a href="http://www.techinterview.org/">一个技术面试题，逻辑题等的站点</a> : 各种让你思考的东西</li><li><a href="https://www.beehyve.io/">BeehYve</a> :各种学生需要的资源</li><li><a href="https://www.reddit.com/r/cscareerquestions/comments/2lzc4h/big_collection_of_interview_preparation_links/">面试准备时的链接的汇总 • &#x2F;r&#x2F;cscareerquestions </a></li><li><a href="http://bigocheatsheet.com/#">算法复杂度笔记</a></li><li><a href="http://ssp.impulsetrain.com/big-o.html">大家的误解</a></li><li><a href="https://gist.github.com/dideler/2365607">位操作技巧</a></li><li><a href="https://github.com/ChiperSoft/InterviewThis">ChiperSoft&#x2F;InterviewThis</a> : 在面试期间问到对公司的了解的问题</li><li><a href="https://www.codeproject.com/">Code Project</a> : 面向开发人员</li><li><a href="http://javahonk.com/core-java-interview-questions/">Java核心面试问题 - 每个主题的面试题 </a></li><li><a href="http://www.gowrikumar.com/c/index.php">一些有趣的C问题 </a></li><li><a href="http://web.stanford.edu/class/cs9/">CS9: CS技术面试中的问题解决</a></li><li><a href="http://gurmeet.net/puzzles/">优秀的逻辑题</a></li><li><a href="http://stackoverflow.com/questions/11094330/determining-the-big-o-runtimes-of-these-different-loops">确定不同循环的时间复杂度?</a> :在stackoverflow上的一些好问题包括计算时间复杂度.</li><li><a href="https://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions">5个基本的电话面试问题 - steveyegge2 </a></li><li><a href="http://placementsindia.blogspot.in/">新人面试</a></li><li><a href="http://www.geeksforgeeks.org/">GeeksforGeeks | 针对geek的计算机科学入门</a> : 订阅他们获取新文章</li><li><a href="http://www.essentialsql.com/get-ready-to-learn-sql-database-normalization-explained-in-simple-english/">准备学习SQL篇：用语言描述一下数据库规范化 - Essential SQL </a></li><li><a href="https://github.com/odino/interviews">https://github.com/odino/interviews</a> : 面试重要问题列表</li><li><a href="http://www.lifeclever.com/give-your-resume-a-face-lift/">让你的简历改头换面</a></li><li><a href="http://www.kchodorow.com/blog/2013/02/28/guide-to-tech-interviews/">技术面试指南</a></li><li><a href="https://www.reddit.com/r/cscareerquestions/comments/1jov24/heres_how_to_prepare_for_tech_interviews/">如何为技术面试做准备• &#x2F;r&#x2F;cscareerquestions</a></li><li><a href="http://www.palantir.com/2011/09/how-to-rock-an-algorithms-interview/">怎样进行算法面试</a></li><li><a href="http://www.artofmanliness.com/2016/01/05/tell-me-a-little-about-yourself/">怎样进行自我介绍 | The Art of Manliness </a></li><li><a href="http://www.icsjobportal.com/blog/job-interview-questions/">如何回答最棘手的40个面试问题| ICS Job Portal </a></li><li><a href="http://haseebq.com/how-to-break-into-tech-job-hunting-and-interviews/">如何进入科技企业-求职和面试指南</a>  </li><li><a href="http://kelukelu.me/interview/index.html">怎样面试</a></li><li><a href="http://se7so.blogspot.in/2014/01/how-to-prepare-for-interview-1.html">怎样准备一个面试 - 1</a></li><li><a href="http://placement-iit2013.blogspot.com/">IIT Delhi 实习经验</a> : </li><li><a href="https://github.com/samwincott/Internship-Guide">samwincott&#x2F;Internship-Guide</a> : 与实习相关的链接汇总</li><li><a href="https://blogs.janestreet.com/interviewing-at-jane-street/">华尔街面试</a></li><li><a href="http://javahonk.com/category/interview/">面试架构 - Java Honk</a></li><li><a href="http://www.artofmanliness.com/2012/08/06/how-to-ace-a-job-interview/">工作面试：如何做好求职面试|展示个人魅力 </a></li><li><a href="http://lifehacker.com/tag/job-interviews">求职面试新闻、视频、评论和八卦 - Lifehacker </a></li><li><a href="https://www.thebalance.com/job-interview-questions-and-answers-2061204">求职面试问题和最佳答案</a></li><li><a href="https://github.com/kimberli/interviews">kimberli&#x2F;interviews</a> : 面试学习表格</li><li><a href="https://github.com/mission-peace/interview/wiki">Mission-peace&#x2F;interview problems </a> : 一个大的编码面试的问题的汇总</li><li><a href="https://www.pramp.com/ref/gt1">软件工程师面试实践平台</a> :与真正的同行进行编程交流</li><li><a href="https://leetcode.com/problemset/algorithms/">Problems | LeetCode OJ </a> : 针对面试的编码训练</li><li><a href="http://www.programmerinterview.com/">程序员和软件面试问答</a></li><li><a href="https://www.reddit.com/user/ashish2199/m/puzzles">Reddit.com&#x2F;user&#x2F;ashish2199&#x2F;m&#x2F;puzzles</a> : Reddit逻辑题</li><li><a href="https://www.jitbit.com/news/181-jitbits-sql-interview-questions/">SQL面试问题</a> : 好的SQL测试</li><li><a href="http://stevestedman.com/wp-content/uploads/VennDiagram1.pdf">使用韦恩图进行SQL连接</a></li><li><a href="https://github.com/svozniuk/java-interviews">svozniuk&#x2F;java-interviews</a> : Java面试题</li><li><a href="http://www.datsi.fi.upm.es/~frosal/docs/25mdq.html">25个最难的HR问题 </a></li><li><a href="http://www.programcreek.com/2012/11/top-10-algorithms-for-coding-interview/">面试10大算法</a></li><li><a href="http://cheatsheetworld.com/programming/unix-linux-cheat-sheet/">Unix／Linux笔记</a></li><li><a href="https://www.reddit.com/r/india/comments/1clgdj/unsolicited_advice_for_job_seekers_and_employers/">为求职者和雇主提供的建议</a></li><li><a href="http://visualgo.net/">通过动画可视化数据结构和算法</a></li><li><a href="http://www.hiredintech.com/app">We Help Coders Get Hired</a> : 提供系统设计，面试策略，软件技能等的web站点</li><li><a href="https://www.reddit.com/r/cscareerquestions/comments/209rkq/what_are_your_goto_questions_for_the_do_you_have/">你的问题是什么?</a></li><li><a href="https://www.reddit.com/r/cscareerquestions/comments/1b8wa3/why_you_make_less_money/">为何你会赚钱少 • &#x2F;r&#x2F;cscareerquestions</a></li><li><a href="https://www.ocf.berkeley.edu/~wwu/riddles/hard.shtml"> wu :: riddles(hard) </a> : 逻辑题</li><li><a href="eulercoder.me/blog/career/Summer-Internship-the-ultimate-guide">夏季实习：最终篇</a></li><li><a href="http://jobsearch.about.com/od/interviewquestionsanswers/a/interviewquest.htm">求职面试问题和最好的答案</a></li><li><a href="http://adnjavainterview.blogspot.in/">Java面试问题与答案</a></li><li><a href="http://www.cmi.ac.in/~madhavan/courses/pl2006/lecturenotes/lecture-notes/lecture-notes.html">编程语言概念 课堂笔记 </a> :  面向对象概念和编程语言概念</li><li><a href="https://github.com/checkcheckzz/system-design-interview">系统设计面试</a></li><li><a href="http://www.techinterview.org/">一个站点提供技术面试题，逻辑题或者你想的其他内容 </a></li><li><a href="https://www.geekjc.com/ebook/detail/5ba5bcae7143880b09cb4d54/1537588096871">前端常见面试题汇总</a></li></ul><h1 id='documentaries'>纪录片</h1><ul><li><a href="https://www.youtube.com/watch?v=1fqxMuPmGak">什么都能问 Gayle Laakmann McDowell (程序员面试宝典的作者)</a></li><li><a href="https://www.youtube.com/watch?v=S23yie-779k">Breaking the Code: Alan Turing传</a></li><li><a href="https://www.youtube.com/watch?v=4NIb9l3imAo">攻破代码面试</a></li><li><a href="https://www.youtube.com/watch?v=Eg5-tdAwclo">攻破代码面试-全栈开发演讲者系列</a></li><li><a href="https://www.youtube.com/playlist?list=PLn-Y3vvQbmHO5WUcBdIWqiUfNawhC1cn3">书呆子的胜利</a> : Play-list</li><li><a href="https://www.youtube.com/watch?v=iOq5kSKqeR4">哈佛大学 CS50 - 渐进学习 (视频)</a></li><li><a href="https://www.youtube.com/watch?v=42KTvGYQYnA">cpu如何执行程序(视频)</a></li><li><a href="https://www.youtube.com/watch?v=Mv2XQgpbTNE">机器代码指令(视频)</a></li><li>机器改变世界 - 关于计算机历史的纪录片<ul><li><a href="http://www.youtube.com/watch?v=rcR74y61xZk">Part 1: 巨大的大脑 </a></li><li><a href="http://www.youtube.com/watch?v=1APZ5-cjWfw">Part 2: 发现未来</a></li><li><a href="http://www.youtube.com/watch?v=zwC3gOudlAc">Part 3: 台式计算机</a></li><li><a href="http://www.youtube.com/watch?v=4gzpd0irP58">Part 4: 机器的思考</a></li><li><a href="http://www.youtube.com/watch?v=J_3A2jSnvHE">Part 5: 指尖上的世界</a></li></ul></li><li><a href="https://www.youtube.com/watch?v=s1i-dnAH9Y4">机械计算机(All Parts) </a> : 20世纪50年代的一个视频，说明了在没有现代电子的情况下机械计算机是如何工作的</li><li><a href="https://www.youtube.com/watch?v=a-49a_CjH0M">Project Code Rush - netscape&#x2F;mozilla起源的纪录片</a></li><li><a href="https://teachyourselfcs.com/">自学计算机科学</a></li><li><a href="https://www.youtube.com/watch?v=XMm0HsmOTFI">Linux的故事</a></li><li><a href="https://www.youtube.com/playlist?list=PL_IlIlrxhtPMqW4b0-v8OgLvFZQes6SoZ">Download: 互联网的真实故事</a> : 发现频道关于浏览器战争和互联网泡沫的记录</li><li><a href="https://www.youtube.com/watch?v=fxjElWL8igo">Linux操作系统的故事 </a></li></ul><h1 id='moocs-for-learning-something-new'>学习新知识-mooc</h1><ul><li><a href="https://www.class-central.com/">课程中心</a> : 超过10万名学生评价的目录</li><li><a href="https://docs.google.com/spreadsheets/d/1BD8BJJUNaX63m2QmySWMGDp71nx4W4MyyiIBlfMoN3Q/htmlview?sle=true#">计算机科学资源 </a> : 针对自学者的mooc列表</li><li><a href="https://www.coursera.org/">Coursera.org</a> :在网上学习全世界最好的课程</li><li><a href="https://www.youtube.com/user/cs50tv/videos">CS50</a></li><li><a href="https://www.edx.org/">edX</a> : 免费在线课程，帮助你进步，改善你的生活</li><li><a href="https://www.kadenze.com/courses?subjects%5B%5D=7">Kadenze | Creative Programming</a>: 注重艺术和创造力的编程课</li><li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/">麻省理工学院电气工程和计算机科学</a>  </li><li><a href="http://mooc.fi/english.html">MOOC.fi</a> : 赫尔辛基大学在线课程</li><li><a href="https://onlinecourses.nptel.ac.in/explorer/search?category=COMP_SCI_ENGG">NPTEL Vidoes COMP_SCI_ENGG </a>  </li><li><a href="https://github.com/prakhar1989/awesome-courses/blob/master/README.md">prakhar1989&#x2F;awesome-CS-courses</a> : CS课程大汇总</li><li><a href="http://udacity.com/">Udacity</a></li><li><a href="https://www.youtube.com/user/UCBerkeley/videos">UCBerkeley</a></li><li><a href="https://github.com/prakhar1989/awesome-courses/blob/master/README.md">网上CS课程的收集</a></li><li><a href="https://www.geekjc.com/">极客教程</a></li></ul><h1 id='sites-related-to-your-preferred-programming-language-for-me-java'>与你偏爱的编程语言相关的网站(对我来说是Java)</h1><ul><li><a href="https://javahungry.blogspot.com/2014/02/best-books-for-learning-java-must-read.html">学习java的最好的书</a> : Java基础</li><li><a href="http://www.stroustrup.com/bs_faq2.html">Bjarne Stroustrup’s C++风格和技术问答</a> : C++问答</li><li><a href="http://www.stroustrup.com/bs_faq.html">Bjarne Stroustrup’s FAQ</a> : The C++ FAQ</li><li><a href="http://www.stroustrup.com/C++11FAQ.html">C++11 -新的ISO C++ 标准</a> : C++11问答</li><li><a href="https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff">编译器(视频)</a></li><li><a href="https://www.infoq.com/presentations/garbage-collection-benefits">深入Java：垃圾回收!</a></li><li><a href="http://www.artima.com/insidejvm/ed2/index.html">免费在线的章节用来学习java虚拟机</a></li><li><a href="http://www.dynatrace.com/en/javabook/how-garbage-collection-works.html">垃圾搜集如何工作</a>  </li><li><a href="https://github.com/sherxon/AlgoDS">算法、数据结构、面试问题和答案的实现 </a></li><li><a href="https://www.jetbrains.com/help/idea/keyboard-shortcuts-you-cannot-miss.html">IntelliJ键盘快捷键</a> :使用IntelliJ的键盘快捷键用来提高生产力</li><li><a href="http://www.artima.com/java/index.html">Java Corner at Artima.com </a></li><li><a href="http://www.cafeaulait.org/course/">Java课程笔记 </a></li><li><a href="http://www.javaoffheap.com/">Java堆</a> </li><li><a href="http://www.java-source.net/">Java-source</a> : Java开源软件</li><li><a href="http://www.cs.princeton.edu/~cos126/java_visualize/">Java Visualizer </a> : 帮助将引用，值，变量可视化</li><li><a href="http://www.journaldev.com/">JournalDev - Java, Java EE, Android, Web Development Tutorials</a></li><li><a href="http://chimera.labs.oreilly.com/books/1234000001805/index.html">Learning Java</a>:一个免费的在线学习Java语言的教材</li><li><a href="https://netbeans.org/project_downloads/usersguide/shortcuts-80.pdf">Netbeans的键盘快捷键</a> : 键盘快捷键能够使你在工作时提高生产力</li><li><a href="http://www.docjar.com/">搜索开源的Java API </a> : 浏览Java库的源代码，并且学习如何实现</li><li><a href="http://www.stroustrup.com/C++.html">C++编程语言</a> : C++编程语言</li><li><a href="http://www.cs.umd.edu/~pugh/java/memoryModel/">Java内存模型</a></li><li><a href="https://docs.oracle.com/javase/tutorial/">The Java™ Tutorials  </a> : 最好的Java手册</li><li><a href="http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals/">理解JVM</a></li><li><a href="https://plumbr.eu/handbook/what-is-garbage-collection">垃圾回收是什么</a> : 动态垃圾搜集</li><li><a href="http://www.javaworld.com/">Welcome to JavaWorld.com </a></li><li><a href="http://www.xyzws.com/javafaq/page/1">XyzWs Java FAQs </a> : Java面试题汇总</li></ul><h1 id='learn-ai'>AI学习</h1><ul><li><a href="http://course.fast.ai/">fast.ai</a> : 针对没有研究生水准的数学的开发者的免费实用的深度学习课程</li><li><a href="https://grakn.ai/">grakn.ai</a> : 数据库AI</li><li><a href="https://blog.openai.com/robots-that-learn/">Robots that learn</a> : 机器人学习</li><li><a href="https://blog.openai.com/unsupervised-sentiment-neuron/">无监督神经元</a></li><li><a href="https://blogs.nvidia.com/blog/2016/07/29/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/">AI、机器学习、深度学习的不同</a></li><li><a href="https://www.tensorflow.org/">TensorFlow</a> : 一个针对机器智能的软件开源库</li><li><a href="http://scikit-learn.org/">Scikit-learn</a> : 一个针对机器学习的Python模块</li><li><a href="https://www.deeplearning.ai/">DeepLearning.ai</a> : 深度学习课程，作者coursera的创建者，吴恩达</li><li><a href="http://blog.floydhub.com/coding-the-history-of-deep-learning/">深度学习的历史</a> </li><li><a href="https://github.com/SerpentAI/SerpentAI">Serpent AI</a> : 游戏代理框架</li></ul><h1 id='seminar--research-writing--talks-etc'>研讨会、研究性写作、会谈等</h1><ul><li><a href="http://www.cs.cmu.edu/~mleone/how-to.html">关于研究和写作的建议</a></li><li><a href="http://www.cse.iitd.ac.in/~srsarangi/articles.html">博士论文</a></li><li><a href="https://stephenhaunts.com/2015/10/02/practical-tips-for-talking-at-usergroups-and-conferences-part-1/">在会议上讨论的实用技巧</a></li><li><a href="https://www.cse.iitb.ac.in/~ranade/communicationskills.html">研讨会和报告</a></li><li><a href="http://latex.knobs-dials.com/">Latex参考</a></li><li><a href="https://github.com/LewisVo/Begin-Latex-in-minutes">Begin Latex in minutes</a> : 针对初学者的Latex的简单介绍帮助你轻松掌握Latex</li><li><a href="https://tobi.oetiker.ch/lshort/lshort.pdf">Lshort</a> : 对Latex2的详细介绍</li></ul><h1 id='everything-in-one-place'>知识汇总</h1><ul><li><a href="https://www.reddit.com/user/ashish2199/m/cs_student_subs">reddit.com&#x2F;user&#x2F;ashish2199&#x2F;m&#x2F;cs_student_subs</a> : 在reddits中计算机科学和编程相关的主题</li><li><a href="https://www.quora.com/What-are-the-best-websites-a-programmer-should-visit/answer/Ashish-Padalkar?srid=OH96">一个程序员应该访问的web站点</a> :发表在Quora上，作者ashish2199</li><li><a href="https://www.moocha.io/">Moocha</a> : 从edx、coursera、udacity等搜索在线课程</li><li><a href="https://devhints.io/">Rico’s cheatsheets</a> : 常用知识备忘集合</li><li><a href="http://devdocs.io/">API Documentation</a> : 一个众所周知的带有搜索接口的API文档，类似于dash</li></ul><h1 id='youtube-channels'>youtube频道</h1><ul><li><a href="https://www.youtube.com/channel/UC5e__RG9K3cHrPotPABnrwg">C++Now (BoostCon)</a> :当前的C++会议</li><li><a href="https://www.youtube.com/channel/UCU0Rt8VHO5-YNQXwIjkf-1g">code::dive conference</a> : 有诺基亚技术中心组织的会议</li><li><a href="https://www.youtube.com/CodingBlocks">Coding Blocks</a> : 指南，技巧</li><li><a href="https://www.youtube.com/user/Computerphile/videos">Computerphile </a> : 每个CS学生都应该看</li><li><a href="https://www.youtube.com/user/ComputerHistory/videos">ComputerHistory </a> : 针对那些想知道如何达成目标的人</li><li><a href="https://www.youtube.com/user/CppCon/videos?shelf_id=0&view=0&sort=dd">CppCon </a> : C++会议</li><li><a href="https://www.youtube.com/user/FacebookDevelopers/videos">Facebook Developers </a></li><li><a href="https://www.youtube.com/c/mpjmevideos">Fun Fun Function</a> : 每周一次的对编程主题的分类，也包括一些与编码不直接相关的内容</li><li><a href="https://www.youtube.com/user/GoogleDevelopers/videos">Google Developers </a></li><li><a href="https://www.youtube.com/user/GoogleTechTalks/videos">GoogleTechTalks </a> : 关于热门话题的视频和在技术界的一些趣事</li><li><a href="https://www.youtube.com/user/GynvaelEN">Gynvael Coldwin</a> :逆向工程和黑客（CTF）博客，每周三都有新的直播</li><li><a href="https://www.youtube.com/user/HowToBecomeTV/videos">HowToBecomeTV </a> : 与技术界相关的开发人员的好的面试</li><li><a href="https://www.youtube.com/user/java/videos">Java </a> : 有关Java的会谈</li><li><a href="https://www.youtube.com/channel/UCdDhYMT2USoLdh4SZIsu_1g/videos">JavaOne </a> : Java会议</li><li><a href="https://www.youtube.com/user/MeetingCPP/videos">Meeting C++ YT Kanalseite </a> : C++会议</li><li><a href="https://www.youtube.com/channel/UCGGRRqAjPm6sL3-WGBDnKJA/videos">Netflix UI Engineering</a> : web开发者，移动开发者和对Netflix技术栈感兴趣的视频</li><li><a href="https://www.youtube.com/user/OreillyMedia/videos">O’Reilly </a> : 世界最佳技术作家访谈录</li><li><a href="https://www.youtube.com/user/PlacementGrid/videos">Placement Grid </a> : 面试及校园实习经验</li><li><a href="http://www.aristeia.com/presentations.html">Scott Meyers: Past Talks </a></li><li><a href="https://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A">Siraj Raval</a> : AI和深度学习指南视频</li><li><a href="https://www.youtube.com/user/ThinMatrix/videos">ThinMatrix </a> : 开发者在java中使用OpenGL制作的一个3D游戏的博客和指南</li><li><a href="https://www.youtube.com/user/ThoughtbotVideo/videos">thoughtbot  </a> : 谈论各种话题</li><li><a href="https://www.youtube.com/user/technoparkcorp/videos">yegor256 </a></li></ul><h1 id='good-articles'>好文章</h1><ul><li><a href="http://carlcheo.com/compsci">白话40个关键的计算机科学概念</a>  </li><li><a href="https://dev.to/vaidehijoshi/a-gentle-introduction-to-graph-theory">关于图论的一个介绍</a></li><li><a href="http://moonscript.org/">一个对程序员友好的语言</a></li><li><a href="https://stevewedig.com/2014/02/03/software-developers-reading-list/">软件开发者的阅读列表</a> : 这是一些好书和链接 </li><li><a href="http://www.saminiir.com/lets-code-tcp-ip-stack-5-tcp-retransmission/">关于TCP&#x2F;IP协议栈的代码</a>: 编写一个TCP&#x2F;IP的协议栈，5:TCP重传</li><li><a href="https://codewords.recurse.com/issues/four/the-language-of-choice">代码的转换</a>:语言的选择</li><li><a href="https://techiedelight.quora.com/500-Data-Structures-and-Algorithms-practice-problems-and-their-solutions">数据结构与算法</a>:一些算法和数据结构的解决方案</li><li><a href="https://www.wikiwand.com/en/Java_bytecode">深入字节码</a></li><li><a href="http://blog.thefirehoseproject.com/posts/expectations-of-a-junior-developer/">初级开发者的想法</a></li><li><a href="https://0xax.gitbooks.io/linux-insides/content/Booting/linux-bootstrap-1.html">Linux内核</a></li><li><a href="https://www.wikiwand.com/en/List_of_algorithms">算法清单</a></li><li><a href="http://blog.thefirehoseproject.com/posts/learn-to-code-and-be-self-reliant/">提升编码技巧的关键</a></li><li><a href="https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/">Unicode编码</a></li><li><a href="http://multithreaded.stitchfix.com/">我们正在通过创新重塑零售业</a></li><li><a href="http://kunststube.net/encoding/">每个程序员都需要知道的关于在文本中设置编码和字符的内容</a></li><li><a href="http://futuretech.blinkenlights.nl/misc/cpumemory.pdf">每个程序员都应该了解的关于内存的内容-pdf</a></li><li><a href="https://fly.io/articles/why-fast-pages-are-important/">为什么网页的快速加载是很重要的</a>:为什么一个APP的速度决定了其收入</li><li><a href="https://qotoqot.com/blog/improving-focus/">qotoqot-提升技巧</a>:我是如何一个月工作200个小时的</li><li><a href="http://www.pixelbeat.org/docs/unix-parallel-tools.html">Pixel Beat - Unix</a>:使用unix工具并行处理</li><li><a href="https://hackernoon.com/learning-vim-what-i-wish-i-knew-b5dca186bef7">学习Vim</a>:我希望我应该知道什么</li></ul><h1 id='podcasts'>播客</h1><ul><li><a href="http://www.codingblocks.net/">Coding Blocks</a>:一个播客，涵盖最佳编程实践，设计模式，性能编码，面向对象编码，数据库设计和实现、提示、技巧和许多其他主题的内容</li><li><a href="http://developeronfire.com/episodes">水深火热的开发者</a>:一个播客，分享开发人员的人性，并讲述了由Dave Rael主持的一些令人惊叹的软件人物的故事</li><li><a href="https://spec.fm/podcasts/developer-tea">开发者茶话会</a> : 开发者在喝茶小憩时浏览的播客</li><li><a href="http://frontendhappyhour.com/">前端的欢乐时光</a>:来自Netflix，Evernote，Atlassian＆LinkedIn的软件工程师小组，讨论关于前端开发的所有事情的一个博客。</li><li><a href="http://www.fullstackradio.com/">无线电的所有流程</a>:包括从产品设计和用户体验到单元测试和系统管理。</li><li><a href="http://groovypodcast.podbean.com/">Groovy播客</a>:专用于Groovy编程语言及其生态系统的播客。</li><li><a href="https://devchat.tv/iphreaks">IPhreaks</a>:每周讨论一次关于iOS开发和开发中的最新技术，具体讨论苹果，工具，做法  和代码</li><li><a href="https://devchat.tv/js-jabber">JavaScript 论坛</a>:每周一次关于JavaScript，前端开发，社区，职业和框架的讨论。</li><li><a href="https://learntocodewith.me/podcast/">用我的播客学习代码</a>:以一个季为一集的科技播客，是由劳伦斯·布拉德福德（Laurence Bradford）主持，从科技职业到科技业务的课程</li><li><a href="http://msdevshow.com/">MS示例展示</a>:Jason Young和Carl Schweitzer谈到有关Azure云，Windows，Windows Phone，Visual Studio以及使用Microsoft平台的跨平台开发等最新的开发者新闻</li><li><a href="https://devchat.tv/react-native-radio">React Native Radio</a>:每周讨论使用JavaScript和React构建移动应用程序的工具，技术和技术</li><li><a href="https://softwareengineeringdaily.com/">软件工程日报</a>:关于软件主题的日常技术面试</li><li><a href="http://www.se-radio.net/">软件工程无线电</a>:针对专业软件开发人员的播客，目标是成为一个持久的教育资源而不是新闻</li><li><a href="https://syntax.fm/">语法</a> :对Wes Bos＆Scott Tolinski和Web开发人员来说是一个比较有趣的博客</li><li><a href="http://bikeshed.fm/">The Bike Shed</a> :参与者讨论他们的开发经验和Ruby，Rails，JavaScript等的挑战</li><li><a href="https://changelog.com/podcast">The Change log</a> : 每周一次的谈话，参与者都是开源技术的核心人员和创建者</li><li><a href="https://cynicaldeveloper.com/">愤世嫉俗的开发者</a> :一个播客，旨在通过解释最新和最伟大的开发技术，为您提供开发知识和职业生涯，并提供您作为开发人员取得成功的需要。覆盖桌面，网络和移动开发，主要围绕.Net堆栈，也经常研究其他软件和框架</li></ul><h1 id='building-a-simple-compilerinterpreter'>构建一个简单的编译器/解释器</h1><ul><li><a href="https://github.com/thejameskyle/the-super-tiny-compiler">snowman：可能是有史以来最小的编译器</a> : 这是一个超简化的例子，它描述了一个使用JavaScript编写的易于阅读的 现代编译器的所有主要部分</li><li><a href="http://aalhour.com/awesome-compilers/">精彩的编译器</a> : 编译器，翻译和运行的精彩资源列表</li><li><a href="http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/gem/html/GrowingCompiler.html">提升一个编译器</a> : 了解如何提升一个编译器  </li><li><a href="https://ruslanspivak.com/lsbasi-part1/">一起开发一个简单的解释器-第一章</a> : 尝试通过构建一个编译器，揭开它的神秘面纱</li><li><a href="http://c9x.me/compile/bib/">业余编译器开发者的资源</a> : 业余编译器开发者的资源</li><li><a href="https://sarabander.github.io/sicp/html/index.xhtml">计算机程序的构造与解释</a> : 计算机程序的结构和解释</li><li><a href="https://dev.to/fcpauldiaz/writing-my-first-compiler">我开发的第一个编译器</a> : 写出你的第一个编译器</li><li><a href="https://nicoleorchard.com/blog/compilers">编译器简介</a> : 如何与计算机说话，例如Siri先生</li><li><a href="http://staff.polito.it/silvano.rivoira/HowToWriteYourOwnCompiler.htm">编写自己的编译器</a> : 如何编写自己的编译器</li></ul><h1 id='tutorials'>教程</h1><ul><li><a href="https://wildlyinaccurate.com/a-hackers-guide-to-git/">A Hacker’s Guide to Git</a> : 为那些想学习git的人打下坚实的基础</li><li><a href="http://duartes.org/gustavo/blog/best-of/">Best Of - Gustavo Duarte</a> : 包含各种主题的文章</li><li><a href="http://cs.lmu.edu/~ray/classes/dsa/">CMSI 281: Data Structures</a> : 针对数据结构的轻量级的说明</li><li><a href="http://overapi.com/">Collecting all the cheat sheets</a> : 大量编程语言的接口表</li><li><a href="http://users.cs.cf.ac.uk/Dave.Marshall/C/CE.html">C Programming</a></li><li><a href="http://c-faq.com/index.html">C编程语言常见问题</a></li><li><a href="http://oopweb.com/Algorithms/Documents/PLDS210/VolumeFrames.html">Data Structures and Algorithms by John Morris</a> : 代码和其分析的另一个好的来源</li><li><a href="https://www.slideshare.net/olvemaudal/deep-c">深入学习C语言</a> : 关于C语言的一个很好的演示</li><li><a href="https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612">设计模式：可重用面向对象的软件的基础</a> : aka the “Gang Of Four” book, or GOF</li><li><a href="http://prismoskills.appspot.com/lessons/Dynamic_Programming/Chapter_01_-_Introduction.jsp">Dynamic programming - PrismoSkills</a> : 学习如何解决动态规划问题</li><li><a href="https://maryrosecook.com/blog/post/git-from-the-inside-out">Git从入门到精通</a></li><li><a href="https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124">Head First Design Patterns</a></li><li><a href="http://cs.fit.edu/~mmahoney/cse2050/how2cpp.html">How to Program in C++</a> : 怎样学习C++编程，关于学习C++和STL的好资源</li><li><a href="http://www.mysqltutorial.org/">http://www.mysqltutorial.org/</a></li><li><a href="https://indradhanush.github.io/blog/writing-a-unix-shell-part-3/">indradhanush tutotials</a> : 写一个Unix核 </li><li><a href="http://www.le.ac.uk/users/rjm1/cotter/index.htm">Introduction to C Programming</a></li><li><a href="http://freeengineer.org/learnUNIXin10minutes.html">10分钟搞定UNIX</a></li><li><a href="http://linuxcommand.org/">Learning the shell.</a></li><li><a href="https://linuxjourney.com/">Linux Journey</a> : 学习Linux的好站点</li><li><a href="https://ryanstutorials.net/linuxtutorial/">Linux Tutorial</a> : 学习Linux的好资源</li><li><a href="https://guides.github.com/features/mastering-markdown/">More about Github-flavored markdown</a></li><li><a href="http://www.techotopia.com/index.php/MySQL_Essentials">MySQL Essentials</a></li><li><a href="http://opendatastructures.org/">Open Data Structures</a> : 用来学习数据结构和算法的优秀的资源提供了C++ , Java等各种语言的伪代码</li><li><a href="https://www2.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/">OS Course Notes</a> : Galvin’s书的章节笔记</li><li><a href="https://dzone.com/">从新手到专家-编程、web开发、DevOps新闻，教程和工具</a></li><li><a href="http://www.cheat-sheets.org/sites/sql.su/">SQL (Structured Query Language) in one page : SQL.SU</a> : 结构化查询语言，一个非常好的SQL记录表</li><li><a href="https://www.subtle.press/course/poor-mans-ci">Subtle | Poor Man’s CI</a> : 了解连续集成平台如何工作，通过使用Node.js构建您自己的git之一</li><li><a href="https://en.wikipedia.org/wiki/TCP/IP_Illustrated">TCP&#x2F;IP图解</a></li><li><a href="http://guide.bash.academy/">The Bash Guide</a> : 学习Bash Shell的优秀教程</li><li><a href="https://www.chiark.greenend.org.uk/~sgtatham/cdescent/">The Descent to C</a> : 针对那些从高级编程语言像java或者python迁移到C的人</li><li><a href="https://www.amazon.com/Linux-Command-Line-Complete-Introduction/dp/1593273894">The Linux 命令行: yige完整介绍</a></li><li><a href="http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=info">The Unix环境编程</a></li><li><a href="https://www.topcoder.com/community/data-science/data-science-tutorials/">TopCoder Tutorials</a></li><li><a href="https://www.tutorialspoint.com/">Tutorialspoint</a> : UPSC，IAS，PCS，公务员，银行，能力，问题，答案，解释，面试，入学考试，解决方案的文本和视频教程</li><li><a href="https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057">UNIX和Linux系统管理员手册 第四版</a></li><li><a href="https://vimtutorplus.herokuapp.com/exercise/1">VimTutor+</a> : 从浏览器上学习VIM</li><li><a href="https://www.w3schools.com/">W3Schools在线Web教程</a> </li><li><a href="https://www.dartmouth.edu/~rc/classes/ksh/print_pages.shtml">Unix Shell</a> : ksh &#x2F; bash的Unix shell脚本</li><li><a href="http://snapsvg.io/">Snap SVG</a> : 现代Web的JavaScript SVG库</li><li><a href="https://vim.rtorr.com/">vim.rtorr</a> : Vim Cheat Sheet</li><li><a href="http://www.openvim.com/tutorial.html">Open Vim</a> :  交互式Vim教程</li><li><a href="http://thume.ca/2017/06/17/tree-diffing/">Algorithm Using Dynamic Programming and A</a> : 使用动态编程和A*设计树差分算法</li><li><a href="https://www.learnpython.org/">Learn Python</a> : 免费的交互式Python教程</li><li><a href="https://www.viva64.com/en/b/0533/">C++17</a> : C ++指南17</li></ul><h1 id='watch-others-code'>欣赏他人的代码</h1><ul><li><a href="https://www.liveedu.tv/">LiveEdu.tv</a> :  构建应用，网站游戏等人的视频</li><li><a href="https://www.twitch.tv/communities/programming">Twitch.tv</a> : Twitch的编程社区</li></ul><h1 id='what-should-a-programmer-know'>一个程序员应该知道的东西</h1><ul><li><a href="https://github.com/">GitHub.com Build software better, together</a> : 向其他人展示你的项目和与人协作的地方（为了更高效的使用它必须知道Git）</li><li><a href="https://about.gitlab.com/">Gitlab提供无限制的私有库，和无限制的组织</a></li><li><a href="http://sijinjoseph.com/programmer-competency-matrix/">程序员能力矩阵</a> :  一篇用来了解我们作为程序员的水平的文章</li></ul><h1 id='competitive-programming'>编程比赛</h1><ul><li><a href="https://projecteuler.net/archives">Archived Problems - Project Euler</a> : 问题归档</li><li><a href="https://artofproblemsolving.com/">Art of Problem Solving</a> : 数学课对你来说太容易了吗？你来到正确的地方！</li><li><a href="https://www.codechef.com/">CodeChef</a> : 唯一的编程比赛Web 2.0平台</li><li><a href="https://codefights.com/">Codefights</a> : 测试你的编码技巧</li><li><a href="http://codeforces.com/">Codeforces</a> : 编程竞赛，在线计算机编程</li><li><a href="https://www.codewars.com/">Codewars</a> : 根据完成代码排名</li><li><a href="https://codility.com/">Codility</a> : 验证和提高编码技能</li><li><a href="https://www.codingame.com/start">Codingame</a> : 通过游戏和挑战学习编码！</li><li><a href="https://code.google.com/codejam/past-contests">Google Code Jam Practice and</a> : 过去比赛的练习题</li><li><a href="https://www.hackerearth.com/">HackerEarth - Programming challenges and Developer jobs</a></li><li><a href="https://www.hackerrank.com/">HackerRank</a> : 实践编码、竞争、找工作</li><li><a href="http://poj.org/problemlist">PKU ACM ICPC Practice problems</a> : ACMACPC 在线审核</li><li><a href="http://www.spoj.com/">Sphere Online Judge (SPOJ)</a> : 成为一名真正的编程硕士学习如何编写和构建高效的算法</li><li><a href="https://www.topcoder.com/">Topcoder</a> : 通过更多的包为代码提供更快的速度</li><li><a href="https://uva.onlinejudge.org/">UVa Online Judge</a> : 支持多种语言的数百种问题</li><li><a href="https://wakatime.com/">WakaTime</a> : 通过编辑器插件收集编码度量的排行榜</li></ul><h1 id='computer-books'>计算机书籍</h1><ul><li><a href="http://programming-motherfucker.com/become.html">Become a Programmer, Motherfucker (list of books)</a> :来自Zed A. Shaw的书籍详尽清单</li><li><a href="http://gatecse.in/best-books-for-gatecse/">最佳图书奖</a></li><li><a href="https://cses.fi/book.html">cses.fi&#x2F;book.html</a></li><li><a href="https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books.md">github.com&#x2F;vhf&#x2F;free-programming-books</a> : 超过500本免费电子书几乎包括你能想到的所有语言</li><li><a href="https://www.gitbook.com/">GitBook</a> : GitBook 可以帮助您的团队在线编写，协作和发布内容</li><li><a href="https://jakevdp.github.io/PythonDataScienceHandbook/">Data Science course</a> : Python数据科学手册</li></ul><h1 id='video-tutorials'>视频指南</h1><ul><li><a href="https://www.youtube.com/channel/UCJUmE61LxhbhudzUugHL2wQ/videos">codedamn</a> : 前端Web开发教程</li><li><a href="https://www.codeschool.com/">代码学院</a> : PluralSight公司和一个有抱负和有经验的开发人员的互动学习的地方</li><li><a href="https://www.youtube.com/user/CodingMadeEasy/videos">CodingMadeEasy</a> : C ++教程</li><li><a href="https://www.youtube.com/playlist?list=PL6B940F08B9773B9F">CS1: Higher Computing - Richard Buckland UNSW</a> : 一个很好的介绍性的CS课程</li><li><a href="https://www.youtube.com/user/derekbanas/videos">Derek Banas</a> : 优质的教程</li><li><a href="http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToAlgorithms">算法的设计与分析</a></li><li><a href="https://www.youtube.com/user/DevTipsForDesigners/videos">DevTips</a> : web开发教程</li><li><a href="https://www.youtube.com/channel/UC4DwZ2VXM2KWtzHjVk9M_xg/videos">Kathryn Hodge</a> : 为初学者提供好视频</li><li><a href="https://www.youtube.com/user/mycodeschool/videos">mycodeschool</a> : 数据结构和算法教程</li><li><a href="https://www.pluralsight.com/">Pluralsight</a> :通过多个短期课程学习软件开发，DevOps和数据科学</li><li><a href="https://www.youtube.com/user/thenewboston/videos">thenewboston</a> : 课程很好但是与实际内容相比有点啰嗦</li><li><a href="https://www.youtube.com/user/tusharroy2525/videos">Tushar Roy</a> : 印度Youtuber的算法和数据结构教程</li><li><a href="http://derekwyatt.org/vim/tutorials/index.html">Vim Tutorial Videos - Flarfnoogins</a> : 用于学习Vim好的视频教程</li><li><a href="https://forum.xda-developers.com/general/xda-university">XDA-University - Helping You Learn Android Development</a>:帮助您学习Android开发</li><li><a href="https://www.khanacademy.org/computing/computer-science">Khan Academy</a> : 免费学习计算机科学</li><li><a href="https://www.youtube.com/watch?v=1PhArSujR_A">Functional programming</a> : John Carmack功能编程（2013）</li><li><a href="https://vimeo.com/album/2838732">Video about vims</a> : 关于Vim的一系列教程</li></ul><h1 id='online-compiler-and-sharing-code-snippets'>在线编译和共享代码片段</h1><ul><li><a href="https://codepad.remoteinterview.io/">CodePad</a> : 支持代码编写，测试和运行，支持超过25种语言</li><li><a href="https://codesandbox.io/">Codesandbox.io</a> : CodeSandbox可以更轻松地创建，与他人共享和重用React项目</li><li><a href="https://godbolt.org/">Godbolt.org</a> : 一款非常优秀的工具用来探索在不同编译器没有优化时的输出</li><li><a href="https://ideone.com/">Ideone.com</a> : 用于60多种编程语言的在线编译和调试工具</li><li><a href="https://jsfiddle.net/">JSFiddle</a> : 在线测试你的javascript，CSS，HTML或者CoffeeScript</li><li><a href="https://pastebin.com/">Pastebin.com</a></li><li><a href="https://c9.io/">C9.io</a> : 在云端的开发环境</li><li><a href="https://gist.github.com/">Github Gist</a> : 即时分享代码，笔记和片段</li></ul><h1 id='blogs-of-developers'>开发者博客</h1><ul><li><a href="http://algo-geeks.blogspot.com/">Algo-Geeks</a> : 编程拼图，数学技巧，算法等</li><li><a href="http://antirez.com/latest/0">Antirez - Redis Creator’s blog</a> : Antirez的博客</li><li><a href="http://code.antonio081014.com/">Antonio081014’s Algorithms Codes</a> : RULE下的世界  </li><li><a href="http://www.askamanager.org/archives">Archives — Ask a Manager</a> : 人力资源相关的东西</li><li><a href="http://lucumr.pocoo.org/">Armin Ronacher’s Thoughts and Writings</a> : 关于Python和开源的博客</li><li><a href="http://matt.might.net/articles/">blog.might.net</a> : might dot net的博客</li><li><a href="http://www.brendangregg.com/">Brendon Gregg - Linux Kernel Dev</a> : Brendon D. Gregg博客</li><li><a href="http://blog.cleancoder.com/">Clean Coder Blog</a> : 《代码整洁之道》一书作者的博客</li><li><a href="https://codeahoy.com/">CodeAhoy</a> : 软件和人为因素的博客，100％测试人类</li><li><a href="http://www.codergears.com/Blog/">CoderGears Blog Insights from</a> : the CoderGears Team</li><li><a href="http://coding-geek.com/">Coding Geek - A blog about IT, programming and Java</a> : 关于IT，编程和Java的博客</li><li><a href="https://blog.codinghorror.com/">Coding Horror</a> : 一个最好的编码博客</li><li><a href="http://www.cseblog.com/">CSE Blog</a> : 量子，数学，计算机科学难题</li><li><a href="https://www.daedtech.com/">Daedtech.com</a> : 有关软件的故事</li><li><a href="https://dandreamsofcoding.com/">Dan Dreams of Coding</a></li><li><a href="https://lemire.me/blog/">Daniel Lemire’s Blog</a> : Daniel Lemire的博客</li><li><a href="http://eli.thegreenplace.net/">Eli Bendersky</a> : 从Python到LLVM的一切</li><li><a href="https://avidullu.wordpress.com/">Geek Land</a> : 我珍贵的收藏品</li><li><a href="http://blog.hackerearth.com/">HackerEarth Blog</a> : 黑客博客</li><li><a href="http://rodiongork.tumblr.com/">IT Enthusiast</a> : IT热衷者</li><li><a href="https://www.joelonsoftware.com/">Joel on Software</a> : StackOverflow首席执行官的博客</li><li><a href="https://latedev.wordpress.com/">Late Developer</a> :  一个老C ++人的随机想法</li><li><a href="http://1ucasvb.tumblr.com/">1ucasvb’s laboriginal math and physics visualization</a> : Lucas Vieira Barbosa的实验室原始数学和物理可视化</li><li><a href="https://jeremykun.com/">Math ∩ Programming</a> : Math ∩ Programming</li><li><a href="http://www.mytechinterviews.com/">My Tech Interviews</a> : 准备技术访谈</li><li><a href="http://www.paulgraham.com/articles.html">Paul Graham Essays</a> : Paul Grahan Essays</li><li><a href="http://www.yegor256.com/">Programming Blog</a> : Yegor Bugayenko的编程博客   </li><li><a href="http://prog21.dadgum.com/">Programming in the 21st Century</a> : 二十一世纪的编程</li><li><a href="http://sudhakar.online/">rudhakar Rayavaram</a> : Sudhakar Rayavaram博客</li><li><a href="https://tianrunhe.wordpress.com/">Runhe Tian Coding Practice</a> : 苹果，谷歌，Facebook，亚马逊和微软的技术面试问题</li><li><a href="https://www.nayuki.io/category/programming">Small Programming Challenges and Puzzles</a> : Nayuki项目</li><li><a href="https://stephenhaunts.com/">Stephen Haunts { Coding in the Trenches }</a> : 软件开发，架构和技术领导力</li><li><a href="http://stevehanov.ca/blog/">stevehanov.ca</a> : 我知道如何在线制作和销售软件，我可以和你分享我的提示</li><li><a href="http://blog.takipi.com/">Takipi Blog</a> : 主要关注Java和JVM语言</li><li><a href="http://www.wildml.com/">WildMl</a> : 机器学习博客</li><li><a href="https://forum.xda-developers.com/">XDA - Android Developer Forum</a> : Android开源开发者论坛</li></ul><h1 id='for-improving-your-english'>用来提高你的英语</h1><ul><li><a href="https://www.englishclub.com/learn-english.htm">Englishclub.com&#x2F;learn-english</a></li><li><a href="http://grammar.ccc.commnet.edu/grammar/">语法和写作指南</a> : 对于那些想提高英语语言能力的人</li><li><a href="http://www.grammarbook.com/english_rules.asp">标点符号和字母大小写规则</a></li><li><a href="https://owl.english.purdue.edu/">PPurdue大学在线写作实验室</a></li><li><a href="https://www.quia.com/shared/english/">Quia - English</a></li></ul><h1 id='when-you-get-bored-from-cs-related-stuff'>当你厌倦了CS相关的东西</h1><ul><li><a href="https://www.youtube.com/user/barcroftmedia/featured">Barcroft TV</a> : 构成世界的各种各样的人的短小的纪录片</li><li><a href="https://www.youtube.com/user/bigthink/videos">Big Think</a> : 专家驱动，可操作的教育内容，包括比尔·克林顿到比尔·奈</li><li><a href="https://www.youtube.com/user/coldfustion/videos">ColdFusion</a> : 过去的当前的以及未来的技术</li><li><a href="https://www.youtube.com/user/crashcourse/videos">CrashCourse</a> : 各种科目的小班课程</li><li><a href="https://www.youtube.com/user/everyframeapainting/videos">Every Frame a Painting</a> : 高质量的电影分析</li><li><a href="https://www.youtube.com/user/NationalGeographic/videos">National Geographic</a> 来自世界各地的高品质内容</li><li><a href="https://www.reddit.com/r/ProgrammerHumor/">r&#x2F;ProgrammerHumor</a> : Subreddit 用于听什么像什么</li><li><a href="https://www.reddit.com/">Reddit the front page of the internet</a> : 适合有大把空闲时间的人</li><li><a href="https://www.youtube.com/user/VineMontanaTV/videos">Ridddle</a> : 关于科学的YouTube频道，主要是但不仅仅是宇宙和空间</li><li><a href="https://www.youtube.com/user/scishow/videos">SciShow</a> : 有关您一直想知道的有趣问题的答案</li><li><a href="https://www.youtube.com/user/destinws2/videos">SmarterEveryDay</a> : 关于我们周围世界的许多惊人的科学信息，通常用高速摄像机</li><li><a href="https://www.youtube.com/user/TEDtalksDirector/videos">TED</a> : 谈论技术，娱乐和设计</li><li><a href="https://www.youtube.com/user/TestTubeNetwork/videos">TestTube News</a> : 有关世界各地新闻的有趣信息</li><li><a href="https://www.reddit.com/">Reddit the front page of the internet</a> : 适合有大把空闲时间的人</li><li><a href="http://www.bbc.com/future/story/20170601-the-secret-to-a-long-and-healthy-life-eat-less">How to live for long time ?</a> : 长寿的秘密</li><li><a href="https://www.youtube.com/user/Vsauce/videos">Vsauce</a> : 最好的YouTube频道</li><li><a href="http://www.ox.ac.uk/research/research-in-conversation/how-live-happy-life/dr-bronwyn-tarr#">Ox A cuk</a> : 如何过幸福的生活</li><li><a href="https://www.lonelyspeck.com/the-milky-way-in-los-angeles-light-pollution/">lonelyspeck</a> : 关于轻污染天文摄影的权利的曝光 - Palos Verdes，洛杉矶，加利福尼亚州</li></ul><h1 id='open-source-websites'>开源网站</h1><ul><li><a href="https://openhatch.org/">Open Hatch</a> : OpenHatch是一个非营利组织，致力于将潜在的免费软件贡献者与社区，工具和教育相匹配 </li><li><a href="sourceforge.net">Source Forge</a> : SourceForge主持着近28万个项目（最后一次）。它每天提供超过200万次下载，并包含各种类别的应用程序和工具</li><li><a href="code.google.com/projecthosting">Google Code</a> : Google使用Subversion或Mercurial版本控制系统为开源项目提供免费托管服务。它提供2GB的存储，集成的代码审查工具，维基和问题跟踪。 Google Code网站还提供了Google许多公开API和其他开发人员工具的链接。</li><li><a href="launchpad.net">Launch Pad</a> :由Canonical、LaunchPad维护，特别针对在Ubuntu上运行的项目。它为超过21,000个使用Bazaar版本控制系统的项目提供托管</li><li><a href="opensource.google.com">Google Open Source</a> : Google开源</li><li><a href="developer.redhat.com">Red Hat Developer</a> : 全球领先的开源解决方案提供商</li><li><a href="opensource.com">Open Source</a> : 开源</li><li><a href="https://summerofcode.withgoogle.com/">Google Summer of Code</a> : Google Summer of Code是一项全球性计划，致力于将更多的学生开发人员引入开源软件开发。学生在休学期间，用户3个月与一个开源组织合作完成的编程项目</li><li><a href="http://www.oswd.org/">Open Source Web Design</a> : 开源网页设计是一个共享符合标准的免费网页设计模板的平台。我们通过良好的设计给网络发布商一个通知</li><li><a href="https://wiki.mozilla.org/Security/Automation/Winter_Of_Security_2016">Mozilla Winter of Security</a> : 安全冬季（MWOS）是由Mozilla安全小组组织的一个计划：让学生参与安全项目，学生必须执行一个学期项目作为大学课程的一部分，可以选择其中一个MWOS项目</li><li><a href="http://www.eclipse.org/org/foundation/eclipselabs/faq.php">Eclipse Lab</a> : Eclipse Labs是一个基于Eclipse平台构建技术的开源项目社区。它提供开源项目通常需要的基础架构服务，如代码存储库，错误跟踪，项目网站&#x2F; wiki。 Eclipse Labs由Google Code Project Hosting托管，所以对于已经使用Google Code Project Hosting的开发人员来说，这将非常熟悉</li><li><a href="https://bitbucket.org/">Bit Bucket</a> : 像GitHub一样，BitBucket也承载了公共和私人项目。在这个网站上，少于五个用户的开源项目和私人项目是免费的。它拥有超过48,000个存储库，其中许多存储库可在现场进行搜索site.</li><li><a href="https://www.mediawiki.org/wiki/MediaWiki">Media Wiki</a> : MediaWiki是一款用PHP编写的免费软件开源维基软件包，最初用于维基百科。现在也被非营利维基媒体基金会和许多其他维基的其他项目使用，包括这个网站，MediaWiki的主页</li><li><a href="https://codecuriosity.org/">Code Curiosity</a> : CodeCuriosity是一个鼓励开放源代码的平台，无论项目是大还是小，每个人都为自己的努力而获得回报</li><li><a href="https://www.codetriage.com/">Code Triage</a> : 帮助完成您最喜欢的开源项目，并在开发过程中成为更好的开发人员</li><li><a href="http://issuehub.io/">Issue Hub</a> : 贡献于开源。搜索问题标签为您找到正确的项目</li><li><a href="http://up-for-grabs.net/">Up for Grabs</a> : 这是一个专门为新贡献者策划的项目的列表。这些是开始使用项目的好方法，或是帮助分享开源项目的负担。</li><li><a href="http://www.firsttimersonly.com/">First Timers Only</a> : 首次对开放源码做出贡献可能是可怕的，有点压倒性。也许你是一个代码新手，或者你已经编码了一段时间，但还没有找到一个你觉得自己很有帮助的项目</li><li><a href="http://yourfirstpr.github.io/">Your First PR</a> : 您的第一个公关帮助在GitHub和其他地方展示最佳启动器问题为开源做贡献</li></ul><h1 id='Special Thanks'>特别感谢</h1><ul><li>如果您发现这很有用或考虑也参与并作出贡献，请考虑一个github Star。</li><li>特别感谢Ashish Padalkar（@ ashish2199）为初始版本原始帖子贡献了大量的数据和结构。</li></ul><p>  <em><strong>Maintained with :heart: by sdmg15 &amp; al</strong></em></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 align=&quot;center&quot;&gt;
    &lt;br&gt;
    &lt;img width=&quot;200&quot; src=&quot;https://cdn.rawgit.com/sindresorhus/awesome/master/media/logo.svg&quot; alt=&quot;awesome&quot;&gt;
   </summary>
      
    
    
    
    <category term="转载" scheme="https://shyi.org/categories/%E8%BD%AC%E8%BD%BD/"/>
    
    
  </entry>
  
  <entry>
    <title>Flexget的安装与使用</title>
    <link href="https://shyi.org/posts/30568/"/>
    <id>https://shyi.org/posts/30568/</id>
    <published>2022-04-13T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.946Z</updated>
    
    <content type="html"><![CDATA[<h2 id="安装flexget："><a href="#安装flexget：" class="headerlink" title="安装flexget："></a>安装flexget：</h2><h3 id="1-docker安装"><a href="#1-docker安装" class="headerlink" title="1.docker安装"></a>1.docker<a href="https://hub.docker.com/r/wiserain/flexget">安装</a></h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt-get update <span class="hljs-comment"># 更新 apt 包索引。</span><br>curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun <span class="hljs-comment"># 使用官方安装脚本自动安装</span><br>apt install docker.io<br>apt install docker-compose<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -d \<br>    --name=flexget \<br>    --restart unless-stopped \<br>    -p 5050:5050 \<br>    -v /home/user/flexget/data:/data \<br>    -v /home/user/flexget/config:/config \<br>    -e FG_WEBUI_PASSWD=trf69Z5jfv5H3PNC \<br>    -e FG_LOG_LEVEL=info \<br>    -e FG_LOG_FILE=flexget.log \<br>    -e TZ=Asia/Shanghai \<br>wiserain/flexget:latest<br>  <span class="hljs-comment"># passwd密码要有复杂度，像123那样的运行不了</span><br>  <span class="hljs-comment"># passwd那栏等号前后不能有空格</span><br>  <span class="hljs-comment"># \前面要有一个空格</span><br>  <span class="hljs-comment"># 如果密码有特殊符号，建议添加&quot;&quot;里面</span><br>  <span class="hljs-comment"># 容器重启后会重制为默认密码</span><br></code></pre></td></tr></table></figure><p>docker-compose安装：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3.3&#x27;</span><br><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">flexget:</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">flexget</span><br>    <span class="hljs-attr">restart:</span> <span class="hljs-string">unless-stopped</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;5050:5050&#x27;</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;/home/user/flexget/data:/data&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;/home/user/flexget/config:/config&#x27;</span><br>    <span class="hljs-attr">environment:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;FG_WEBUI_PASSWD=trf69Z5jfv5H3PNC&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;FG_LOG_LEVEL=info&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;FG_LOG_FILE=flexget.log&#x27;</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&#x27;TZ=Asia/Shanghai&#x27;</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">&#x27;wiserain/flexget:latest&#x27;</span><br></code></pre></td></tr></table></figure><figure class="highlight livecodeserver"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs livecodeserver">若出现 cify <span class="hljs-keyword">a</span> <span class="hljs-built_in">version</span> <span class="hljs-keyword">of</span> <span class="hljs-string">&quot;2&quot;</span> (<span class="hljs-keyword">or</span> <span class="hljs-string">&quot;2.0&quot;</span>) <span class="hljs-keyword">and</span> place your service definitions under <span class="hljs-keyword">the</span> `services` key, <span class="hljs-keyword">or</span> omit <span class="hljs-keyword">the</span> `<span class="hljs-built_in">version</span>` key <span class="hljs-keyword">and</span> place your service definitions <span class="hljs-keyword">at</span> <span class="hljs-keyword">the</span> root <span class="hljs-keyword">of</span> <span class="hljs-keyword">the</span> <span class="hljs-built_in">file</span> <span class="hljs-built_in">to</span> use <span class="hljs-built_in">version</span> <span class="hljs-number">1.</span><br>请将<span class="hljs-built_in">version</span>: <span class="hljs-string">&quot;3&quot;</span>改成<span class="hljs-built_in">version</span>: <span class="hljs-string">&quot;2&quot;</span><br><span class="hljs-comment"># flexget日志等配置文件位于/home/user/flexget/config/flexget.log</span><br></code></pre></td></tr></table></figure><blockquote><p>然后 docker-compose up -d</p></blockquote><h3 id="2-pip安装"><a href="#2-pip安装" class="headerlink" title="2.pip安装"></a>2.pip安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># pip3 install --upgrade pip</span><br><span class="hljs-comment"># pip3 install --upgrade setuptools</span><br><span class="hljs-comment"># 安装flexget</span><br>pip3 install flexget <span class="hljs-comment">#安装flexget，报错执行上面两行命令</span><br><span class="hljs-built_in">which</span> flexget <span class="hljs-comment">#查询 FlexGet 安装位置，例如位置为 /usr/local/bin/flexget</span><br>flexget -V <span class="hljs-comment">#查看flexget版本</span><br><span class="hljs-comment"># 配置Flexget目录及config文件</span><br><span class="hljs-built_in">mkdir</span> /root/.flexget <span class="hljs-comment">#创建.flexget目录</span><br>vim /root/.flexget/config.yml <span class="hljs-comment"># 创建及更改config.yml内容</span><br><span class="hljs-built_in">mkdir</span> ~/.flexget/plugins &amp;&amp; <span class="hljs-built_in">cd</span> ~/.flexget/plugins &amp;&amp; wget https://github.com/Juszoe/flexget-nexusphp/releases/download/v1.4/nexusphp.py <span class="hljs-comment">#创建plugins目录，下载nexusphp插件</span><br>flexget daemon start --daemonize <span class="hljs-comment">#开启 webui 后台运行</span><br><span class="hljs-comment"># pip太难，不建议使用</span><br></code></pre></td></tr></table></figure><h3 id="3-pyenv-Quickbox-Lite"><a href="#3-pyenv-Quickbox-Lite" class="headerlink" title="3.pyenv (Quickbox Lite)"></a>3.pyenv (Quickbox Lite)</h3><blockquote><p>从 1.3.5 开始，FlexGet 将会以 <strong>pyenv</strong> 环境安装，二进制路径更改为 <code>/home/$&#123;username&#125;/.local/flexget3/bin/flexget</code></p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">crontab -e -u <span class="hljs-variable">$&#123;username&#125;</span><br>添加以下内容(每分钟运行示例):<br><span class="hljs-comment"># min hour  day month week    command</span><br>  */1 *     *   *     *       /home/<span class="hljs-variable">$&#123;username&#125;</span>/.local/flexget3/bin/flexget -c /home/<span class="hljs-variable">$&#123;username&#125;</span>/.config/flexget/config.yml --cron execute<br><span class="hljs-comment"># flexget可执行文件位于/home/$&#123;username&#125;/.local/flexget3/bin/flexget</span><br><span class="hljs-comment"># flexget日志等配置文件位于/home/$&#123;username&#125;/.config/flexget/</span><br></code></pre></td></tr></table></figure><h2 id="flexget的使用"><a href="#flexget的使用" class="headerlink" title="flexget的使用"></a>flexget的使用</h2><h3 id="1-修改密码"><a href="#1-修改密码" class="headerlink" title="1.修改密码"></a>1.修改密码</h3><h4 id="1-docker"><a href="#1-docker" class="headerlink" title="1.docker"></a>1.docker</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it flexget /bin/bash   <span class="hljs-comment">#进入容器</span><br>flexget web passwd xxxx  <span class="hljs-comment">#修改密码，复杂度</span><br><span class="hljs-comment"># 这里修改的密码会在容器重启后恢复默认，如果想要永久修改密码，那么请重新建立容器</span><br></code></pre></td></tr></table></figure><h4 id="2-pip"><a href="#2-pip" class="headerlink" title="2.pip"></a>2.pip</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">flexget web passwd xxxx <span class="hljs-comment">#设置web ui 后台密码 为 xxxx</span><br></code></pre></td></tr></table></figure><h4 id="3-pyenv"><a href="#3-pyenv" class="headerlink" title="3.pyenv"></a>3.pyenv</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">/home/<span class="hljs-variable">$&#123;username&#125;</span>/.local/flexget3/bin/flexget web passwd xxxx <span class="hljs-comment">#设置web ui 后台密码 为 xxxx</span><br></code></pre></td></tr></table></figure><h3 id="2-命令行使用flexget"><a href="#2-命令行使用flexget" class="headerlink" title="2.命令行使用flexget"></a>2.命令行使用flexget</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs bash">flexget --<span class="hljs-built_in">test</span> execute<br><span class="hljs-comment"># 如配置文件存在语法错误，会提示你在第几行有什么错误 如果配置文件没问题的话则会测试执行，不会真的下种子，可以用来测试配置文件写得是否合乎预期</span><br><br>flexget execute --learn<br><span class="hljs-comment"># 第一次使用 RSS 的时候难免会下载到一些已经出种的老种，为了解决这个情况，第一次执行 flexget 的时候，可以用</span><br><span class="hljs-comment"># 这样子不会下载种子，但是会把这次 RSS 到的种子标记为已下载，这样之后就不会下到老种了</span><br><span class="hljs-comment"># docker安装的需要执行docker容器后使用命令</span><br><span class="hljs-comment"># pip安装的自动设置了环境变量，能够直接使用命令</span><br><span class="hljs-comment"># pyenv安装的需要加上flexget的安装路径 /home/$&#123;username&#125;/.local/flexget3/bin/flexget 后再使用命令</span><br><br><span class="hljs-comment"># 更新flexget，docker版本需要进入容器后执行下列语句</span><br>pip install --upgrade flexget<br>pip3 install --upgrade flexget<br><br></code></pre></td></tr></table></figure><h2 id="安装flexget-nexusphp插件"><a href="#安装flexget-nexusphp插件" class="headerlink" title="安装flexget-nexusphp插件"></a><a href="https://github.com/Juszoe/flexget-nexusphp/releases">安装flexget-nexusphp插件</a></h2><h3 id="1-docker-1"><a href="#1-docker-1" class="headerlink" title="1.docker"></a>1.docker</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#进入flexget容器/config目录</span><br>docker <span class="hljs-built_in">exec</span> -it flexget /bin/bash<br><span class="hljs-comment">#创建plugins目录</span><br><span class="hljs-built_in">mkdir</span> plugins<br><span class="hljs-comment">#赋予plugins目录最高权限</span><br><span class="hljs-built_in">chmod</span> -R 777 plugins<br><span class="hljs-comment">#进入plugins目录</span><br><span class="hljs-built_in">cd</span> plugins<br><span class="hljs-comment">#下载官方原版nexusphp.py插件</span><br><span class="hljs-comment">#https://github.com/Juszoe/flexget-nexusphp/releases</span><br>wget https://github.com/Juszoe/flexget-nexusphp/releases/download/v1.4/nexusphp.py<br><span class="hljs-comment">#赋予nexusphp.py最高权限</span><br><span class="hljs-built_in">chmod</span> -R 777 nexusphp.py<br><span class="hljs-comment">#回到/config目录</span><br><span class="hljs-built_in">cd</span> /config<br><span class="hljs-comment"># 配置config.yml</span><br><span class="hljs-comment">#测试运行</span><br>flexget --<span class="hljs-built_in">test</span> execute<br><span class="hljs-comment">#正式运行</span><br>flexget execute<br><span class="hljs-comment">#退出exec</span><br><span class="hljs-built_in">exit</span><br>ctrl+A+D<br><span class="hljs-comment">#重启docker</span><br>docker restart flexget<br></code></pre></td></tr></table></figure><h3 id="2-pip-1"><a href="#2-pip-1" class="headerlink" title="2.pip"></a>2.pip</h3><p>下载插件 <a href="https://github.com/Juszoe/flexget-nexusphp/releases">nexusphp.py</a></p><p>在Flexget配置文件夹下新建plugins文件夹，例如：</p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs dts">~/.flexget<span class="hljs-keyword">/plugins/</span>  <span class="hljs-meta"># Linux</span><br><span class="hljs-symbol">C:</span>\Users\<span class="hljs-params">&lt;YOURUSER&gt;</span>\flexget\plugins\  <span class="hljs-meta"># Windows</span><br></code></pre></td></tr></table></figure><p>再次注意<code>plugins</code>文件夹和<code>config.yml</code>处在同一级目录下，例如：</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs stylus">/<span class="hljs-selector-class">.flxget</span><br>  ┕━config<span class="hljs-selector-class">.yml</span><br>  ┕━plugins<br>    ┕━nexusphp.py<br></code></pre></td></tr></table></figure><p>将插件拷贝至plugins</p><p>若启用了Web-UI或守护进程，则重启flexget重新加载配置</p><h3 id="3-pyenv-Quickbox-Lite-1"><a href="#3-pyenv-Quickbox-Lite-1" class="headerlink" title="3.pyenv (Quickbox Lite)"></a>3.pyenv (Quickbox Lite)</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> /home/<span class="hljs-variable">$&#123;username&#125;</span>/.local/flexget3/plugins &amp;&amp; wget https://github.com/Juszoe/flexget-nexusphp/releases/download/v1.4/nexusphp.py<br><span class="hljs-comment"># $&#123;username&#125;对应于用户名</span><br></code></pre></td></tr></table></figure><p><strong>Warning</strong></p><figure class="highlight tex"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs tex">对于deluge<br><span class="hljs-params">#</span> 如果使用server port报错&quot;BUG: Unhandled error in plugin deluge: <span class="hljs-built_in">_</span>ssl.c:980: The handshake operation timed out&quot;，那么修改port为daemon port<br><span class="hljs-params">#</span> 如果使用localhost连不上de客户端，那么请使用本机ip地址<br><span class="hljs-params">#</span> 建议如果使用pip安装的flexget，则使用localhost或者IP地址都可，如果是docker安装的flexget那么请优先使用IP地址。<br></code></pre></td></tr></table></figure><h2 id="flexget配置文件"><a href="#flexget配置文件" class="headerlink" title="flexget配置文件"></a>flexget配置文件</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-comment"># docker flexget_config</span><br><span class="hljs-attr">web_server:</span><br>  <span class="hljs-attr">bind:</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><br>  <span class="hljs-attr">port:</span> <span class="hljs-number">5050</span><br>  <span class="hljs-attr">web_ui:</span> <span class="hljs-literal">yes</span><br> <span class="hljs-comment"># base_url: /flexget  # 如果使用反代请打开，未使用反代修改后可能会无法打开</span><br> <span class="hljs-comment"># 修改可能会导致无法打开web界面</span><br></code></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-comment"># https://flexget.com/en/Plugins/deluge</span><br><span class="hljs-comment"># https://flexget.com/Plugins/qbittorrent</span><br><span class="hljs-attr">templates:</span><br><span class="hljs-comment"># 剩余空间模板，当 path 对应的路径的剩余空间小于 space 规定的数值的时候停止 RSS 下载</span><br>  <span class="hljs-attr">freespace:</span><br>    <span class="hljs-attr">free_space:</span><br>      <span class="hljs-attr">path:</span> <span class="hljs-string">/home/$&#123;username&#125;</span><br>      <span class="hljs-attr">space:</span> <span class="hljs-number">10240</span><br>  <span class="hljs-attr">de:</span><br>    <span class="hljs-attr">deluge:</span><br>      <span class="hljs-attr">path:</span> <span class="hljs-string">/home/user/torrents/deluge/</span><br>      <span class="hljs-attr">host:</span> <span class="hljs-string">localhost</span><br>      <span class="hljs-comment"># de不使用https或者http协议，使用localhost连不上de客户端。</span><br>      <span class="hljs-attr">port:</span> <span class="hljs-string">xxxx</span><br>      <span class="hljs-attr">username:</span> <span class="hljs-string">username</span><br>      <span class="hljs-attr">password:</span> <span class="hljs-string">xxxxx</span><br>     <span class="hljs-comment"># max_down_speed: 45000</span><br>     <span class="hljs-comment"># max_up_speed: 10000</span><br>  <span class="hljs-attr">qb:</span><br>   <span class="hljs-attr">qbittorrent:</span><br>      <span class="hljs-attr">path:</span> <span class="hljs-string">/home/user/torrents/qbittorrent/</span><br>      <span class="hljs-attr">host:</span> <span class="hljs-string">localhost</span><br>      <span class="hljs-attr">port:</span> <span class="hljs-string">xxxx</span><br>      <span class="hljs-attr">username:</span> <span class="hljs-string">username</span><br>      <span class="hljs-attr">password:</span> <span class="hljs-string">xxxx</span><br>     <span class="hljs-comment"># maxdownspeed: 30000</span><br>     <span class="hljs-comment"># maxupspeed: 10000</span><br> <span class="hljs-attr">tr:</span><br>   <span class="hljs-attr">transmission:</span><br>      <span class="hljs-attr">host:</span> <span class="hljs-string">localhost</span><br>      <span class="hljs-attr">port:</span> <span class="hljs-number">9091</span><br>      <span class="hljs-attr">username:</span> <span class="hljs-string">myusername</span><br>      <span class="hljs-attr">password:</span> <span class="hljs-string">mypassword</span><br>      <span class="hljs-comment"># max_up_speed: XXX #tr专属</span><br></code></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">tasks:</span><br>  <span class="hljs-attr">xxx:</span><br>    <span class="hljs-attr">rss:</span><br>      <span class="hljs-attr">url:</span> <span class="hljs-string">&lt;url&gt;</span> <span class="hljs-comment">#订阅链接</span><br>      <span class="hljs-attr">other_fields:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">link</span><br>      <span class="hljs-attr">ascii:</span> <span class="hljs-literal">yes</span><br>    <span class="hljs-comment"># 这个需要安装nexusphp插件</span><br>    <span class="hljs-attr">nexusphp:</span><br>      <span class="hljs-attr">cookie:</span> <span class="hljs-string">&#x27;cookies&#x27;</span><br>      <span class="hljs-attr">discount:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">free</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">2xfree</span><br>      <span class="hljs-attr">hr:</span> <span class="hljs-literal">no</span><br>      <span class="hljs-attr">seeders:</span><br>        <span class="hljs-attr">max:</span> <span class="hljs-number">2</span><br>      <span class="hljs-attr">leechers:</span><br>        <span class="hljs-attr">min:</span> <span class="hljs-number">2</span><br>        <span class="hljs-attr">max_complete:</span> <span class="hljs-number">0.2</span><br>      <span class="hljs-attr">remember:</span> <span class="hljs-literal">no</span><br>    <span class="hljs-attr">template:</span> <span class="hljs-string">free_space</span><br>    <span class="hljs-attr">content_size:</span><br>      <span class="hljs-attr">min:</span> <span class="hljs-number">10240</span><br>      <span class="hljs-attr">strict:</span> <span class="hljs-literal">no</span><br>    <span class="hljs-attr">template:</span> <span class="hljs-string">de</span><br>    <span class="hljs-attr">deluge:</span><br>      <span class="hljs-attr">label:</span> <span class="hljs-string">xxx</span><br>     <span class="hljs-comment"># max_up_speed: 10000  #de专属，下载up换成down</span><br>     <span class="hljs-comment"># maxupspeed: 10000 #qb专属，下载up换成down</span><br>     <span class="hljs-comment"># path: /downloads/xxx</span><br></code></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">tasks:</span><br>  <span class="hljs-attr">xxx:</span><br>    <span class="hljs-attr">rss:</span> <span class="hljs-string">&lt;url&gt;</span> <span class="hljs-comment">#订阅</span><br>    <span class="hljs-attr">accept_all:</span> <span class="hljs-literal">yes</span><br>    <span class="hljs-attr">regexp:</span><br>    <span class="hljs-comment">#正则匹配</span><br>      <span class="hljs-attr">accept:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Free</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">XXX0</span><br>      <span class="hljs-attr">reject:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">XXX</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">XXX</span><br>      <span class="hljs-attr">from:</span> <span class="hljs-string">title</span><br>    <span class="hljs-attr">if:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;&#x27;CXX&#x27; in title&quot;</span><span class="hljs-string">:</span> <span class="hljs-string">reject</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;&#x27;CXXWEB&#x27; in title&quot;</span><span class="hljs-string">:</span> <span class="hljs-string">reject</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;&#x27;CXXBits&#x27; in title&quot;</span><span class="hljs-string">:</span> <span class="hljs-string">reject</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;&#x27;sXXb&#x27; in title&quot;</span><span class="hljs-string">:</span> <span class="hljs-string">reject</span><br>    <span class="hljs-attr">template:</span> <span class="hljs-string">de</span><br>    <span class="hljs-attr">deluge:</span><br>      <span class="hljs-attr">label:</span> <span class="hljs-string">xx</span><br>     <span class="hljs-comment"># max_up_speed: 10000  #de专属，下载up换成down</span><br>     <span class="hljs-comment"># maxupspeed: 10000 #qb专属，下载up换成down  </span><br></code></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">tasks:</span>  <br>  <span class="hljs-attr">xxx:</span><br>    <span class="hljs-attr">rss:</span> <span class="hljs-string">&lt;url&gt;</span> <span class="hljs-comment">#订阅链接</span><br>    <span class="hljs-comment"># In order to accept entries that have different urls but share the same title  </span><br>    <span class="hljs-comment"># 因为 abc 发单集的时候用的标题是一样的， 因此下过一次后</span><br>    <span class="hljs-comment"># 之后新发出来的单集由于标题一样，flexget 会当成是以前已经下过的种子</span><br>    <span class="hljs-comment"># 为了避免这个问题，对 seen 插件设定为只检查 url 是否一致</span><br>    <span class="hljs-attr">seen:</span><br>      <span class="hljs-attr">fields:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">url</span><br>    <span class="hljs-comment"># 正则表达式；标题带 abc 的种子就下载（accept，接受），不想下载的话就写拒绝（reject）</span><br>    <span class="hljs-attr">regexp:</span><br>      <span class="hljs-attr">accept:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">abc</span><br>      <span class="hljs-attr">reject:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">XXX</span><br>      <span class="hljs-attr">from:</span> <span class="hljs-string">title</span><br>    <span class="hljs-attr">template:</span> <span class="hljs-string">freespace</span><br>    <span class="hljs-comment"># 只下载体积为 100-100000 MB 的种子，前提是RSS链接中勾选了体积相关的选项</span><br>    <span class="hljs-attr">content_size:</span><br>        <span class="hljs-attr">max:</span> <span class="hljs-number">100000</span><br>        <span class="hljs-attr">min:</span> <span class="hljs-number">100</span><br>        <span class="hljs-attr">strict:</span> <span class="hljs-literal">no</span><br>    <span class="hljs-attr">template:</span> <span class="hljs-string">qb</span><br>    <span class="hljs-attr">qbittorrent:</span><br>      <span class="hljs-attr">label:</span> <span class="hljs-string">xxx</span><br></code></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">tasks:</span><br>  <span class="hljs-attr">xxx:</span><br>    <span class="hljs-attr">rss:</span> <span class="hljs-string">&lt;url&gt;</span> <br>    <span class="hljs-attr">accept_all:</span> <span class="hljs-literal">yes</span><br>    <span class="hljs-attr">content_size:</span><br>      <span class="hljs-attr">min:</span> <span class="hljs-number">3000</span><br>      <span class="hljs-attr">max:</span> <span class="hljs-number">500000</span><br>      <span class="hljs-attr">strict:</span> <span class="hljs-literal">no</span><br>    <span class="hljs-attr">template:</span> <span class="hljs-string">de</span><br>    <span class="hljs-attr">deluge:</span><br>      <span class="hljs-attr">label:</span> <span class="hljs-string">xxx</span><br></code></pre></td></tr></table></figure><h2 id="flexget完整配置示例"><a href="#flexget完整配置示例" class="headerlink" title="flexget完整配置示例"></a>flexget完整配置示例</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">web_server:</span><br>  <span class="hljs-attr">bind:</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><br>  <span class="hljs-attr">port:</span> <span class="hljs-number">5050</span><br>  <span class="hljs-attr">web_ui:</span> <span class="hljs-literal">yes</span><br><br><span class="hljs-attr">templates:</span><br><span class="hljs-comment"># 剩余空间模板，当 path 对应的路径的剩余空间小于 space 规定的数值的时候停止 RSS 下载</span><br>  <span class="hljs-attr">de:</span><br>    <span class="hljs-attr">deluge:</span><br>      <span class="hljs-attr">path:</span> <span class="hljs-string">/home/&lt;username&gt;/torrents/deluge/</span><br>      <span class="hljs-attr">host:</span> <br>      <span class="hljs-comment"># de不使用https或者http协议</span><br>      <span class="hljs-attr">port:</span> <span class="hljs-number">10020</span><br>      <span class="hljs-attr">username:</span> <span class="hljs-string">username</span><br>      <span class="hljs-attr">password:</span> <span class="hljs-string">passwd</span><br>     <span class="hljs-comment"># max_down_speed: 45000</span><br>     <span class="hljs-comment"># max_up_speed: 10000</span><br><br><br><span class="hljs-attr">tasks:</span><br>  <span class="hljs-attr">xx1:</span><br>    <span class="hljs-attr">rss:</span> <span class="hljs-string">&lt;url&gt;</span> <br>    <span class="hljs-attr">accept_all:</span> <span class="hljs-literal">yes</span><br>    <span class="hljs-attr">content_size:</span><br>      <span class="hljs-attr">min:</span> <span class="hljs-number">3000</span><br>      <span class="hljs-attr">max:</span> <span class="hljs-number">500000</span><br>      <span class="hljs-attr">strict:</span> <span class="hljs-literal">no</span><br>    <span class="hljs-attr">template:</span> <span class="hljs-string">de</span><br>    <span class="hljs-attr">deluge:</span><br>      <span class="hljs-attr">label:</span> <span class="hljs-string">xx</span><br><br><span class="hljs-attr">schedules:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tasks:</span> [<span class="hljs-string">xx1</span>, <span class="hljs-string">xx2</span>]<br>    <span class="hljs-attr">interval:</span><br>      <span class="hljs-attr">minutes:</span> <span class="hljs-number">2</span> <span class="hljs-comment">#2分钟执行一次</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tasks:</span> [<span class="hljs-string">xx3</span>]<br>    <span class="hljs-attr">interval:</span><br>      <span class="hljs-attr">minutes:</span> <span class="hljs-number">5</span> <span class="hljs-comment">#5分钟执行一次</span><br></code></pre></td></tr></table></figure><h2 id="RSS"><a href="#RSS" class="headerlink" title="RSS"></a>RSS</h2><h3 id="1-内站"><a href="#1-内站" class="headerlink" title="1.内站"></a>1.内站</h3><p>对于内站来说一般都带有RSS功能，但是注意如果要筛选大小和免费时要勾选对应的标签，对于一些站官组会free我们有以下方式：</p><blockquote><p>1.勾选RSS时仅选择对应发布组</p><p>2.勾选ALL，然后正则筛选官组</p><p>#比如说月月，可以勾选RSS ALl，然后在正则表达里添加朋友等，避免筛选到中性种子</p><p>#比如说瓷，可以仅勾选官组</p><p>#比如说听听歌，由于听听歌小组经常会有HR的种子，所以可以不勾选听听歌或者筛选掉听听歌种子</p></blockquote><h3 id="2-外站"><a href="#2-外站" class="headerlink" title="2.外站"></a>2.外站</h3><p>对于特定站点可以使用RSS，只不过入口比较隐蔽</p><blockquote><p>1.峨眉派, mtv, pby等站点，右键torrent界面的RSS标志复制，这个链接默认全RSS，需要注意筛选大小等等。</p><p>2.cgp, jpp等站点找不到RSS相关的标志，这个需要按下Ctrl+U，然后按下Ctrl+F 搜索RSS，里面的链接有多种类型，选择All Torrent就行了。然后自己可以进行大小等的筛选。</p><p>#自己可以测试一下能不能正常使用，选中复制链接后新开无痕浏览器，能不能正常打开，如果能正常打开的话，选择里面种子的链接看看能不能下载对应的种子。PS：如果种子链接和RSS链接内有一串类似密钥的字符串那么八成是可以使用的。</p><p>3.cg虽然通过Ctrl+F 能够搜索到RSS链接，但是还需要站点的cookies才能打开RSS链接和下载对应的种子。星大github对此有更详细的说明。</p><p>4.对于其他联盟站请使用 irssi&#x2F;autobrr+ART</p></blockquote><h2 id="定时运行"><a href="#定时运行" class="headerlink" title="定时运行"></a>定时运行</h2><h3 id="1-可以使用自带的schedules"><a href="#1-可以使用自带的schedules" class="headerlink" title="1.可以使用自带的schedules:"></a>1.可以使用自带的schedules:</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">schedules:</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">tasks:</span> [<span class="hljs-string">xxx</span>,<span class="hljs-string">xx2</span>]<br>    <span class="hljs-attr">interval:</span><br>      <span class="hljs-attr">minutes:</span> <span class="hljs-number">2</span> <span class="hljs-comment">#2分钟执行一次</span><br></code></pre></td></tr></table></figure><h3 id="2-使用crontab"><a href="#2-使用crontab" class="headerlink" title="2.使用crontab"></a>2.使用<a href="https://crontab.guru/">crontab</a></h3><p>使用 cron 的话，schedules 最好改成 no，正如脚本里默认的那样（<code>schedules: no</code>）<br>首先在 SSH 输入 crontab -e，选择一个文本编辑器，默认的 nano 即可 （nano 使用教程：<a href="http://man.linuxde.net/nano%EF%BC%89">http://man.linuxde.net/nano）</a><br>设置 2 分钟执行一次 RSS，就在文件里（写在哪个位置无所谓，顶部也行、底部也行）输入：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># pip</span><br>*/2 * * * * /usr/local/bin/flexget --cron execute<br><br><span class="hljs-comment"># pyenv</span><br>crontab -e -u <span class="hljs-variable">$&#123;username&#125;</span> <span class="hljs-comment"># 不使用root账户可能会无法执行</span><br><span class="hljs-comment"># min hour  day month week    command</span><br> */2   *    *   *     *       /home/<span class="hljs-variable">$&#123;username&#125;</span>/.local/flexget3/bin/flexget -c /home/<span class="hljs-variable">$&#123;username&#125;</span>/.config/flexget/config.yml --cron execute<br></code></pre></td></tr></table></figure><p>（这里的就是 2 分钟执行一次的意思）<br>保存、退出，之后可以在 WebUI 中看 Log 来判断 Flexget 是否有在正常工作，或者在 SSH 中输入 <code>flexget status</code> 查看状态 </p><h4 id="如果使用docker的flexget则可以使用一下方式"><a href="#如果使用docker的flexget则可以使用一下方式" class="headerlink" title="如果使用docker的flexget则可以使用一下方式"></a>如果使用docker的flexget则可以使用一下方式</h4><h5 id="1-在docker内部使用cron"><a href="#1-在docker内部使用cron" class="headerlink" title="1.在docker内部使用cron"></a>1.在docker内部使用cron</h5><figure class="highlight smali"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs smali">*/2 * * * * /usr/local/bin/flexget --cron<span class="hljs-built_in"> execute</span><br><span class="hljs-built_in"></span><span class="hljs-comment"># /usr/local/bin/flexget 这里使用flexget应该也是可以的，这个路径未验证</span><br></code></pre></td></tr></table></figure><h2 id="ART"><a href="#ART" class="headerlink" title="ART"></a>ART</h2><p>安装 <a href="https://github.com/jerrymakesjelly/autoremove-torrents">ART</a></p><figure class="highlight angelscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs angelscript">pip install <span class="hljs-built_in">auto</span>remove-torrents<br></code></pre></td></tr></table></figure><blockquote><p>  qb使用http协议，de不能加http。</p><p>  加入crontab -e的时候，autoremove-torrents要使用绝对路径。例如：&#x2F;usr&#x2F;local&#x2F;bin&#x2F;autoremove-torrents，可使用which和whereis查询路径。</p><p>  <strong>deluge需要开启preferences -&gt; plugins -&gt; label</strong></p></blockquote><p>以下配置仅供参考</p><ol><li>3o</li></ol><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">my_task:</span><br>  <span class="hljs-attr">client:</span> <span class="hljs-string">qbittorrent</span><br>  <span class="hljs-attr">host:</span> <span class="hljs-string">http://127.0.0.1:15169</span> <span class="hljs-comment">#qb使用http，de不使用http</span><br>  <span class="hljs-attr">username:</span> <span class="hljs-string">xxxx</span><br>  <span class="hljs-attr">password:</span> <span class="hljs-string">xxxx</span><br>  <span class="hljs-attr">delete_data:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">strategies:</span><br>    <span class="hljs-attr">trash:</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Uploading</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">seeding_time</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">3600 </span><span class="hljs-string">and</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">100</span> <span class="hljs-comment">#删除做种大于5分钟且上传小于300K/S的任务</span><br>    <span class="hljs-attr">wasted:</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Queued</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">(</span> <span class="hljs-string">create_time</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">600</span> <span class="hljs-string">and</span> <span class="hljs-string">size</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">10</span> <span class="hljs-string">)</span> <span class="hljs-string">or</span> <span class="hljs-string">(</span> <span class="hljs-string">create_time</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">900</span> <span class="hljs-string">and</span> <span class="hljs-string">size</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">15</span> <span class="hljs-string">)</span> <span class="hljs-string">or</span> <span class="hljs-string">(</span> <span class="hljs-string">create_time</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">1200 </span><span class="hljs-string">and</span> <span class="hljs-string">size</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">15</span> <span class="hljs-string">)</span><br>    <span class="hljs-attr">black:</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Downloading</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">connected_leecher</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">2</span> <span class="hljs-string">and</span> <span class="hljs-string">connected_seeder</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">20</span> <span class="hljs-string">and</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">10</span><br></code></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs crontab">crontab -e<br><br># qk lite 安装<br>*/5 * * * *  /home/&lt;username&gt;/.local/autoremovetorrents/bin/autoremove-torrents -c /home/&lt;username&gt;/.config/autoremovetorrents/config.yml -l /home/&lt;username&gt;/.config/autoremovetorrents/logs_black<br><br># pip 安装<br>*/5 * * * * /usr/local/bin/autoremove-torrents -c /root/.config/autoremovetorrents/config.yml -l /root/.config/autoremovetorrents/log<br></code></pre></td></tr></table></figure><ol start="2"><li>33o</li></ol><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">delete_task:</span><br>  <span class="hljs-attr">client:</span> <span class="hljs-string">deluge</span><br>  <span class="hljs-attr">host:</span> <span class="hljs-string">localhost:10047</span><br>  <span class="hljs-attr">username:</span> <span class="hljs-string">XXX</span><br>  <span class="hljs-attr">password:</span> <span class="hljs-string">XXX</span><br>  <span class="hljs-attr">delete_data:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">strategies:</span> <br>    <span class="hljs-attr">clean_slow_uploading_S2:</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Downloading</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">seeder</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">3</span> <span class="hljs-string">and</span> <span class="hljs-string">connected_leecher</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">2</span><br>    <span class="hljs-attr">clean_Seeding_S1:</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Uploading</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">leecher</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">3</span> <span class="hljs-string">and</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">200</span><br>    <span class="hljs-attr">clean_Seeding_S2:</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Uploading</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">200</span><br>      <span class="hljs-comment">#maximum_number: </span><br>      <span class="hljs-comment">#  limit: 16</span><br>      <span class="hljs-comment">#  action: remove-inactive-seeds</span><br>    <span class="hljs-attr">black:</span><br>      <span class="hljs-attr">excluded_trackers:</span> <span class="hljs-string">open(补全)</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Downloading</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">download_speed</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">50000</span> <span class="hljs-string">and</span> <span class="hljs-string">create_time</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">300</span> <span class="hljs-string">and</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">10000</span> <span class="hljs-string">and</span> <span class="hljs-string">progress</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">20</span> <span class="hljs-comment">#删除加入5分钟后，已经下载了20%，下载速度大于50m/s，上传速度小于10m/s  </span><br></code></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs crontab">crontab -e<br><br># qk lite 安装<br>*/5 * * * *  /home/&lt;username&gt;/.local/autoremovetorrents/bin/autoremove-torrents -c /home/&lt;username&gt;/.config/autoremovetorrents/config.yml -l /home/&lt;username&gt;/.config/autoremovetorrents/logs_black<br><br># pip 安装<br>*/5 * * * * /usr/local/bin/autoremove-torrents -c /root/.config/autoremovetorrents/config.yml -l /root/.config/autoremovetorrents/log<br></code></pre></td></tr></table></figure><ol start="3"><li>netcup</li></ol><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">my_task:</span><br>  <span class="hljs-attr">client:</span> <span class="hljs-string">deluge</span><br>  <span class="hljs-attr">host:</span> <span class="hljs-number">185.233</span><span class="hljs-number">.104</span><span class="hljs-number">.185</span><span class="hljs-string">:10043</span><br>  <span class="hljs-attr">username:</span> <span class="hljs-string">lkl</span><br>  <span class="hljs-attr">password:</span> <br>  <span class="hljs-attr">delete_data:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">strategies:</span><br>    <span class="hljs-attr">trash:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Uploading</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">seeding_time</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">60</span> <span class="hljs-string">and</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">100</span> <br>    <span class="hljs-attr">wasted:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Queued</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">(</span> <span class="hljs-string">create_time</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">60</span> <span class="hljs-string">and</span> <span class="hljs-string">size</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">10</span> <span class="hljs-string">)</span> <span class="hljs-string">or</span> <span class="hljs-string">(</span> <span class="hljs-string">create_time</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">60</span> <span class="hljs-string">and</span> <span class="hljs-string">size</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">15</span> <span class="hljs-string">)</span> <span class="hljs-string">or</span> <span class="hljs-string">(</span> <span class="hljs-string">create_time</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">300</span> <span class="hljs-string">and</span> <span class="hljs-string">size</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">15</span> <span class="hljs-string">)</span><br>    <span class="hljs-attr">black:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Downloading</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">(</span> <span class="hljs-string">connected_leecher</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">2</span> <span class="hljs-string">and</span> <span class="hljs-string">connected_seeder</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">0</span> <span class="hljs-string">and</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">1000</span> <span class="hljs-string">)</span> <span class="hljs-string">or</span> <span class="hljs-string">(</span> <span class="hljs-string">download_speed</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">20000</span> <span class="hljs-string">and</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">1000</span><span class="hljs-string">)</span> <span class="hljs-string">or</span> <span class="hljs-string">(</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">10</span> <span class="hljs-string">and</span> <span class="hljs-string">download_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">1000 </span><span class="hljs-string">and</span> <span class="hljs-string">progress</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">30</span> <span class="hljs-string">)</span><br>    <span class="hljs-attr">error:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Error</span><br>      <span class="hljs-attr">remove:</span> <span class="hljs-string">(</span> <span class="hljs-string">average_uploadspeed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">3000</span> <span class="hljs-string">)</span> <span class="hljs-string">or</span> <span class="hljs-string">(</span> <span class="hljs-string">size</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">100</span> <span class="hljs-string">and</span> <span class="hljs-string">progress</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">30</span> <span class="hljs-string">)</span> <span class="hljs-string">or</span> <span class="hljs-string">(</span> <span class="hljs-string">size</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">100</span> <span class="hljs-string">and</span> <span class="hljs-string">progress</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">60</span> <span class="hljs-string">)</span><br>    <span class="hljs-attr">more:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Uploading</span><br>      <span class="hljs-attr">categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">au</span><br>      <span class="hljs-attr">ratio:</span> <span class="hljs-number">3.01</span><br>    <span class="hljs-attr">space1:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Uploading</span><br>      <span class="hljs-attr">remote_free_space:</span><br>        <span class="hljs-attr">min:</span> <span class="hljs-number">20</span><br>        <span class="hljs-attr">path:</span> <span class="hljs-string">/home/&lt;username&gt;/torrents/deluge</span><br>        <span class="hljs-attr">action:</span> <span class="hljs-string">remove-slow-upload-seeds</span><br>    <span class="hljs-attr">space2:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">status:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">Uploading</span><br>      <span class="hljs-attr">remote_free_space:</span><br>        <span class="hljs-attr">min:</span> <span class="hljs-number">12</span><br>        <span class="hljs-attr">path:</span> <span class="hljs-string">/home/&lt;username&gt;/torrents/deluge</span><br>        <span class="hljs-attr">action:</span> <span class="hljs-string">remove-big-seeds</span> <span class="hljs-comment">#remove-slow-upload-seeds  #remove-inactive-seeds #remove-old-seeds</span><br>    <span class="hljs-attr">space3:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">remote_free_space:</span><br>        <span class="hljs-attr">min:</span> <span class="hljs-number">20</span><br>        <span class="hljs-attr">path:</span> <span class="hljs-string">/home/&lt;username&gt;/torrents/deluge</span><br>        <span class="hljs-attr">action:</span> <span class="hljs-string">progress</span> <span class="hljs-string">=</span> <span class="hljs-number">100</span> <span class="hljs-string">and</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">2000</span><br>    <span class="hljs-attr">space4:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">remote_free_space:</span><br>        <span class="hljs-attr">min:</span> <span class="hljs-number">8</span><br>        <span class="hljs-attr">path:</span> <span class="hljs-string">/home/&lt;username&gt;/torrents/deluge</span><br>        <span class="hljs-attr">action:</span> <span class="hljs-string">remove-big-seeds</span><br>    <span class="hljs-attr">space5:</span><br>      <span class="hljs-attr">excluded_categories:</span><br>        <span class="hljs-bullet">-</span> <span class="hljs-string">keep</span><br>      <span class="hljs-attr">remote_free_space:</span><br>        <span class="hljs-attr">min:</span> <span class="hljs-number">10</span><br>        <span class="hljs-attr">path:</span> <span class="hljs-string">/home/&lt;username&gt;/torrents/deluge</span><br>        <span class="hljs-attr">action:</span> <span class="hljs-string">progress</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">50</span> <span class="hljs-string">and</span> <span class="hljs-string">upload_speed</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">20000</span> <span class="hljs-string">and</span> <span class="hljs-string">size</span> <span class="hljs-string">&gt;</span> <span class="hljs-number">30</span> <span class="hljs-string">and</span> <span class="hljs-string">size</span> <span class="hljs-string">&lt;</span> <span class="hljs-number">100</span><br></code></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs crontab">crontab -e<br><br># qk lite 安装<br>*/3 * * * *  /home/&lt;username&gt;/.local/autoremovetorrents/bin/autoremove-torrents -c /home/&lt;username&gt;/.config/autoremovetorrents/config_black.yml -l /home/&lt;username&gt;/.config/autoremovetorrents/logs_black<br><br># pip 安装<br>*/3 * * * * /usr/local/bin/autoremove-torrents -c /root/.config/autoremovetorrents/config.yml -l /root/.config/autoremovetorrents/log<br></code></pre></td></tr></table></figure><h3 id="安装deluge"><a href="#安装deluge" class="headerlink" title="安装deluge"></a>安装deluge</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash &lt;(wget -qO- https://git.io/qbox-lite -o /dev/null) COMMAND<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">box install deluge --de 2.0.3<br></code></pre></td></tr></table></figure><h4 id="deluge参数"><a href="#deluge参数" class="headerlink" title="deluge参数"></a>deluge参数</h4><figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs nix"><span class="hljs-comment"># 开启high performance，load preset后修改以下参数</span><br><span class="hljs-params">cache_expiry:</span> <span class="hljs-number">60</span>;<br><span class="hljs-params">cache_size:</span> <span class="hljs-number">131000</span>;<br><span class="hljs-params">choking_algorithm:</span> <span class="hljs-number">1</span>;<br><span class="hljs-params">enable_incoming_utp:</span> <span class="hljs-literal">false</span>;<br><span class="hljs-params">enable_outgoing_utp:</span> <span class="hljs-literal">false</span>;<br><span class="hljs-attr">read_cache_line_size</span> <span class="hljs-operator">=</span> <span class="hljs-number">64</span>;<br><span class="hljs-params">seed_choking_algorithm:</span> <span class="hljs-number">1</span>;<br><span class="hljs-params">strict_end_game_mode:</span> <span class="hljs-literal">false</span>;<br><span class="hljs-params">use_parole_mode:</span> <span class="hljs-literal">false</span>;<br></code></pre></td></tr></table></figure><h4 id="qbittorrent参数"><a href="#qbittorrent参数" class="headerlink" title="qbittorrent参数"></a>qbittorrent参数</h4><blockquote><p>  <a href="https://tieba.baidu.com/p/5945576499">https://tieba.baidu.com/p/5945576499</a></p><p>  <a href="https://github.com/ratanakvlun/deluge-ltconfig/blob/5e28c59b4462cc9daf42f277624248289fa5991c/ltconfig/common/presets.py#L297">https://github.com/ratanakvlun/deluge-ltconfig/blob/5e28c59b4462cc9daf42f277624248289fa5991c/ltconfig/common/presets.py#L297</a></p><p>  <a href="https://web.archive.org/web/20240311064407/https://tieba.baidu.com/p/5945576499">https://web.archive.org/web/20240311064407/https://tieba.baidu.com/p/5945576499</a></p></blockquote><p>引用：</p><p><a href="https://cn.wiki.ptbox.dev/flexget/">FlexGet | QuickBox Lite 知识库 (ptbox.dev)</a></p><p><a href="https://tieba.baidu.com/p/7522858984">flexget-nexusphp安装及使用教程</a></p><p><a href="https://github.com/Juszoe/flexget-nexusphp">Juszoe&#x2F;flexget-nexusphp: A flexget plugin for filter nexusphp torrents (github.com)</a></p><p><a href="https://hub.docker.com/r/wiserain/flexget">wiserain&#x2F;flexget - Docker Image | Docker Hub</a></p><p><a href="https://xiaoguiwk.site/index.php/archives/7/">Docker安装flexget - EMBRACE (xiaoguiwk.site)</a></p><p><a href="https://shimo.im/docs/ZKYSW2gJicsfkJU8/read">副本 盒子配置 (shimo.im)</a></p><p><a href="https://github.com/jerrymakesjelly/autoremove-torrents/blob/master/README-cn.rst">autoremove-torrents&#x2F;README-cn.rst at master · jerrymakesjelly&#x2F;autoremove-torrents (github.com)</a></p><p><a href="https://cn.wiki.ptbox.dev/getting-started/">安装脚本 | QuickBox Lite 知识库 (ptbox.dev)</a></p><p><a href="https://yukino.nl/2019/08/10/pt-tools/">PT实用工具&amp;脚本分享 | YeZi (yukino.nl)</a></p><p><a href="https://carloo.cc/archives/16/">使用autodl+irssi给ab刷流 - carlo’ blogs (carloo.cc)</a></p><p><a href="https://autoremove-torrents.readthedocs.io/zh_CN/latest/config.html#part-1-task-name">配置 — autoremove-torrents 1.5.3 文档</a></p><p><a href="https://zhuanlan.zhihu.com/p/479886858">适合小白的PT盒子入门指南 - 知乎 (zhihu.com)</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;安装flexget：&quot;&gt;&lt;a href=&quot;#安装flexget：&quot; class=&quot;headerlink&quot; title=&quot;安装flexget：&quot;&gt;&lt;/a&gt;安装flexget：&lt;/h2&gt;&lt;h3 id=&quot;1-docker安装&quot;&gt;&lt;a href=&quot;#1-docker安装&quot;</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="rss" scheme="https://shyi.org/tags/rss/"/>
    
    <category term="ART" scheme="https://shyi.org/tags/ART/"/>
    
  </entry>
  
  <entry>
    <title>常用网站</title>
    <link href="https://shyi.org/posts/20962/"/>
    <id>https://shyi.org/posts/20962/</id>
    <published>2022-04-12T16:00:00.000Z</published>
    <updated>2025-06-17T07:23:09.948Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p><a href="https://www.549.tv/">https://www.549.tv</a>  # 影视</p></blockquote><blockquote><p><a href="https://s1.xoimg.com/">https://s1.xoimg.com</a> # 图床</p></blockquote><blockquote><p><a href="https://dwz.blue/">https://dwz.blue</a> # 短链</p></blockquote><blockquote><p><a href="https://www.pan666.cn/">https://www.pan666.cn</a> # 阿里小站</p><p><a href="https://91cl.xyz/">https://91cl.xyz</a> # 磁力</p></blockquote><blockquote><p><a href="https://0122.lanzout.com/b03j3opyj">https://0122.lanzout.com/b03j3opyj</a> #常用软件</p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.549.tv/&quot;&gt;https://www.549.tv&lt;/a&gt;  # 影视&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://s1.xoimg.com/&quot;</summary>
      
    
    
    
    <category term="技术" scheme="https://shyi.org/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
  </entry>
  
</feed>
