290 lines
205 KiB
JSON
290 lines
205 KiB
JSON
{
|
||
"version": "https://jsonfeed.org/version/1",
|
||
"title": "涛声依旧",
|
||
"subtitle": "天下事有难易乎?为之,则难者亦易矣",
|
||
"icon": "https://blog.jingxiyuan.cn/images/favicon.ico",
|
||
"description": "天生我材必有用",
|
||
"home_page_url": "https://blog.jingxiyuan.cn",
|
||
"items": [
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/12/05/Win10%E5%BD%BB%E5%BA%95%E5%85%B3%E9%97%ADwsappx%E8%BF%9B%E7%A8%8B/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/12/05/Win10%E5%BD%BB%E5%BA%95%E5%85%B3%E9%97%ADwsappx%E8%BF%9B%E7%A8%8B/",
|
||
"title": "Win10彻底关闭wsappx进程",
|
||
"date_published": "2022-12-05T04:23:00.000Z",
|
||
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<p>最近重装了家里一台 mini 电脑,把系统升级成了最新的 win10 系统。但是使用起来却异常卡顿,查看任务管理器发现有个 wsappx 进程占用 cpu 严重。于是百度搜索得知它是微软商店的依赖进程,而我根本就用不上,所以直接禁用。</p>\n<h4 id=\"方法一\"><a class=\"anchor\" href=\"#方法一\">#</a> 方法一</h4>\n<ol>\n<li>开始菜单点击 “开始 / 应用商店” 菜单项。</li>\n<li>接着就会打开应用商店窗口,在窗口中点击个人头像的图标。</li>\n<li>在弹出的菜单中点击 “设置” 菜单项。</li>\n<li>在打开的应用商店设置窗口中,找到自动更新应用一项。</li>\n<li>点击该项下面的开关,把该项下面的开关设置为关即可。</li>\n</ol>\n<h4 id=\"方法二\"><a class=\"anchor\" href=\"#方法二\">#</a> 方法二</h4>\n<ol>\n<li>win 键 + r,输入 regedit</li>\n<li>计算机 \\HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\AppXSvc 将 3 改为 4<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/12/05/2022061711420518.jpg\" alt=\"\" /></li>\n<li>计算机 \\HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\ClipSVC 将 3 改为 4<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/12/05/2022061711420619.jpg\" alt=\"\" /></li>\n<li>重启电脑</li>\n</ol>\n",
|
||
"tags": [
|
||
"Windows",
|
||
"解决问题",
|
||
"win10",
|
||
"wsappx"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/12/02/KLineChart%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8C%87%E6%A0%87%E7%94%BB%E5%9B%BE/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/12/02/KLineChart%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8C%87%E6%A0%87%E7%94%BB%E5%9B%BE/",
|
||
"title": "KLineChart实现自定义指标画图",
|
||
"date_published": "2022-12-02T07:16:00.000Z",
|
||
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<p>本次任务是需要在一个指标图上通过点击标记画出此标记参与计算的数据范围、最高最低值、参考线等等,于是有了以下代码。代码仅供参考,如有错误的地方请指正!<br />\n<img data-src=\"https://nas.jingxiyuan.cn:18014/images/2022/12/02/7fd440be0502d0099427e7c74c4ebf29.jpg\" alt=\"7fd440be0502d0099427e7c74c4ebf29.jpg\" /></p>\n<h4 id=\"模版代码\"><a class=\"anchor\" href=\"#模版代码\">#</a> 模版代码</h4>\n<figure class=\"highlight js\"><figcaption data-lang=\"JavaScript\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\">// 箱体指标</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token keyword\">const</span> boxDataScope <span class=\"token operator\">=</span> <span class=\"token number\">300</span> <span class=\"token comment\">// 箱体范围</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token comment\">// 黄金线参数</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token keyword\">const</span> goldenSectionA <span class=\"token operator\">=</span> <span class=\"token number\">0.191</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token keyword\">const</span> goldenSectionB <span class=\"token operator\">=</span> <span class=\"token number\">0.382</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre><span class=\"token keyword\">const</span> goldenSectionC <span class=\"token operator\">=</span> <span class=\"token number\">0.5</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token keyword\">const</span> goldenSectionD <span class=\"token operator\">=</span> <span class=\"token number\">0.618</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre><span class=\"token keyword\">const</span> goldenSectionE <span class=\"token operator\">=</span> <span class=\"token number\">0.809</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>chart<span class=\"token punctuation\">.</span><span class=\"token function\">addTechnicalIndicatorTemplate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\t<span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'custom_box_solid'</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> <span class=\"token literal-property property\">shortName</span><span class=\"token operator\">:</span> <span class=\"token string\">'箱体'</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre> <span class=\"token literal-property property\">precision</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> <span class=\"token literal-property property\">plots</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span> <span class=\"token comment\">//key 属性的值最好在主图数据范围内,否则 Y 轴的值会跟着变大可能会导致主图变成一条线</span></pre></td></tr><tr><td data-num=\"14\"></td><td><pre> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">key</span><span class=\"token operator\">:</span> <span class=\"token string\">'max'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">'最高:'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"15\"></td><td><pre> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">key</span><span class=\"token operator\">:</span> <span class=\"token string\">'min'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">'最低:'</span> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"16\"></td><td><pre> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> <span class=\"token literal-property property\">calcParams</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>boxDataScope<span class=\"token punctuation\">,</span> goldenSectionA<span class=\"token punctuation\">,</span> goldenSectionB<span class=\"token punctuation\">,</span> goldenSectionC<span class=\"token punctuation\">,</span> goldenSectionD<span class=\"token punctuation\">,</span> goldenSectionE<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre> <span class=\"token function-variable function\">calcTechnicalIndicator</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">dataList<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> params<span class=\"token punctuation\">,</span> plots <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> <span class=\"token keyword\">let</span> allDatas <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token comment\">// 所有数据</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre> <span class=\"token keyword\">let</span> selectedDatas <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token comment\">// 选中的数据</span></pre></td></tr><tr><td data-num=\"21\"></td><td><pre> <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\"><</span> dataList<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"22\"></td><td><pre> <span class=\"token keyword\">let</span> kLineData <span class=\"token operator\">=</span> dataList<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span></pre></td></tr><tr><td data-num=\"23\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token function\">dateConvert</span><span class=\"token punctuation\">(</span>kLineData<span class=\"token punctuation\">.</span>timestamp<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getTime</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">===</span> <span class=\"token function\">getGlobalObject</span><span class=\"token punctuation\">(</span><span class=\"token string\">'boxId'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre> <span class=\"token keyword\">const</span> size <span class=\"token operator\">=</span> params<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span></pre></td></tr><tr><td data-num=\"25\"></td><td><pre> <span class=\"token comment\">// 找出当前数据往前的 size 条数据(包含自己)</span></pre></td></tr><tr><td data-num=\"26\"></td><td><pre> <span class=\"token keyword\">let</span> index <span class=\"token operator\">=</span> i</pre></td></tr><tr><td data-num=\"27\"></td><td><pre> <span class=\"token keyword\">let</span> startData <span class=\"token operator\">=</span> index <span class=\"token operator\">-</span> size <span class=\"token operator\">+</span> <span class=\"token number\">1</span></pre></td></tr><tr><td data-num=\"28\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>startData <span class=\"token operator\"><</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"29\"></td><td><pre> startData <span class=\"token operator\">=</span> <span class=\"token number\">0</span></pre></td></tr><tr><td data-num=\"30\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"31\"></td><td><pre> <span class=\"token keyword\">let</span> endData <span class=\"token operator\">=</span> index <span class=\"token operator\">+</span> <span class=\"token number\">1</span></pre></td></tr><tr><td data-num=\"32\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>endData <span class=\"token operator\">>=</span> dataList<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"33\"></td><td><pre> endData <span class=\"token operator\">=</span> dataList<span class=\"token punctuation\">.</span>length <span class=\"token operator\">-</span> <span class=\"token number\">1</span></pre></td></tr><tr><td data-num=\"34\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"35\"></td><td><pre> selectedDatas <span class=\"token operator\">=</span> dataList<span class=\"token punctuation\">.</span><span class=\"token function\">slice</span><span class=\"token punctuation\">(</span>startData<span class=\"token punctuation\">,</span> endData<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"36\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"37\"></td><td><pre> allDatas<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"38\"></td><td><pre> <span class=\"token literal-property property\">timestamp</span><span class=\"token operator\">:</span> kLineData<span class=\"token punctuation\">.</span>timestamp</pre></td></tr><tr><td data-num=\"39\"></td><td><pre> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"40\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"41\"></td><td><pre> <span class=\"token comment\">// 找出选中数据中最高最低差价</span></pre></td></tr><tr><td data-num=\"42\"></td><td><pre> <span class=\"token keyword\">let</span> max<span class=\"token punctuation\">,</span> min</pre></td></tr><tr><td data-num=\"43\"></td><td><pre> selectedDatas<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">item</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"44\"></td><td><pre> <span class=\"token keyword\">let</span> value <span class=\"token operator\">=</span> item<span class=\"token punctuation\">.</span>close <span class=\"token operator\">-</span> item<span class=\"token punctuation\">.</span>close2</pre></td></tr><tr><td data-num=\"45\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>max <span class=\"token operator\">||</span> value <span class=\"token operator\">></span> max<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"46\"></td><td><pre> max <span class=\"token operator\">=</span> value</pre></td></tr><tr><td data-num=\"47\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"48\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>min <span class=\"token operator\">||</span> value <span class=\"token operator\"><</span> min<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"49\"></td><td><pre> min <span class=\"token operator\">=</span> value</pre></td></tr><tr><td data-num=\"50\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"51\"></td><td><pre> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"52\"></td><td><pre>\t <span class=\"token comment\">// 返回指标最终数据(未选中的数据用空对象替换)</span></pre></td></tr><tr><td data-num=\"53\"></td><td><pre>\t <span class=\"token comment\">// 必须返回和 dataList 一样条数的数据,否则 title 不会显示</span></pre></td></tr><tr><td data-num=\"54\"></td><td><pre> <span class=\"token keyword\">return</span> allDatas<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data<span class=\"token punctuation\">,</span> i</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"55\"></td><td><pre> <span class=\"token keyword\">let</span> item <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"56\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"57\"></td><td><pre> selectedDatas<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">selected<span class=\"token punctuation\">,</span> j</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"58\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">.</span>timestamp <span class=\"token operator\">===</span> selected<span class=\"token punctuation\">.</span>timestamp<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"59\"></td><td><pre> item<span class=\"token punctuation\">.</span>timestamp <span class=\"token operator\">=</span> selected<span class=\"token punctuation\">.</span>timestamp</pre></td></tr><tr><td data-num=\"60\"></td><td><pre> item<span class=\"token punctuation\">.</span>max <span class=\"token operator\">=</span> max</pre></td></tr><tr><td data-num=\"61\"></td><td><pre> item<span class=\"token punctuation\">.</span>min <span class=\"token operator\">=</span> min</pre></td></tr><tr><td data-num=\"62\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"63\"></td><td><pre> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"64\"></td><td><pre> <span class=\"token keyword\">return</span> item</pre></td></tr><tr><td data-num=\"65\"></td><td><pre> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"66\"></td><td><pre> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"67\"></td><td><pre> <span class=\"token function-variable function\">render</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> ctx<span class=\"token punctuation\">,</span> dataSource<span class=\"token punctuation\">,</span> viewport<span class=\"token punctuation\">,</span> styles<span class=\"token punctuation\">,</span> xAxis<span class=\"token punctuation\">,</span> yAxis <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"68\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>dataSource<span class=\"token punctuation\">.</span>technicalIndicatorDataList<span class=\"token punctuation\">.</span>length <span class=\"token operator\"><=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 无指标数据则不处理</span></pre></td></tr><tr><td data-num=\"69\"></td><td><pre> <span class=\"token keyword\">return</span></pre></td></tr><tr><td data-num=\"70\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"71\"></td><td><pre>\t <span class=\"token comment\">// X 轴起始像素</span></pre></td></tr><tr><td data-num=\"72\"></td><td><pre> <span class=\"token keyword\">let</span> x <span class=\"token operator\">=</span> xAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"73\"></td><td><pre> <span class=\"token keyword\">let</span> start<span class=\"token punctuation\">,</span> end <span class=\"token comment\">// 标记选中数据的起止位置</span></pre></td></tr><tr><td data-num=\"74\"></td><td><pre> dataSource<span class=\"token punctuation\">.</span>technicalIndicatorDataList<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">kLineData<span class=\"token punctuation\">,</span> i</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"75\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>kLineData<span class=\"token punctuation\">.</span>timestamp<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"76\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>start<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"77\"></td><td><pre> start <span class=\"token operator\">=</span> i</pre></td></tr><tr><td data-num=\"78\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"79\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>end <span class=\"token operator\">&&</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\"><</span> dataSource<span class=\"token punctuation\">.</span>technicalIndicatorDataList<span class=\"token punctuation\">.</span>length <span class=\"token operator\">&&</span> <span class=\"token operator\">!</span>dataSource<span class=\"token punctuation\">.</span>technicalIndicatorDataList<span class=\"token punctuation\">[</span>i <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>timestamp<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"80\"></td><td><pre> end <span class=\"token operator\">=</span> i</pre></td></tr><tr><td data-num=\"81\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"82\"></td><td><pre> <span class=\"token keyword\">let</span> max <span class=\"token operator\">=</span> kLineData<span class=\"token punctuation\">.</span>max</pre></td></tr><tr><td data-num=\"83\"></td><td><pre> <span class=\"token keyword\">let</span> min <span class=\"token operator\">=</span> kLineData<span class=\"token punctuation\">.</span>min</pre></td></tr><tr><td data-num=\"84\"></td><td><pre> ctx<span class=\"token punctuation\">.</span>fillStyle <span class=\"token operator\">=</span> <span class=\"token string\">'#fff'</span></pre></td></tr><tr><td data-num=\"85\"></td><td><pre> ctx<span class=\"token punctuation\">.</span>textBaseline <span class=\"token operator\">=</span> <span class=\"token string\">'middle'</span></pre></td></tr><tr><td data-num=\"86\"></td><td><pre> ctx<span class=\"token punctuation\">.</span>textAlign <span class=\"token operator\">=</span> <span class=\"token string\">'center'</span></pre></td></tr><tr><td data-num=\"87\"></td><td><pre> <span class=\"token comment\">// 画箱体</span></pre></td></tr><tr><td data-num=\"88\"></td><td><pre>\t\t <span class=\"token comment\">// 箱体颜色</span></pre></td></tr><tr><td data-num=\"89\"></td><td><pre>\t\t ctx<span class=\"token punctuation\">.</span>strokeStyle <span class=\"token operator\">=</span> <span class=\"token string\">'#DC143C'</span></pre></td></tr><tr><td data-num=\"90\"></td><td><pre>\t\t <span class=\"token comment\">//y 轴最高点位置</span></pre></td></tr><tr><td data-num=\"91\"></td><td><pre>\t\t <span class=\"token keyword\">let</span> yHigh <span class=\"token operator\">=</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>max<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"92\"></td><td><pre>\t\t <span class=\"token comment\">//y 轴最低点位置</span></pre></td></tr><tr><td data-num=\"93\"></td><td><pre>\t\t <span class=\"token keyword\">let</span> yLow <span class=\"token operator\">=</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>min<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"94\"></td><td><pre>\t\t ctx<span class=\"token punctuation\">.</span><span class=\"token function\">beginPath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"95\"></td><td><pre>\t\t <span class=\"token comment\">// 画笔移动到数据的 x 轴起始点,y 轴最高点</span></pre></td></tr><tr><td data-num=\"96\"></td><td><pre>\t\t ctx<span class=\"token punctuation\">.</span><span class=\"token function\">moveTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yHigh<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"97\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">===</span> start<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 如果是第一条数据则需要画一条竖线</span></pre></td></tr><tr><td data-num=\"98\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">lineTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yLow<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 画竖线</span></pre></td></tr><tr><td data-num=\"99\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">moveTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yHigh<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 画笔移回</span></pre></td></tr><tr><td data-num=\"100\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"101\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">===</span> end<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 如果是最后一条数据则需要画一条竖线</span></pre></td></tr><tr><td data-num=\"102\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">lineTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yLow<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 画竖线</span></pre></td></tr><tr><td data-num=\"103\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillText</span><span class=\"token punctuation\">(</span>max<span class=\"token punctuation\">,</span> x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>dataSpace<span class=\"token punctuation\">,</span> yHigh<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 标识箱体最高点的值</span></pre></td></tr><tr><td data-num=\"104\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">moveTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yLow<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 画笔移动到 Y 轴最低点</span></pre></td></tr><tr><td data-num=\"105\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillText</span><span class=\"token punctuation\">(</span>min<span class=\"token punctuation\">,</span> x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>dataSpace<span class=\"token punctuation\">,</span> yLow<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 标识箱体最低点的值</span></pre></td></tr><tr><td data-num=\"106\"></td><td><pre> <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 画两条横线,一条在 y 轴最高点,一条在 y 轴最低点</span></pre></td></tr><tr><td data-num=\"107\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">lineTo</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>dataSpace<span class=\"token punctuation\">,</span> yHigh<span class=\"token punctuation\">)</span> <span class=\"token comment\">//y 轴最高点横线</span></pre></td></tr><tr><td data-num=\"108\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">moveTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yLow<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 画笔移动到 y 轴最低点</span></pre></td></tr><tr><td data-num=\"109\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">lineTo</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>dataSpace<span class=\"token punctuation\">,</span> yLow<span class=\"token punctuation\">)</span> <span class=\"token comment\">//y 轴最低点横线</span></pre></td></tr><tr><td data-num=\"110\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"111\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">stroke</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"112\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">closePath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"113\"></td><td><pre> <span class=\"token comment\">// 画黄金线</span></pre></td></tr><tr><td data-num=\"114\"></td><td><pre>\t\t <span class=\"token comment\">// 黄金线颜色</span></pre></td></tr><tr><td data-num=\"115\"></td><td><pre> ctx<span class=\"token punctuation\">.</span>strokeStyle <span class=\"token operator\">=</span> <span class=\"token string\">'#ffffff'</span></pre></td></tr><tr><td data-num=\"116\"></td><td><pre>\t\t <span class=\"token comment\">// 根据黄金线参数计算黄金线的值</span></pre></td></tr><tr><td data-num=\"117\"></td><td><pre> <span class=\"token keyword\">let</span> goldenSectionLineA <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>max <span class=\"token operator\">-</span> min<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> goldenSectionA <span class=\"token operator\">+</span> min</pre></td></tr><tr><td data-num=\"118\"></td><td><pre> <span class=\"token keyword\">let</span> goldenSectionLineB <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>max <span class=\"token operator\">-</span> min<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> goldenSectionB <span class=\"token operator\">+</span> min</pre></td></tr><tr><td data-num=\"119\"></td><td><pre> <span class=\"token keyword\">let</span> goldenSectionLineC <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>max <span class=\"token operator\">-</span> min<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> goldenSectionC <span class=\"token operator\">+</span> min</pre></td></tr><tr><td data-num=\"120\"></td><td><pre> <span class=\"token keyword\">let</span> goldenSectionLineD <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>max <span class=\"token operator\">-</span> min<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> goldenSectionD <span class=\"token operator\">+</span> min</pre></td></tr><tr><td data-num=\"121\"></td><td><pre> <span class=\"token keyword\">let</span> goldenSectionLineE <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>max <span class=\"token operator\">-</span> min<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> goldenSectionE <span class=\"token operator\">+</span> min</pre></td></tr><tr><td data-num=\"122\"></td><td><pre>\t\t <span class=\"token comment\">// 根据黄金线的值获取 Y 轴高度</span></pre></td></tr><tr><td data-num=\"123\"></td><td><pre> <span class=\"token keyword\">let</span> yA <span class=\"token operator\">=</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>goldenSectionLineA<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"124\"></td><td><pre> <span class=\"token keyword\">let</span> yB <span class=\"token operator\">=</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>goldenSectionLineB<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"125\"></td><td><pre> <span class=\"token keyword\">let</span> yC <span class=\"token operator\">=</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>goldenSectionLineC<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"126\"></td><td><pre> <span class=\"token keyword\">let</span> yD <span class=\"token operator\">=</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>goldenSectionLineD<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"127\"></td><td><pre> <span class=\"token keyword\">let</span> yE <span class=\"token operator\">=</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>goldenSectionLineE<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"128\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">beginPath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"129\"></td><td><pre>\t\t <span class=\"token comment\">// 画第一条黄金线</span></pre></td></tr><tr><td data-num=\"130\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">moveTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yA<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"131\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">lineTo</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>barSpace <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> yA<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"132\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">===</span> end<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 是否最后一条数据,如果是则需要标识黄金线的值</span></pre></td></tr><tr><td data-num=\"133\"></td><td><pre>\t\t <span class=\"token comment\">// 标识第一条黄金线的值</span></pre></td></tr><tr><td data-num=\"134\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillText</span><span class=\"token punctuation\">(</span>goldenSectionLineA<span class=\"token punctuation\">.</span><span class=\"token function\">toFixed</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>dataSpace<span class=\"token punctuation\">,</span> yA<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"135\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"136\"></td><td><pre>\t\t <span class=\"token comment\">// 画第二条黄金线</span></pre></td></tr><tr><td data-num=\"137\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">moveTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yB<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"138\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">lineTo</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>barSpace <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> yB<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"139\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">===</span> end<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"140\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillText</span><span class=\"token punctuation\">(</span>goldenSectionLineB<span class=\"token punctuation\">.</span><span class=\"token function\">toFixed</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>dataSpace<span class=\"token punctuation\">,</span> yB<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"141\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"142\"></td><td><pre>\t\t <span class=\"token comment\">// 画第三条黄金线</span></pre></td></tr><tr><td data-num=\"143\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">moveTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yC<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"144\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">lineTo</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>barSpace <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> yC<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"145\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">===</span> end<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"146\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillText</span><span class=\"token punctuation\">(</span>goldenSectionLineC<span class=\"token punctuation\">.</span><span class=\"token function\">toFixed</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>dataSpace<span class=\"token punctuation\">,</span> yC<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"147\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"148\"></td><td><pre>\t\t <span class=\"token comment\">// 画第四条黄金线</span></pre></td></tr><tr><td data-num=\"149\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">moveTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yD<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"150\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">lineTo</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>barSpace <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> yD<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"151\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">===</span> end<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"152\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillText</span><span class=\"token punctuation\">(</span>goldenSectionLineD<span class=\"token punctuation\">.</span><span class=\"token function\">toFixed</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>dataSpace<span class=\"token punctuation\">,</span> yD<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"153\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"154\"></td><td><pre>\t\t <span class=\"token comment\">// 画第五条黄金线</span></pre></td></tr><tr><td data-num=\"155\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">moveTo</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> yE<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"156\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">lineTo</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>barSpace <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> yE<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"157\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">===</span> end<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"158\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillText</span><span class=\"token punctuation\">(</span>goldenSectionLineE<span class=\"token punctuation\">.</span><span class=\"token function\">toFixed</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> x <span class=\"token operator\">+</span> viewport<span class=\"token punctuation\">.</span>dataSpace<span class=\"token punctuation\">,</span> yE<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"159\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"160\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">stroke</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"161\"></td><td><pre> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">closePath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"162\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"163\"></td><td><pre>\t\t<span class=\"token comment\">// 计算 X 轴的下一个位置</span></pre></td></tr><tr><td data-num=\"164\"></td><td><pre> x <span class=\"token operator\">+=</span> viewport<span class=\"token punctuation\">.</span>dataSpace</pre></td></tr><tr><td data-num=\"165\"></td><td><pre> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"166\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"167\"></td><td><pre><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr></table></figure><h4 id=\"结语\"><a class=\"anchor\" href=\"#结语\">#</a> 结语</h4>\n<div class=\"note info\">\n<p>以上代码只是箱体的指标模版,还需要根据业务逻辑在标记上实现点击事件,然后通过事件动态添加移除箱体指标。</p>\n</div>\n",
|
||
"tags": [
|
||
"工作",
|
||
"解决问题",
|
||
"KLineChart",
|
||
"KLineChart",
|
||
"K线",
|
||
"自定义指标"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/30/%E5%B0%86nginx%E6%9B%BF%E6%8D%A2%E4%B8%BAtengine/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/30/%E5%B0%86nginx%E6%9B%BF%E6%8D%A2%E4%B8%BAtengine/",
|
||
"title": "将nginx替换为tengine",
|
||
"date_published": "2022-11-30T09:05:00.000Z",
|
||
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<div class=\"note info\">\n<p>Tengine 的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的 Web 平台。从 2011 年 12 月开始,Tengine 成为一个开源项目。现在,它由 Tengine 团队开发和维护。Tengine 团队的核心成员来自于淘宝、搜狗等互联网企业。</p>\n</div>\n<p>tengine 简单来说就是淘宝自己基于 nginx 优化的网页引擎,在 nginx 原先基础上继续保持兼容,同时功能扩展,效率提高,可以看到目前淘宝网在这么多人同时使用的情况下依然稳定,我们足以相信 tengine,由于它是 nginx 的一个分生版本,所以几乎完全兼容 nginx,所以我认为 tengine 是搭建 lnmp 环境的不二之选。</p>\n<h4 id=\"下载\"><a class=\"anchor\" href=\"#下载\">#</a> 下载</h4>\n<p>首先访问<span class=\"exturl\" data-url=\"aHR0cDovL3RlbmdpbmUudGFvYmFvLm9yZy8=\"> tengine 官方网站</span>,获取最新的下载地址。<br />\n <code>wget http://tengine.taobao.org/download/tengine-2.3.3.tar.gz</code></p>\n<h4 id=\"获取编译参数\"><a class=\"anchor\" href=\"#获取编译参数\">#</a> 获取编译参数</h4>\n<p><code>nginx -V</code></p>\n<h4 id=\"编译\"><a class=\"anchor\" href=\"#编译\">#</a> 编译</h4>\n<p><code>./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module</code> <br />\n./configure 后面的参数是上一步获取的</p>\n<h4 id=\"make\"><a class=\"anchor\" href=\"#make\">#</a> Make</h4>\n<p><code>make 或者 make -j 内核数</code> <br />\n生成的文件在 objs 目录下</p>\n<h4 id=\"替换\"><a class=\"anchor\" href=\"#替换\">#</a> 替换</h4>\n<p>停止 nginx 服务 <code>service nginx stop</code> <br />\n 查看 nginx 目录 <code>whereis nginx</code> <br />\n 备份旧 nginx <code>mv /usr/sbin/nginx /usr/sbin/nginx.old</code> <br />\n 拷贝 objs 下的 nginx 替换旧 nginx <code>cp ./objs/nginx /usr/sbin/</code> <br />\n 备份旧 so 文件<br />\n拷贝 objs 下的 so 文件替换旧的 so 文件 <code>cp ./objs/*.so /usr/lib/nginx/modules/</code></p>\n<h4 id=\"测试\"><a class=\"anchor\" href=\"#测试\">#</a> 测试</h4>\n<p><code>nginx -t</code> 如果打印 test is successful 则表示替换成功。<br />\n然后执行 service nginx start 进行启动即可</p>\n",
|
||
"tags": [
|
||
"Linux",
|
||
"服务",
|
||
"Nginx",
|
||
"Nginx",
|
||
"Tengine"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/30/Nginx%E5%8A%A8%E6%80%81%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D%E6%96%B9%E6%A1%88/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/30/Nginx%E5%8A%A8%E6%80%81%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D%E6%96%B9%E6%A1%88/",
|
||
"title": "Nginx动态解析域名方案",
|
||
"date_published": "2022-11-30T08:35:00.000Z",
|
||
"content_html": "<h4 id=\"应用场景\"><a class=\"anchor\" href=\"#应用场景\">#</a> 应用场景:</h4>\n<p>由于有时候 nginx 代理的时候,第三方域名对应的 ip 可能发生变化,然而没有提前通知,然而如果不配置什么,nginx 又不能智能解析,因此 nginx 动态解析域名就比较重要。</p>\n<h4 id=\"使用模块nginx-upstream-dynamic-servers\"><a class=\"anchor\" href=\"#使用模块nginx-upstream-dynamic-servers\">#</a> 使用模块 nginx-upstream-dynamic-servers</h4>\n<p>该模块在启动 nginx 的时候会对域名进行一次解析,解析完成后,在 DNS 服务器设定的 TTL 过期时间内不会再次更新,在 TTL 过期后则会再次发起域名解析请求更新域名所对应的 IP 地址。</p>\n<p>需要在 nginx 的配置文件中的 http 配置域内指定使用的 DNS 服务器,在 upstream 中需要进行域名解析的 server 后面添加 resolve 参数。</p>\n<p>例:</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> resolver ip;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> upstream test <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> server www.xxx.com<span class=\"token punctuation\">:</span>8080 resolve;</pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> listen 8080;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre></pre></td></tr><tr><td data-num=\"15\"></td><td><pre> client_body_buffer_size 10m;</pre></td></tr><tr><td data-num=\"16\"></td><td><pre></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num=\"18\"></td><td><pre></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> location / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre> </pre></td></tr><tr><td data-num=\"21\"></td><td><pre> proxy_pass http<span class=\"token punctuation\">:</span>//test;</pre></td></tr><tr><td data-num=\"22\"></td><td><pre> </pre></td></tr><tr><td data-num=\"23\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre> </pre></td></tr><tr><td data-num=\"25\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"26\"></td><td><pre></pre></td></tr><tr><td data-num=\"27\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><p>缺点:</p>\n<p>1、每次解析域名之后,会从 DNS 服务器获取到改 DNS 的 TTL,在 TTL 期限内不会再次解析,所以如果目标域名发生改变,nginx 不会更新解析,知道 TTL 过期。</p>\n<p>2、DNS 服务器在 http 配置域配置全,不能在 location 中细分指定。</p>\n<h4 id=\"使用模块ngx_upstream_jdomain\"><a class=\"anchor\" href=\"#使用模块ngx_upstream_jdomain\">#</a> 使用模块 ngx_upstream_jdomain</h4>\n<p>在 http 配置域中配置 DNS 服务器,在 upstream 中按照这个模块的格式配置,支持设置每隔多少秒进行一次解析(抓包分析过设置 interval 可指定解析间隔),如果解析失败则使用缓存中的上一次解析结果的 IP 地址访问。</p>\n<p>例:</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> resolver ip;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> upstream test <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> jdomain www.xxx.com port=8080 interval=10; <span class=\"token comment\">#指定域名和端口,每隔 10 秒进行一次解析</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> listen 8080;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre></pre></td></tr><tr><td data-num=\"15\"></td><td><pre> client_body_buffer_size 10m;</pre></td></tr><tr><td data-num=\"16\"></td><td><pre></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num=\"18\"></td><td><pre></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> location / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre></pre></td></tr><tr><td data-num=\"21\"></td><td><pre> proxy_pass http<span class=\"token punctuation\">:</span>//test;</pre></td></tr><tr><td data-num=\"22\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"23\"></td><td><pre> </pre></td></tr><tr><td data-num=\"24\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"25\"></td><td><pre></pre></td></tr><tr><td data-num=\"26\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><p>缺点:DNS 服务器只能在 http 配域中全局配置</p>\n<h4 id=\"原生nginx使用set命令使用变量\"><a class=\"anchor\" href=\"#原生nginx使用set命令使用变量\">#</a> 原生 nginx 使用 set 命令使用变量</h4>\n<p>将域名置于变量中,在对 proxy_pass 进行转发的时候域名调用变量,可以按照 valid,设置的时间参数间隔地对变量中的域名进行解析。</p>\n<p>例:</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\tlisten 8080;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>\tclient_body_buffer_size 10m;</pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>\tserver_name localhost;</pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>\tlocation / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre></pre></td></tr><tr><td data-num=\"11\"></td><td><pre>\t\t\tresolver ip valid=3s;</pre></td></tr><tr><td data-num=\"12\"></td><td><pre></pre></td></tr><tr><td data-num=\"13\"></td><td><pre>\t\t\tset $five \"www.xxx.com<span class=\"token punctuation\">:</span>8080\";</pre></td></tr><tr><td data-num=\"14\"></td><td><pre></pre></td></tr><tr><td data-num=\"15\"></td><td><pre>\t\t\tproxy_pass http<span class=\"token punctuation\">:</span>//$<span class=\"token punctuation\">{</span>five<span class=\"token punctuation\">}</span>;</pre></td></tr><tr><td data-num=\"16\"></td><td><pre></pre></td></tr><tr><td data-num=\"17\"></td><td><pre>\t<span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre>\t</pre></td></tr><tr><td data-num=\"19\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><p>缺点:upstream 中不支持设置变量,因此后端有多台的时候该方案不可行。</p>\n<h4 id=\"tengine\"><a class=\"anchor\" href=\"#tengine\">#</a> Tengine</h4>\n<p>在 upstream 中配置 dynamic_resolve,在 location 配置域中指定 NDS 服务器,按照 valid 设置的时间间隔地进行地址解析。<span class=\"label danger\">只支持 http 模块的动态域名解析</span></p>\n<p>例:</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> upstream test <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> dynamic_resolve fallback=stale fail_timeout=30s;</pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> server www.xxx.com<span class=\"token punctuation\">:</span>8080;</pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> listen 8080;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre></pre></td></tr><tr><td data-num=\"15\"></td><td><pre> location / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"16\"></td><td><pre></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> resolver ip valid=3s;</pre></td></tr><tr><td data-num=\"18\"></td><td><pre></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> proxy_pass http<span class=\"token punctuation\">:</span>//test;</pre></td></tr><tr><td data-num=\"20\"></td><td><pre></pre></td></tr><tr><td data-num=\"21\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"22\"></td><td><pre></pre></td></tr><tr><td data-num=\"23\"></td><td><pre>\t <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre></pre></td></tr><tr><td data-num=\"25\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><p>缺点:需要将 nginx 的 bin 文件替换为 tengine 的 bin 文件。</p>\n",
|
||
"tags": [
|
||
"Linux",
|
||
"服务",
|
||
"Nginx",
|
||
"Nginx",
|
||
"Tengine",
|
||
"动态域名解析"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/30/Nginx%E9%85%8D%E7%BD%AEstream%E8%B8%A9%E5%9D%91/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/30/Nginx%E9%85%8D%E7%BD%AEstream%E8%B8%A9%E5%9D%91/",
|
||
"title": "Nginx配置stream踩坑",
|
||
"date_published": "2022-11-30T08:09:00.000Z",
|
||
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<p>stream 模块一般用于 TCP/UDP 数据流的代理和负载均衡,可以通过 stream 模块代理转发 TCP 消息。我是用来转发 mysql、gitee 等连接的,有天 ip 发生了变动导致连接不上。前期试过配置<span class=\"blue\"> resolver 114.114.114.114 valid=60s;</span> 来动态解析域名,结果 stream 模块不支持 set 函数,这就导致 ip 变动后必须手动重启或者 reload 一下 nginx 才能正常连接。后面经过搜索发现有人说用 Tengine 替代 nginx 可以实现就试了试,结果发现<span class=\"red\"> Tengine 只能实现 http 下的动态域名解析</span>,至此问题依旧。没办法,我只能通过定时任务加脚本判断 ip 是否变动,如果变动就 reload 一下 nginx。</p>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token shebang important\">#!/bin/bash</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token comment\">#使用 crontab -e 命令添加定时任务 */1 * * * * sh /home/xxx/autoReloadNginx.sh</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token assign-left variable\">home</span><span class=\"token operator\">=</span><span class=\"token string\">\"/home/xxx\"</span> <span class=\"token comment\">#指定 home 路径,如果使用 `pwd` 则 domainIP.txt 生成在当前用户目录下</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token assign-left variable\">domain</span><span class=\"token operator\">=</span>xxx.xxx.cn</pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token assign-left variable\">IP</span><span class=\"token operator\">=</span><span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token function\">ping</span> <span class=\"token parameter variable\">-4</span> <span class=\"token parameter variable\">-c</span> <span class=\"token number\">4</span> $domain <span class=\"token operator\">|</span> <span class=\"token function\">grep</span> from <span class=\"token operator\">|</span> <span class=\"token function\">tail</span> <span class=\"token parameter variable\">-n</span> <span class=\"token number\">1</span> <span class=\"token operator\">|</span> <span class=\"token function\">awk</span> <span class=\"token parameter variable\">-F</span> <span class=\"token string\">' '</span> <span class=\"token string\">'{print $4}'</span><span class=\"token variable\">`</span></span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre><span class=\"token assign-left variable\">regex</span><span class=\"token operator\">=</span><span class=\"token string\">\"<span class=\"token entity\" title=\"\\b\">\\b</span>(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])<span class=\"token entity\" title=\"\\b\">\\b</span>\"</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span> <span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token builtin class-name\">echo</span> $IP <span class=\"token operator\">|</span> <span class=\"token function\">egrep</span> $regex <span class=\"token operator\">|</span> <span class=\"token function\">wc</span> <span class=\"token parameter variable\">-l</span><span class=\"token variable\">`</span></span> <span class=\"token parameter variable\">-eq</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">then</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span> <span class=\"token operator\">!</span> <span class=\"token parameter variable\">-f</span> <span class=\"token string\">\"<span class=\"token variable\">$home</span>/domainIP.txt\"</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">then</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token function\">touch</span> <span class=\"token variable\">$home</span>/domainIP.txt</pre></td></tr><tr><td data-num=\"10\"></td><td><pre> <span class=\"token builtin class-name\">echo</span> <span class=\"token variable\">$IP</span> <span class=\"token operator\">></span> <span class=\"token variable\">$home</span>/domainIP.txt</pre></td></tr><tr><td data-num=\"11\"></td><td><pre> <span class=\"token keyword\">else</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre> <span class=\"token assign-left variable\">oldIP</span><span class=\"token operator\">=</span><span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token function\">cat</span> $home/domainIP.txt<span class=\"token variable\">`</span></span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span> <span class=\"token string\">\"<span class=\"token variable\">$IP</span>\"</span> <span class=\"token operator\">!=</span> <span class=\"token string\">\"<span class=\"token variable\">$oldIP</span>\"</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">then</span></pre></td></tr><tr><td data-num=\"14\"></td><td><pre> nginx <span class=\"token parameter variable\">-s</span> reload</pre></td></tr><tr><td data-num=\"15\"></td><td><pre> <span class=\"token builtin class-name\">echo</span> <span class=\"token variable\">$IP</span> <span class=\"token operator\">></span> <span class=\"token variable\">$home</span>/domainIP.txt</pre></td></tr><tr><td data-num=\"16\"></td><td><pre> <span class=\"token keyword\">else</span></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> <span class=\"token builtin class-name\">echo</span> <span class=\"token string\">\"The domain name ip has not changed\"</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre> <span class=\"token keyword\">fi</span></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> <span class=\"token keyword\">fi</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre><span class=\"token keyword\">else</span></pre></td></tr><tr><td data-num=\"21\"></td><td><pre> <span class=\"token builtin class-name\">echo</span> <span class=\"token string\">\"The domain name resolution is incorrect\"</span></pre></td></tr><tr><td data-num=\"22\"></td><td><pre><span class=\"token keyword\">fi</span></pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"Linux",
|
||
"服务",
|
||
"Nginx",
|
||
"Nginx",
|
||
"stream",
|
||
"Tengine"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/24/KLineChart%E5%AE%9E%E7%8E%B0%E4%B8%80%E5%B9%85%E5%9B%BE%E4%B8%8A%E7%94%BB%E5%A4%9A%E4%B8%AA%E8%9C%A1%E7%83%9BK%E7%BA%BF/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/24/KLineChart%E5%AE%9E%E7%8E%B0%E4%B8%80%E5%B9%85%E5%9B%BE%E4%B8%8A%E7%94%BB%E5%A4%9A%E4%B8%AA%E8%9C%A1%E7%83%9BK%E7%BA%BF/",
|
||
"title": "KLineChart实现一幅图上画多个蜡烛K线",
|
||
"date_published": "2022-11-24T00:53:00.000Z",
|
||
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<p>最近接到一个任务是通过<span class=\"exturl\" data-url=\"aHR0cHM6Ly9rbGluZWNoYXJ0cy5jb20vemgtQ04vZ3VpZGU=\"> KLineChart</span><span class=\"label info\">✔️8.6.1</span> 实现在一幅图上画两个合约的蜡烛图。研究 api 发现并没有通过配置实现的方法,于是联系作者沟通得知需要自己画图实现。于是有了本篇文章。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/24/KLineChart.jpg\" alt=\"KLineChart.jpg\" /></p>\n<h4 id=\"添加模版\"><a class=\"anchor\" href=\"#添加模版\">#</a> 添加模版</h4>\n<figure class=\"highlight js\"><figcaption data-lang=\"JavaScript\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token keyword\">let</span> shortName <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>constant<span class=\"token punctuation\">.</span>periodTypeEnum<span class=\"token punctuation\">.</span><span class=\"token function\">getNameByCode</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>klineType<span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">' 合约2:'</span> <span class=\"token operator\">+</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>currentInstrumentId</pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>chart<span class=\"token punctuation\">.</span><span class=\"token function\">addTechnicalIndicatorTemplate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'custom_candle_solid'</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre> <span class=\"token literal-property property\">shortName</span><span class=\"token operator\">:</span> shortName<span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> <span class=\"token literal-property property\">precision</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre> <span class=\"token literal-property property\">bar</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>\t<span class=\"token literal-property property\">upColor</span><span class=\"token operator\">:</span> <span class=\"token string\">'#EF5350'</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre>\t<span class=\"token literal-property property\">downColor</span><span class=\"token operator\">:</span> <span class=\"token string\">'#26A69A'</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>\t<span class=\"token literal-property property\">noChangeColor</span><span class=\"token operator\">:</span> <span class=\"token string\">'#888889'</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> <span class=\"token literal-property property\">plots</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre>\t<span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">key</span><span class=\"token operator\">:</span> <span class=\"token string\">'open'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">'开: '</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre>\t<span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">key</span><span class=\"token operator\">:</span> <span class=\"token string\">'close'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">'收: '</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"14\"></td><td><pre>\t<span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">key</span><span class=\"token operator\">:</span> <span class=\"token string\">'high'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">'高: '</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"15\"></td><td><pre>\t<span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">key</span><span class=\"token operator\">:</span> <span class=\"token string\">'low'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token string\">'低: '</span> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"16\"></td><td><pre> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> <span class=\"token function-variable function\">calcTechnicalIndicator</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">dataList<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> params<span class=\"token punctuation\">,</span> plots <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre>\t<span class=\"token keyword\">return</span> dataList<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">kLineData<span class=\"token punctuation\">,</span> i</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"19\"></td><td><pre>\t <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre>\t\t<span class=\"token literal-property property\">instrumentId</span><span class=\"token operator\">:</span> kLineData<span class=\"token punctuation\">.</span>instrumentId<span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"21\"></td><td><pre>\t\t<span class=\"token literal-property property\">timestamp</span><span class=\"token operator\">:</span> <span class=\"token function\">getDateTime</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span>kLineData<span class=\"token punctuation\">.</span>timestamp<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"22\"></td><td><pre>\t\t<span class=\"token literal-property property\">open</span><span class=\"token operator\">:</span> kLineData<span class=\"token punctuation\">.</span>open<span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"23\"></td><td><pre>\t\t<span class=\"token literal-property property\">close</span><span class=\"token operator\">:</span> kLineData<span class=\"token punctuation\">.</span>close<span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre>\t\t<span class=\"token literal-property property\">high</span><span class=\"token operator\">:</span> kLineData<span class=\"token punctuation\">.</span>high<span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"25\"></td><td><pre>\t\t<span class=\"token literal-property property\">low</span><span class=\"token operator\">:</span> kLineData<span class=\"token punctuation\">.</span>low</pre></td></tr><tr><td data-num=\"26\"></td><td><pre>\t <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"27\"></td><td><pre>\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"28\"></td><td><pre> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"29\"></td><td><pre> <span class=\"token function-variable function\">render</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> ctx<span class=\"token punctuation\">,</span> dataSource<span class=\"token punctuation\">,</span> viewport<span class=\"token punctuation\">,</span> styles<span class=\"token punctuation\">,</span> xAxis<span class=\"token punctuation\">,</span> yAxis <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"30\"></td><td><pre>\t<span class=\"token comment\">// X 轴起始像素</span></pre></td></tr><tr><td data-num=\"31\"></td><td><pre>\t<span class=\"token keyword\">let</span> x <span class=\"token operator\">=</span> xAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"32\"></td><td><pre>\tdataSource<span class=\"token punctuation\">.</span>technicalIndicatorDataList<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">kLineData<span class=\"token punctuation\">,</span> i</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"33\"></td><td><pre>\t <span class=\"token keyword\">let</span> open <span class=\"token operator\">=</span> kLineData<span class=\"token punctuation\">.</span>open</pre></td></tr><tr><td data-num=\"34\"></td><td><pre>\t <span class=\"token keyword\">let</span> close <span class=\"token operator\">=</span> kLineData<span class=\"token punctuation\">.</span>close</pre></td></tr><tr><td data-num=\"35\"></td><td><pre>\t <span class=\"token keyword\">let</span> high <span class=\"token operator\">=</span> kLineData<span class=\"token punctuation\">.</span>high</pre></td></tr><tr><td data-num=\"36\"></td><td><pre>\t <span class=\"token keyword\">let</span> low <span class=\"token operator\">=</span> kLineData<span class=\"token punctuation\">.</span>low</pre></td></tr><tr><td data-num=\"37\"></td><td><pre>\t <span class=\"token comment\">// 给蜡烛柱设置颜色</span></pre></td></tr><tr><td data-num=\"38\"></td><td><pre>\t <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>close <span class=\"token operator\">></span> open<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 涨</span></pre></td></tr><tr><td data-num=\"39\"></td><td><pre>\t\tctx<span class=\"token punctuation\">.</span>strokeStyle <span class=\"token operator\">=</span> <span class=\"token string\">'#EF5350'</span></pre></td></tr><tr><td data-num=\"40\"></td><td><pre>\t\tctx<span class=\"token punctuation\">.</span>fillStyle <span class=\"token operator\">=</span> <span class=\"token string\">'#EF5350'</span></pre></td></tr><tr><td data-num=\"41\"></td><td><pre>\t <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>close <span class=\"token operator\"><</span> open<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 跌</span></pre></td></tr><tr><td data-num=\"42\"></td><td><pre>\t\tctx<span class=\"token punctuation\">.</span>strokeStyle <span class=\"token operator\">=</span> <span class=\"token string\">'#26A69A'</span></pre></td></tr><tr><td data-num=\"43\"></td><td><pre>\t\tctx<span class=\"token punctuation\">.</span>fillStyle <span class=\"token operator\">=</span> <span class=\"token string\">'#26A69A'</span></pre></td></tr><tr><td data-num=\"44\"></td><td><pre>\t <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 未变动</span></pre></td></tr><tr><td data-num=\"45\"></td><td><pre>\t\tctx<span class=\"token punctuation\">.</span>strokeStyle <span class=\"token operator\">=</span> <span class=\"token string\">'#888889'</span></pre></td></tr><tr><td data-num=\"46\"></td><td><pre>\t\tctx<span class=\"token punctuation\">.</span>fillStyle <span class=\"token operator\">=</span> <span class=\"token string\">'#888889'</span></pre></td></tr><tr><td data-num=\"47\"></td><td><pre>\t <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"48\"></td><td><pre>\t <span class=\"token comment\">// 获取开盘价 Y 轴像素</span></pre></td></tr><tr><td data-num=\"49\"></td><td><pre>\t <span class=\"token keyword\">let</span> openY <span class=\"token operator\">=</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>open<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"50\"></td><td><pre>\t <span class=\"token comment\">// 获取收盘价 Y 轴像素</span></pre></td></tr><tr><td data-num=\"51\"></td><td><pre>\t <span class=\"token keyword\">let</span> closeY <span class=\"token operator\">=</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>close<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"52\"></td><td><pre>\t <span class=\"token comment\">// 开、收、高、低的 Y 轴像素</span></pre></td></tr><tr><td data-num=\"53\"></td><td><pre>\t <span class=\"token keyword\">let</span> priceY <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>openY<span class=\"token punctuation\">,</span> closeY<span class=\"token punctuation\">,</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>high<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> yAxis<span class=\"token punctuation\">.</span><span class=\"token function\">convertToPixel</span><span class=\"token punctuation\">(</span>low<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span></pre></td></tr><tr><td data-num=\"54\"></td><td><pre>\t <span class=\"token comment\">// 从低到高排序</span></pre></td></tr><tr><td data-num=\"55\"></td><td><pre>\t priceY<span class=\"token punctuation\">.</span><span class=\"token function\">sort</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">a<span class=\"token punctuation\">,</span> b</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"56\"></td><td><pre>\t\t<span class=\"token keyword\">return</span> a <span class=\"token operator\">-</span> b</pre></td></tr><tr><td data-num=\"57\"></td><td><pre>\t <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"58\"></td><td><pre>\t <span class=\"token comment\">// 画蜡烛柱上部</span></pre></td></tr><tr><td data-num=\"59\"></td><td><pre>\t ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillRect</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">-</span> <span class=\"token number\">0.5</span><span class=\"token punctuation\">,</span> priceY<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> priceY<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> priceY<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"60\"></td><td><pre>\t <span class=\"token comment\">// 画蜡烛柱下部</span></pre></td></tr><tr><td data-num=\"61\"></td><td><pre>\t ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillRect</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">-</span> <span class=\"token number\">0.5</span><span class=\"token punctuation\">,</span> priceY<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> priceY<span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> priceY<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"62\"></td><td><pre>\t <span class=\"token comment\">// 蜡烛柱高度</span></pre></td></tr><tr><td data-num=\"63\"></td><td><pre>\t <span class=\"token keyword\">var</span> barHeight <span class=\"token operator\">=</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">max</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> priceY<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> priceY<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"64\"></td><td><pre>\t <span class=\"token comment\">// 画蜡烛柱中部 (viewport.barSpace 蜡烛柱的宽度,随放大缩小操作而变化)</span></pre></td></tr><tr><td data-num=\"65\"></td><td><pre>\t ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillRect</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span>viewport<span class=\"token punctuation\">.</span>barSpace <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> priceY<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> viewport<span class=\"token punctuation\">.</span>barSpace<span class=\"token punctuation\">,</span> barHeight<span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"66\"></td><td><pre>\t <span class=\"token comment\">// 下一蜡烛柱 X 轴的起始位置(viewport.dataSpace 蜡烛柱的宽度加蜡烛柱之间的间隔,随放大缩小操作而变化)</span></pre></td></tr><tr><td data-num=\"67\"></td><td><pre>\t x <span class=\"token operator\">+=</span> viewport<span class=\"token punctuation\">.</span>dataSpace</pre></td></tr><tr><td data-num=\"68\"></td><td><pre>\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"69\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"70\"></td><td><pre><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr></table></figure><h4 id=\"创建指标\"><a class=\"anchor\" href=\"#创建指标\">#</a> 创建指标</h4>\n<figure class=\"highlight js\"><figcaption data-lang=\"JavaScript\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>chart<span class=\"token punctuation\">.</span><span class=\"token function\">createTechnicalIndicator</span><span class=\"token punctuation\">(</span><span class=\"token string\">'custom_candle_solid'</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token string\">'paneId10'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">dragEnabled</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">height</span><span class=\"token operator\">:</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>height <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"工作",
|
||
"解决问题",
|
||
"KLineChart",
|
||
"KLineChart",
|
||
"K线",
|
||
"蜡烛图"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/21/mysql%E6%95%B0%E6%8D%AE%E5%BA%93auto-increment%E8%87%AA%E5%A2%9E%E9%95%BF%E4%B8%8D%E5%8F%98%E7%9A%84%E5%A4%84%E7%90%86%E6%96%B9%E6%B3%95/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/21/mysql%E6%95%B0%E6%8D%AE%E5%BA%93auto-increment%E8%87%AA%E5%A2%9E%E9%95%BF%E4%B8%8D%E5%8F%98%E7%9A%84%E5%A4%84%E7%90%86%E6%96%B9%E6%B3%95/",
|
||
"title": "mysql数据库auto_increment自增长不变的处理方法",
|
||
"date_published": "2022-11-21T06:15:00.000Z",
|
||
"content_html": "<h4 id=\"问题描述\"><a class=\"anchor\" href=\"#问题描述\">#</a> 问题描述</h4>\n<p>今天无意中发现原本能正常增加的 id 突然不变了,查看 sql 发现是取的对应表的自增 id。虽然存到表中的新数据自增 id 变化了,但返回的 id 总是不变。经过查询发现表的自增 id 是存在 information_schema 库中的 tables 表中。tables 表中存储了所有表的对应信息,其中有个 auto_increment 字段存储的就是对应表的下一个自增值。但是 mysql 在新版本中修改了此值的更新规则,老版本中是实时更新,新版本修改为 24 小时更新一次。为了不修改原代码中的逻辑,只能通过修改 mysql 配置使项目正常工作了。</p>\n<h4 id=\"解决办法\"><a class=\"anchor\" href=\"#解决办法\">#</a> 解决办法</h4>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>mysql数据库auto_increment自增长不变的处理方法</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>修改/etc/mysql/mysql.conf.d/mysqld.cnf</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>增加一行information_schema_stats_expiry = 0</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>保存后重启mysql</pre></td></tr><tr><td data-num=\"5\"></td><td><pre>sudo systemctl restart mysql.service</pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>查询是否生效</pre></td></tr><tr><td data-num=\"8\"></td><td><pre>show global variables like 'information_schema_stats_expiry';</pre></td></tr><tr><td data-num=\"9\"></td><td><pre>show session variables like 'information_schema_stats_expiry';</pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"工作",
|
||
"解决问题",
|
||
"mysql"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/13/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/13/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/",
|
||
"title": "数据库管理工具",
|
||
"date_published": "2022-11-13T09:31:00.000Z",
|
||
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<ul>\n<li>很多朋友安装了 mysql 后不知道可以用工具管理,所以专门找了两个数据库管理工具方便大家使用。</li>\n</ul>\n<h4 id=\"navicat\"><a class=\"anchor\" href=\"#navicat\">#</a> Navicat</h4>\n<ol>\n<li><span class=\"exturl\" data-url=\"aHR0cHM6Ly9wYW4uamluZ3hpeXVhbi5jbi8lRTglQkQlQUYlRTQlQkIlQjYvTXlTUUwlRTUlQjclQTUlRTUlODUlQjcvTmF2aWNhdC56aXA=\">下载</span></li>\n<li>安装一路下一步即可 (<span class=\"red\">注意:</span>安装完成后先不要运行)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/13/navicat.jpg\" alt=\"\" /></li>\n<li>注册<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/13/88f1592aed1ffbf3dbfeadda4fa4773f.jpg\" alt=\"\" /></li>\n</ol>\n<div class=\"note info\">\n<p>1、运行注册机<br />\n 2、修改 Your Name(可不改)<br />\n3、点击 Patch(<span class=\"blue\">此时会提示:navicat.exe - x64 -> Cracked</span>)<br />\n4、运行 navicat<br />\n5、点击第一个 Generate 获取注册码 (<span class=\"yellow\">Your Name 上一行</span>)<br />\n 6、点击 Copy 然后粘贴到 navicat 窗口上(也可能会自动粘贴进去)<br />\n7、点击 navicat 上的激活按钮,等待一会,失败后会弹出手动激活按钮<br />\n 8、点击手动激活,窗口上会有一个 request code,把框里的值复制到注册机对应的 request code 框内。<br />\n9、点击第二个 Generate 获取 Activation Code(激活码),把码复制到 navicat 对应的框内。<br />\n10、点击激活完成激活。</p>\n</div>\n<ol start=\"4\">\n<li>查看注册信息<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/13/025adbe8193bc597a06d70eb8691c82c.jpg\" alt=\"\" /></li>\n<li>测试连接<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/13/19b7ff68e8bd4471aa398c04fc989299.jpg\" alt=\"\" /></li>\n<li>新建库<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/13/38a3f946af40173bdc114208fc3b50bc.jpg\" alt=\"\" /></li>\n</ol>\n<h4 id=\"dbeaver\"><a class=\"anchor\" href=\"#dbeaver\">#</a> DBeaver</h4>\n<ol>\n<li><span class=\"exturl\" data-url=\"aHR0cHM6Ly9wYW4uamluZ3hpeXVhbi5jbi8lRTglQkQlQUYlRTQlQkIlQjYvTXlTUUwlRTUlQjclQTUlRTUlODUlQjcvZGJlYXZlci1lZS0yMS4zLnppcA==\">下载</span></li>\n<li><span class=\"exturl\" data-url=\"aHR0cHM6Ly9wYW4uamluZ3hpeXVhbi5jbi8lRTglQkQlQUYlRTQlQkIlQjYvTXlTUUwlRTUlQjclQTUlRTUlODUlQjcvamRrLTExLjAuMTEuemlw\">下载 jdk</span><span class=\"label danger\">✔️有 JAVA 环境的不用下载</span></li>\n<li>修改<span class=\"red\"> dbeaver.ini</span> 配置文件</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token punctuation\">-</span>vm</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>D<span class=\"token punctuation\">:</span>\\jdk<span class=\"token punctuation\">-</span>11.0.11\\bin</pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token punctuation\">-</span>startup</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>plugins/org.eclipse.equinox.launcher_1.6.300.v20210813<span class=\"token punctuation\">-</span>1054.jar</pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token punctuation\">-</span><span class=\"token punctuation\">-</span>launcher.library</pre></td></tr><tr><td data-num=\"6\"></td><td><pre>plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.300.v20210828<span class=\"token punctuation\">-</span><span class=\"token number\">0802</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token punctuation\">-</span>vmargs</pre></td></tr><tr><td data-num=\"8\"></td><td><pre><span class=\"token punctuation\">-</span>XX<span class=\"token punctuation\">:</span>+IgnoreUnrecognizedVMOptions</pre></td></tr><tr><td data-num=\"9\"></td><td><pre><span class=\"token punctuation\">-</span><span class=\"token punctuation\">-</span>add<span class=\"token punctuation\">-</span>modules=ALL<span class=\"token punctuation\">-</span>SYSTEM</pre></td></tr><tr><td data-num=\"10\"></td><td><pre><span class=\"token punctuation\">-</span>Dosgi.requiredJavaVersion=11</pre></td></tr><tr><td data-num=\"11\"></td><td><pre><span class=\"token punctuation\">-</span>Xms128m</pre></td></tr><tr><td data-num=\"12\"></td><td><pre><span class=\"token punctuation\">-</span>Xmx2048m</pre></td></tr><tr><td data-num=\"13\"></td><td><pre><span class=\"token punctuation\">-</span>Djavax.net.ssl.trustStoreType=WINDOWS<span class=\"token punctuation\">-</span>ROOT</pre></td></tr><tr><td data-num=\"14\"></td><td><pre><span class=\"token punctuation\">-</span>Ddbeaver.distribution.type=zip</pre></td></tr><tr><td data-num=\"15\"></td><td><pre><span class=\"token punctuation\">-</span>javaagent<span class=\"token punctuation\">:</span>F<span class=\"token punctuation\">:</span>\\green program\\dbeaver\\dbeaver<span class=\"token punctuation\">-</span>agent\\dbeaver<span class=\"token punctuation\">-</span>agent.jar</pre></td></tr></table></figure><div class=\"note info\">\n<p>第一二行指定<span class=\"red\"> jdk</span> 地址<br />\n最后一行指定<span class=\"red\"> dbeaver-agent.jar 注册工具</span>的位置</p>\n</div>\n<ol start=\"4\">\n<li>启动<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/13/f9c6b3b245e93698b1331b9e0bdc26f3.jpg\" alt=\"\" /></li>\n<li>注册成功<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/13/e16dea0c920dfbbf9138c22f5b86a050.jpg\" alt=\"\" /></li>\n<li>测试连接<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/13/cf0094eb3183006c459c8996c403527e.jpg\" alt=\"\" /></li>\n</ol>\n",
|
||
"tags": [
|
||
"Windows",
|
||
"工具",
|
||
"mysql",
|
||
"数据库工具"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/09/Vue%E6%8C%89%E7%8E%AF%E5%A2%83%E8%AE%BE%E7%BD%AE%E7%BC%96%E8%AF%91%E9%A1%B9%E7%9B%AE/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/09/Vue%E6%8C%89%E7%8E%AF%E5%A2%83%E8%AE%BE%E7%BD%AE%E7%BC%96%E8%AF%91%E9%A1%B9%E7%9B%AE/",
|
||
"title": "Vue按环境设置编译项目",
|
||
"date_published": "2022-11-09T01:47:00.000Z",
|
||
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<ul>\n<li>今天在部署 vue 项目时发现生产环境的端口只有一个,而且被多个项目公用了,刚好此项目又没有配置服务名而是直接使用的根路径。没办法只有修改项目配置重新编译了!</li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>在项目根目录添加两个文件。</li>\n</ul>\n<p><span class=\"blue\">.env.alpha</span></p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>NODE_ENV = 'production'</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>VUE_APP_BASE_URL = '/'</pre></td></tr></table></figure><p><span class=\"blue\">.env.prod</span></p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>NODE_ENV = 'production'</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>VUE_APP_BASE_URL = '/projectName'</pre></td></tr></table></figure><ul>\n<li>在<span class=\"label success\"> package.json</span> 文件内添加不同环境的打包指令</li>\n</ul>\n<figure class=\"highlight json\"><figcaption data-lang=\"JSON\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token property\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre> <span class=\"token property\">\"serve\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"vue-cli-service serve\"</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> <span class=\"token property\">\"build\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"vue-cli-service build\"</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre> <span class=\"token property\">\"build-test\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"vue-cli-service build --mode alpha\"</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> <span class=\"token property\">\"build-prod\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"vue-cli-service build --mode prod\"</span><span class=\"token punctuation\">,</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre> <span class=\"token property\">\"lint\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"vue-cli-service lint\"</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><ul>\n<li>\n<p>项目中<span class=\"yellow\"> base_url</span> 需要使用<span class=\"red\"> process.env.VUE_APP_BASE_URL</span> 替换</p>\n</li>\n<li>\n<p>编译命令</p>\n</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">yarn</span> build-test <span class=\"token comment\">#使用.env.alpha 配置文件中的参数</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token function\">yarn</span> build-prod <span class=\"token comment\">#使用.env.prod 配置文件中的参数</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token function\">yarn</span> build <span class=\"token parameter variable\">--mode</span> alpha <span class=\"token comment\">#使用.env.alpha 配置文件中的参数</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token function\">yarn</span> build <span class=\"token parameter variable\">--mode</span> prod <span class=\"token comment\">#使用.env.prod 配置文件中的参数</span></pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"Linux",
|
||
"项目部署",
|
||
"Vue",
|
||
"Vue",
|
||
"项目部署"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/08/Nginx%E9%85%8D%E7%BD%AE-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/08/Nginx%E9%85%8D%E7%BD%AE-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/",
|
||
"title": "Nginx配置-反向代理",
|
||
"date_published": "2022-11-08T02:05:00.000Z",
|
||
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<ul>\n<li>所有配置方法和介绍均来至于网络搜索汇总,主要用于方便后期巩固学习。</li>\n</ul>\n<h4 id=\"何为反向代理\"><a class=\"anchor\" href=\"#何为反向代理\">#</a> 何为反向代理</h4>\n<ul>\n<li>在介绍反向代理之前,先来了解一下正向代理。</li>\n</ul>\n<p><span class=\"blue\">正向代理:</span>如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/08/991a203be1ec82b36e1f326376617d40.png\" alt=\"991a203be1ec82b36e1f326376617d40.png\" /><br />\n<span class=\"blue\"> 反向代理:</span>看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/08/1c87e386a0ce624a3949bda443cf346d.png\" alt=\"1c87e386a0ce624a3949bda443cf346d.png\" /></p>\n<blockquote>\n<p>正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果是在服务器用,用户无感知,就是反向代理。</p>\n</blockquote>\n<h4 id=\"nginx配置文件\"><a class=\"anchor\" href=\"#nginx配置文件\">#</a> Nginx 配置文件</h4>\n<ul>\n<li>\n<p>在学习 Nginx 之前,要熟知它的配置文件,毕竟,下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。</p>\n</li>\n<li>\n<p>Nginx 默认的配置文件是在安装目录下的 conf 目录下,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。完整的配置文件,可以看一下文章最后。修改过 nginx.conf 配置文件,记得要<span class=\"label success\">✔️重启 Nginx 服务</span>(☆☆☆☆☆)</p>\n</li>\n<li>\n<p>配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):</p>\n</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\"># 主进程叫 master,负责管理子进程,子进程叫 worker</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token comment\"># worker_processes 配置项表示开启几个业务进程,一般和 cpu 核数有关</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre>worker_processes 1;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>events <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\t<span class=\"token comment\"># include 表示可以引入其他文件,此处表示引入 http mime 类型</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num=\"12\"></td><td><pre> default_type application/octet<span class=\"token punctuation\">-</span>stream;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num=\"15\"></td><td><pre></pre></td></tr><tr><td data-num=\"16\"></td><td><pre>\t<span class=\"token comment\"># 虚拟主机,可以配置多个</span></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num=\"19\"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num=\"20\"></td><td><pre></pre></td></tr><tr><td data-num=\"21\"></td><td><pre> location / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"22\"></td><td><pre> \t<span class=\"token comment\"># 路径匹配之后,哪个目录下去匹配相应的网页,html 是相对路径</span></pre></td></tr><tr><td data-num=\"23\"></td><td><pre> root html;</pre></td></tr><tr><td data-num=\"24\"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num=\"25\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"26\"></td><td><pre></pre></td></tr><tr><td data-num=\"27\"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num=\"28\"></td><td><pre> location = /50x.html <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"29\"></td><td><pre> root html;</pre></td></tr><tr><td data-num=\"30\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"31\"></td><td><pre>\t<span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"32\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><blockquote>\n<p>去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:</p>\n</blockquote>\n<ol>\n<li>全局块</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>worker_processes 1;</pre></td></tr></table></figure><ul>\n<li>\n<p>从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。</p>\n</li>\n<li>\n<p>上面这行 worker_processes 配置,是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。</p>\n</li>\n</ul>\n<ol start=\"2\">\n<li>events 块</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>events <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\tworker_connections 1024;</pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><ul>\n<li>events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等</li>\n</ul>\n<blockquote>\n<p>上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。</p>\n</blockquote>\n<ol start=\"3\">\n<li>http 块</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num=\"3\"></td><td><pre> default_type application/octet<span class=\"token punctuation\">-</span>stream;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num=\"5\"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num=\"9\"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num=\"10\"></td><td><pre></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> location / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre> root html;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"15\"></td><td><pre></pre></td></tr><tr><td data-num=\"16\"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num=\"17\"></td><td><pre> location = /50x.html <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre> root html;</pre></td></tr><tr><td data-num=\"19\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><ul>\n<li>这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、<a href=\"https://blog.jingxiyuan.cn/2022/09/27/nginx%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E9%85%8D%E7%BD%AE/\">动静分离、负载均衡</a>都是在这部分中配置</li>\n</ul>\n<p><span class=\"blue\">http 全局块:</span>http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。</p>\n<p><span class=\"blue\">server 块:</span>这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。</p>\n<p><span class=\"blue\">location 块:</span>这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。</p>\n<div class=\"note info\">\n<p>每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。(☆☆☆☆☆)</p>\n</div>\n<h4 id=\"反向代理配置\"><a class=\"anchor\" href=\"#反向代理配置\">#</a> 反向代理配置</h4>\n<ol>\n<li>location 配置规则</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>location <span class=\"token punctuation\">[</span> = <span class=\"token punctuation\">|</span> ~ <span class=\"token punctuation\">|</span> ~* <span class=\"token punctuation\">|</span> ^~ <span class=\"token punctuation\">|</span> @ <span class=\"token punctuation\">]</span> /uri <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。</pre></td></tr><tr><td data-num=\"6\"></td><td><pre>~ :用于表示 uri 包含正则表达式,并且区分大小写。</pre></td></tr><tr><td data-num=\"7\"></td><td><pre>~* :用于表示 uri 包含正则表达式,并且不区分大小写。</pre></td></tr><tr><td data-num=\"8\"></td><td><pre>^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。</pre></td></tr><tr><td data-num=\"9\"></td><td><pre>@ <span class=\"token punctuation\">:</span> \"@\" 定义一个命名的 location,使用在内部定向时,例如 error_page</pre></td></tr><tr><td data-num=\"10\"></td><td><pre>/uri :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则</pre></td></tr><tr><td data-num=\"11\"></td><td><pre>/ :通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default</pre></td></tr></table></figure><p><span class=\"red\">uri 没有 “/” 结尾时</span>,<ins class=\"wavy\">location /abc/def 可以匹配 /abc/defghi 请求,也可以匹配 /abc/def/ghi 等</ins>。<br />\n<span class=\"red\">uri 有 “/” 结尾时</span>,<ins class=\"dot\">location /abc/def/ 不能匹配 /abc/defghi 请求</ins>,<ins class=\"wavy\">只能匹配 /abc/def/anything 这样的请求</ins>☆☆☆☆☆</p>\n<ol start=\"2\">\n<li>proxy_pass 配置规则</li>\n</ol>\n<p><span class=\"red\">url 结尾加上了 /</span>,<ins class=\"wavy\">相当于是绝对路径</ins>,<ins class=\"dot\">则 Nginx 不会把 location 中匹配的路径部分加入代理 url</ins>。<br />\n<span class=\"red\">url 结尾不加 /</span>,<ins class=\"dot\">Nginx 则会把匹配的路径部分加入代理 uri</ins>。</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token key atrule\">情景1</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>proxy_pass后有/ </pre></td></tr><tr><td data-num=\"3\"></td><td><pre>访问地址:http<span class=\"token punctuation\">:</span>//localhost<span class=\"token punctuation\">:</span>8081/WCP.Service/wcp/modeladapter/download/asc.shtml</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>最终代理:http<span class=\"token punctuation\">:</span>//10.194.171.7<span class=\"token punctuation\">:</span>13082/modeladapter/download/asc.shtml</pre></td></tr><tr><td data-num=\"5\"></td><td><pre>location /WCP.Service/wcp/modeladapter/download/ <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre>\tproxy_pass http<span class=\"token punctuation\">:</span>//10.194.171.7<span class=\"token punctuation\">:</span>13082/modeladapter/download/;</pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre>访问地址:http<span class=\"token punctuation\">:</span>//localhost<span class=\"token punctuation\">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num=\"9\"></td><td><pre>最终代理:http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/model/asc.shtml</pre></td></tr><tr><td data-num=\"10\"></td><td><pre>location /model/ <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre>\tproxy_pass http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/model/;</pre></td></tr><tr><td data-num=\"12\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre></pre></td></tr><tr><td data-num=\"14\"></td><td><pre><span class=\"token key atrule\">情景2</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"15\"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num=\"16\"></td><td><pre>访问地址:http<span class=\"token punctuation\">:</span>//localhost<span class=\"token punctuation\">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num=\"17\"></td><td><pre>最终代理:http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num=\"18\"></td><td><pre>location /model/ <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"19\"></td><td><pre>\tproxy_pass http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/;</pre></td></tr><tr><td data-num=\"20\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"21\"></td><td><pre></pre></td></tr><tr><td data-num=\"22\"></td><td><pre>情景3:</pre></td></tr><tr><td data-num=\"23\"></td><td><pre>proxy_pass后没有/ </pre></td></tr><tr><td data-num=\"24\"></td><td><pre>访问地址:http<span class=\"token punctuation\">:</span>//localhost<span class=\"token punctuation\">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num=\"25\"></td><td><pre>最终代理:http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/model/asc.shtml</pre></td></tr><tr><td data-num=\"26\"></td><td><pre>location /model/ <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"27\"></td><td><pre>\tproxy_pass http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082;</pre></td></tr><tr><td data-num=\"28\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"29\"></td><td><pre></pre></td></tr><tr><td data-num=\"30\"></td><td><pre>情景4</pre></td></tr><tr><td data-num=\"31\"></td><td><pre>proxy_pass后没有/ </pre></td></tr><tr><td data-num=\"32\"></td><td><pre>访问地址:http<span class=\"token punctuation\">:</span>//localhost<span class=\"token punctuation\">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num=\"33\"></td><td><pre>最终代理:http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/AAAmodel/asc.shtml</pre></td></tr><tr><td data-num=\"34\"></td><td><pre>location /model/ <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"35\"></td><td><pre>\tproxy_pass http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/AAA;</pre></td></tr><tr><td data-num=\"36\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"37\"></td><td><pre></pre></td></tr><tr><td data-num=\"38\"></td><td><pre>情景5</pre></td></tr><tr><td data-num=\"39\"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num=\"40\"></td><td><pre>访问地址:http<span class=\"token punctuation\">:</span>//localhost<span class=\"token punctuation\">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num=\"41\"></td><td><pre>最终代理:http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num=\"42\"></td><td><pre>location /model <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"43\"></td><td><pre>\tproxy_pass http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/;</pre></td></tr><tr><td data-num=\"44\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"45\"></td><td><pre></pre></td></tr><tr><td data-num=\"46\"></td><td><pre>情景6</pre></td></tr><tr><td data-num=\"47\"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num=\"48\"></td><td><pre>访问地址:http<span class=\"token punctuation\">:</span>//localhost<span class=\"token punctuation\">:</span>8081/modelBBB/asc.shtml</pre></td></tr><tr><td data-num=\"49\"></td><td><pre>最终代理:http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num=\"50\"></td><td><pre>location /model <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"51\"></td><td><pre>\tproxy_pass http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>8082/;</pre></td></tr><tr><td data-num=\"52\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><h4 id=\"nginx完整配置文件\"><a class=\"anchor\" href=\"#nginx完整配置文件\">#</a> Nginx 完整配置文件</h4>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\">#user nobody;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>worker_processes 1;</pre></td></tr><tr><td data-num=\"3\"></td><td><pre></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token comment\">#error_log logs/error.log;</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token comment\">#error_log logs/error.log notice;</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre><span class=\"token comment\">#error_log logs/error.log info;</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre></pre></td></tr><tr><td data-num=\"8\"></td><td><pre><span class=\"token comment\">#pid logs/nginx.pid;</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>events <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num=\"12\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre></pre></td></tr><tr><td data-num=\"14\"></td><td><pre>http <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"15\"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num=\"16\"></td><td><pre> default_type application/octet<span class=\"token punctuation\">-</span>stream;</pre></td></tr><tr><td data-num=\"17\"></td><td><pre></pre></td></tr><tr><td data-num=\"18\"></td><td><pre> <span class=\"token comment\">#log_format main '$remote_addr - $remote_user [$time_local] \"$request\" '</span></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> <span class=\"token comment\"># '$status $body_bytes_sent \"$http_referer\" '</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre> <span class=\"token comment\"># '\"$http_user_agent\" \"$http_x_forwarded_for\"';</span></pre></td></tr><tr><td data-num=\"21\"></td><td><pre></pre></td></tr><tr><td data-num=\"22\"></td><td><pre> <span class=\"token comment\">#access_log logs/access.log main;</span></pre></td></tr><tr><td data-num=\"23\"></td><td><pre></pre></td></tr><tr><td data-num=\"24\"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num=\"25\"></td><td><pre> <span class=\"token comment\">#tcp_nopush on;</span></pre></td></tr><tr><td data-num=\"26\"></td><td><pre></pre></td></tr><tr><td data-num=\"27\"></td><td><pre> <span class=\"token comment\">#keepalive_timeout 0;</span></pre></td></tr><tr><td data-num=\"28\"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num=\"29\"></td><td><pre></pre></td></tr><tr><td data-num=\"30\"></td><td><pre> <span class=\"token comment\">#gzip on;</span></pre></td></tr><tr><td data-num=\"31\"></td><td><pre></pre></td></tr><tr><td data-num=\"32\"></td><td><pre> server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"33\"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num=\"34\"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num=\"35\"></td><td><pre></pre></td></tr><tr><td data-num=\"36\"></td><td><pre> <span class=\"token comment\">#charset koi8-r;</span></pre></td></tr><tr><td data-num=\"37\"></td><td><pre></pre></td></tr><tr><td data-num=\"38\"></td><td><pre> <span class=\"token comment\">#access_log logs/host.access.log main;</span></pre></td></tr><tr><td data-num=\"39\"></td><td><pre></pre></td></tr><tr><td data-num=\"40\"></td><td><pre> location / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"41\"></td><td><pre> root html;</pre></td></tr><tr><td data-num=\"42\"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num=\"43\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"44\"></td><td><pre></pre></td></tr><tr><td data-num=\"45\"></td><td><pre> <span class=\"token comment\">#error_page 404 /404.html;</span></pre></td></tr><tr><td data-num=\"46\"></td><td><pre></pre></td></tr><tr><td data-num=\"47\"></td><td><pre> <span class=\"token comment\"># redirect server error pages to the static page /50x.html</span></pre></td></tr><tr><td data-num=\"48\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"49\"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num=\"50\"></td><td><pre> location = /50x.html <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"51\"></td><td><pre> root html;</pre></td></tr><tr><td data-num=\"52\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"53\"></td><td><pre></pre></td></tr><tr><td data-num=\"54\"></td><td><pre> <span class=\"token comment\"># proxy the PHP scripts to Apache listening on 127.0.0.1:80</span></pre></td></tr><tr><td data-num=\"55\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"56\"></td><td><pre> <span class=\"token comment\">#location ~ \\.php$ {</span></pre></td></tr><tr><td data-num=\"57\"></td><td><pre> <span class=\"token comment\"># proxy_pass http://127.0.0.1;</span></pre></td></tr><tr><td data-num=\"58\"></td><td><pre> <span class=\"token comment\">#}</span></pre></td></tr><tr><td data-num=\"59\"></td><td><pre></pre></td></tr><tr><td data-num=\"60\"></td><td><pre> <span class=\"token comment\"># pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000</span></pre></td></tr><tr><td data-num=\"61\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"62\"></td><td><pre> <span class=\"token comment\">#location ~ \\.php$ {</span></pre></td></tr><tr><td data-num=\"63\"></td><td><pre> <span class=\"token comment\"># root html;</span></pre></td></tr><tr><td data-num=\"64\"></td><td><pre> <span class=\"token comment\"># fastcgi_pass 127.0.0.1:9000;</span></pre></td></tr><tr><td data-num=\"65\"></td><td><pre> <span class=\"token comment\"># fastcgi_index index.php;</span></pre></td></tr><tr><td data-num=\"66\"></td><td><pre> <span class=\"token comment\"># fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;</span></pre></td></tr><tr><td data-num=\"67\"></td><td><pre> <span class=\"token comment\"># include fastcgi_params;</span></pre></td></tr><tr><td data-num=\"68\"></td><td><pre> <span class=\"token comment\">#}</span></pre></td></tr><tr><td data-num=\"69\"></td><td><pre></pre></td></tr><tr><td data-num=\"70\"></td><td><pre> <span class=\"token comment\"># deny access to .htaccess files, if Apache's document root</span></pre></td></tr><tr><td data-num=\"71\"></td><td><pre> <span class=\"token comment\"># concurs with nginx's one</span></pre></td></tr><tr><td data-num=\"72\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"73\"></td><td><pre> <span class=\"token comment\">#location ~ /\\.ht {</span></pre></td></tr><tr><td data-num=\"74\"></td><td><pre> <span class=\"token comment\"># deny all;</span></pre></td></tr><tr><td data-num=\"75\"></td><td><pre> <span class=\"token comment\">#}</span></pre></td></tr><tr><td data-num=\"76\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"77\"></td><td><pre> <span class=\"token comment\"># another virtual host using mix of IP-, name-, and port-based configuration</span></pre></td></tr><tr><td data-num=\"78\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"79\"></td><td><pre> <span class=\"token comment\">#server {</span></pre></td></tr><tr><td data-num=\"80\"></td><td><pre> <span class=\"token comment\"># listen 8000;</span></pre></td></tr><tr><td data-num=\"81\"></td><td><pre> <span class=\"token comment\"># listen somename:8080;</span></pre></td></tr><tr><td data-num=\"82\"></td><td><pre> <span class=\"token comment\"># server_name somename alias another.alias;</span></pre></td></tr><tr><td data-num=\"83\"></td><td><pre> <span class=\"token comment\"># location / {</span></pre></td></tr><tr><td data-num=\"84\"></td><td><pre> <span class=\"token comment\"># root html;</span></pre></td></tr><tr><td data-num=\"85\"></td><td><pre> <span class=\"token comment\"># index index.html index.htm;</span></pre></td></tr><tr><td data-num=\"86\"></td><td><pre> <span class=\"token comment\"># }</span></pre></td></tr><tr><td data-num=\"87\"></td><td><pre> <span class=\"token comment\">#}</span></pre></td></tr><tr><td data-num=\"88\"></td><td><pre> <span class=\"token comment\"># HTTPS server</span></pre></td></tr><tr><td data-num=\"89\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"90\"></td><td><pre> <span class=\"token comment\">#server {</span></pre></td></tr><tr><td data-num=\"91\"></td><td><pre> <span class=\"token comment\"># listen 443 ssl;</span></pre></td></tr><tr><td data-num=\"92\"></td><td><pre> <span class=\"token comment\"># server_name localhost;</span></pre></td></tr><tr><td data-num=\"93\"></td><td><pre> <span class=\"token comment\"># ssl_certificate cert.pem;</span></pre></td></tr><tr><td data-num=\"94\"></td><td><pre> <span class=\"token comment\"># ssl_certificate_key cert.key;</span></pre></td></tr><tr><td data-num=\"95\"></td><td><pre></pre></td></tr><tr><td data-num=\"96\"></td><td><pre> <span class=\"token comment\"># ssl_session_cache shared:SSL:1m;</span></pre></td></tr><tr><td data-num=\"97\"></td><td><pre> <span class=\"token comment\"># ssl_session_timeout 5m;</span></pre></td></tr><tr><td data-num=\"98\"></td><td><pre></pre></td></tr><tr><td data-num=\"99\"></td><td><pre> <span class=\"token comment\"># ssl_ciphers HIGH:!aNULL:!MD5;</span></pre></td></tr><tr><td data-num=\"100\"></td><td><pre> <span class=\"token comment\"># ssl_prefer_server_ciphers on;</span></pre></td></tr><tr><td data-num=\"101\"></td><td><pre></pre></td></tr><tr><td data-num=\"102\"></td><td><pre> <span class=\"token comment\"># location / {</span></pre></td></tr><tr><td data-num=\"103\"></td><td><pre> <span class=\"token comment\"># root html;</span></pre></td></tr><tr><td data-num=\"104\"></td><td><pre> <span class=\"token comment\"># index index.html index.htm;</span></pre></td></tr><tr><td data-num=\"105\"></td><td><pre> <span class=\"token comment\"># }</span></pre></td></tr><tr><td data-num=\"106\"></td><td><pre> <span class=\"token comment\">#}</span></pre></td></tr><tr><td data-num=\"107\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"Linux",
|
||
"服务",
|
||
"Nginx",
|
||
"Nginx",
|
||
"反向代理"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/04/%E8%AE%B0%E4%B8%80%E6%AC%A1Vue%E9%A1%B9%E7%9B%AE%E7%9A%84%E9%83%A8%E7%BD%B2/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/04/%E8%AE%B0%E4%B8%80%E6%AC%A1Vue%E9%A1%B9%E7%9B%AE%E7%9A%84%E9%83%A8%E7%BD%B2/",
|
||
"title": "记一次Vue项目的部署",
|
||
"date_published": "2022-11-04T07:21:00.000Z",
|
||
"content_html": "<h4 id=\"描述\"><a class=\"anchor\" href=\"#描述\">#</a> 描述</h4>\n<ul>\n<li>今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。</li>\n</ul>\n<h4 id=\"过程\"><a class=\"anchor\" href=\"#过程\">#</a> 过程</h4>\n<ul>\n<li>卸载旧的 nodejs(此命令会卸载掉相关依赖包)</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">sudo</span> <span class=\"token function\">apt</span> autoremove <span class=\"token parameter variable\">--purge</span> nodejs</pre></td></tr></table></figure><ul>\n<li>安装 NodeJS</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">curl</span> <span class=\"token parameter variable\">-fsSL</span> https://deb.nodesource.com/setup_16.x <span class=\"token operator\">|</span> <span class=\"token function\">sudo</span> <span class=\"token parameter variable\">-E</span> <span class=\"token function\">bash</span> - <span class=\"token operator\">&&</span> <span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> <span class=\"token parameter variable\">-y</span> nodejs</pre></td></tr></table></figure><ul>\n<li>安装 yarn</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">curl</span> <span class=\"token parameter variable\">-sL</span> https://dl.yarnpkg.com/debian/pubkey.gpg <span class=\"token operator\">|</span> gpg <span class=\"token parameter variable\">--dearmor</span> <span class=\"token operator\">|</span> <span class=\"token function\">sudo</span> <span class=\"token function\">tee</span> /usr/share/keyrings/yarnkey.gpg <span class=\"token operator\">></span>/dev/null</pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token builtin class-name\">echo</span> <span class=\"token string\">\"deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main\"</span> <span class=\"token operator\">|</span> <span class=\"token function\">sudo</span> <span class=\"token function\">tee</span> /etc/apt/sources.list.d/yarn.list</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> update <span class=\"token operator\">&&</span> <span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> <span class=\"token function\">yarn</span></pre></td></tr></table></figure><ul>\n<li>初始化 (到项目根目录执行)</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">yarn</span> <span class=\"token function\">install</span></pre></td></tr></table></figure><ul>\n<li>编译(到项目根目录执行,完成后会生成 dist 目录)</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">yarn</span> build</pre></td></tr></table></figure><ul>\n<li>安装 nginx</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">apt</span> <span class=\"token function\">install</span> nginx</pre></td></tr></table></figure><ul>\n<li>配置 nginx (编译 /etc/nginx/sites-available/default)</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre> listen 80 default_server;</pre></td></tr><tr><td data-num=\"3\"></td><td><pre> listen <span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>80 default_server;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> <span class=\"token comment\"># SSL configuration</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> <span class=\"token comment\"># listen 443 ssl default_server;</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre> <span class=\"token comment\"># listen [::]:443 ssl default_server;</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre> <span class=\"token comment\"># Note: You should disable gzip for SSL traffic.</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> <span class=\"token comment\"># See: https://bugs.debian.org/773332</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> <span class=\"token comment\"># Read up on ssl_ciphers to ensure a secure configuration.</span></pre></td></tr><tr><td data-num=\"14\"></td><td><pre> <span class=\"token comment\"># See: https://bugs.debian.org/765782</span></pre></td></tr><tr><td data-num=\"15\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"16\"></td><td><pre> <span class=\"token comment\"># Self signed certs generated by the ssl-cert package</span></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> <span class=\"token comment\"># Don't use them in a production server!</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> <span class=\"token comment\"># include snippets/snakeoil.conf;</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre></pre></td></tr><tr><td data-num=\"21\"></td><td><pre> root /var/www/html;</pre></td></tr><tr><td data-num=\"22\"></td><td><pre></pre></td></tr><tr><td data-num=\"23\"></td><td><pre> <span class=\"token comment\"># Add index.php to the list if you are using PHP</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre> index index.html index.htm index.nginx<span class=\"token punctuation\">-</span>debian.html;</pre></td></tr><tr><td data-num=\"25\"></td><td><pre></pre></td></tr><tr><td data-num=\"26\"></td><td><pre> server_name _;</pre></td></tr><tr><td data-num=\"27\"></td><td><pre></pre></td></tr><tr><td data-num=\"28\"></td><td><pre> location /api <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"29\"></td><td><pre> proxy_pass http<span class=\"token punctuation\">:</span>//localhost<span class=\"token punctuation\">:</span>8080;</pre></td></tr><tr><td data-num=\"30\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"31\"></td><td><pre></pre></td></tr><tr><td data-num=\"32\"></td><td><pre> location / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"33\"></td><td><pre> <span class=\"token comment\"># First attempt to serve request as file, then</span></pre></td></tr><tr><td data-num=\"34\"></td><td><pre> <span class=\"token comment\"># as directory, then fall back to displaying a 404.</span></pre></td></tr><tr><td data-num=\"35\"></td><td><pre> <span class=\"token comment\">#try_files $uri $uri/ =404;</span></pre></td></tr><tr><td data-num=\"36\"></td><td><pre> alias /opt/codes/dayu<span class=\"token punctuation\">-</span>tools<span class=\"token punctuation\">-</span>arbitrage<span class=\"token punctuation\">-</span>web/dist/;</pre></td></tr><tr><td data-num=\"37\"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num=\"38\"></td><td><pre> <span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"39\"></td><td><pre>}</pre></td></tr></table></figure><h4 id=\"其它\"><a class=\"anchor\" href=\"#其它\">#</a> 其它</h4>\n<ul>\n<li>重新编译前需要先删除 dist 目录</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">rm</span> dist <span class=\"token parameter variable\">-fr</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token function\">yarn</span> build</pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"Linux",
|
||
"项目部署",
|
||
"Vue",
|
||
"vue",
|
||
"NodeJS",
|
||
"yarn"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/03/%E4%B8%8A%E7%8F%AD%E4%BA%86/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/03/%E4%B8%8A%E7%8F%AD%E4%BA%86/",
|
||
"title": "上班了",
|
||
"date_published": "2022-11-03T03:25:00.000Z",
|
||
"content_html": "<ul>\n<li>终于又上班了。O (∩_∩) O~</li>\n</ul>\n",
|
||
"tags": [
|
||
"生活",
|
||
"心情",
|
||
"心情"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/02/2-dev-null%E5%92%8C-dev-null-2-1%E5%92%8C2-1-dev-null%E7%9A%84%E5%8C%BA%E5%88%AB/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/02/2-dev-null%E5%92%8C-dev-null-2-1%E5%92%8C2-1-dev-null%E7%9A%84%E5%8C%BA%E5%88%AB/",
|
||
"title": "2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别",
|
||
"date_published": "2022-11-02T08:29:00.000Z",
|
||
"content_html": "<h4 id=\"区别\"><a class=\"anchor\" href=\"#区别\">#</a> 区别:</h4>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span>/dev/null</pre></td></tr></table></figure><p>意思就是把错误输出到 “黑洞”</p>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token operator\">></span>/dev/null <span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span><span class=\"token file-descriptor important\">&1</span></pre></td></tr></table></figure><p>默认情况是 1,也就是等同于 1>/dev/null 2>&1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞”</p>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span><span class=\"token file-descriptor important\">&1</span> <span class=\"token operator\">></span>/dev/null</pre></td></tr></table></figure><p>意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕</p>\n<h4 id=\"解释\"><a class=\"anchor\" href=\"#解释\">#</a> 解释:</h4>\n<ol>\n<li>\n<p>文件描述符<br />\n Linux 系统预留三个文件描述符:0、1 和 2,他们的意义如下所示:<br />\n0—— 标准输入(stdin)<br />\n略...<br />\n1—— 标准输出(stdout)<br />\n在当前目录下,有且只有一个文件名称为 a.txt 的文件,这时我们运行这个命令【ls a.txt】, 就会获得一个标准输出 stdout 的输出结果:a.txt<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen629761046.jpg\" alt=\"\" /><br />\n2—— 标准错误(stderr)<br />\n在当前目录下,有且只有一个文件名称为 a.txt 的文件,我们运行命令【ls b.txt】,我们就会获得一个标准错误 stderr 的输出结果 “ls:无法访问 b.txt:没有这样的文件或目录”。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen629793578.jpg\" alt=\"\" /></p>\n</li>\n<li>\n<p>重定向<br />\n重定向的符号有两个:> 或 >>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举例如下:</p>\n</li>\n</ol>\n<ul>\n<li>\n<p>重定向标准输出 stdout<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen630033531.jpg\" alt=\"\" /><br />\n 如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将 a.txt 打印到屏幕。在紧接的 cat 操作后,可以发现本来应该被输出的内容被记录到 stdout.txt 中。</p>\n</li>\n<li>\n<p>重定向标准错误 stderr<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen630256640.jpg\" alt=\"\" /><br />\n 如上图所示,文件描述符 2,标准错误的重定向也是同样的原理被记录在了文件 stderr.txt 这个文件里面了。</p>\n</li>\n<li>\n<p>可以将 stderr 单独定向到一个文件,stdout 重定向到另一个文件</p>\n</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">ls</span> b.txt <span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span> stderr.txt <span class=\"token operator\"><span class=\"token file-descriptor important\">1</span>></span>stdout.txt</pre></td></tr></table></figure><ul>\n<li>也可以将 stderr 和 stdout 重定向到同一个文件</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">ls</span> b.txt <span class=\"token operator\">></span> output.txt <span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span><span class=\"token file-descriptor important\">&1</span></pre></td></tr></table></figure><ul>\n<li>或采用下面的方法,可以少写几个字,能达到同样的效果</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">ls</span> b.txt <span class=\"token operator\">&></span> output.txt</pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token function\">ls</span> b.txt <span class=\"token operator\">>&</span> output.txt <span class=\"token comment\">#两个表达式效果一样的</span></pre></td></tr></table></figure><ol start=\"3\">\n<li>Linux 特殊文件<br />\n /dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null 这个设备通常也被称为位桶(bit bucket)或黑洞。<br />\n所以,2>/dev/null 的意思就是将标准错误 stderr 删掉。</li>\n</ol>\n",
|
||
"tags": [
|
||
"Linux",
|
||
"Shell",
|
||
"Shell",
|
||
"2>&1"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/11/01/360%E7%8B%AC%E7%AB%8B%E7%89%88%E5%B0%8F%E5%B7%A5%E5%85%B7/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/11/01/360%E7%8B%AC%E7%AB%8B%E7%89%88%E5%B0%8F%E5%B7%A5%E5%85%B7/",
|
||
"title": "360独立版小工具",
|
||
"date_published": "2022-11-01T07:20:00.000Z",
|
||
"content_html": "<h4 id=\"360独立版小工具\"><a class=\"anchor\" href=\"#360独立版小工具\">#</a> 360 独立版小工具</h4>\n<p><img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen623936500.jpg\" alt=\"\" /><br />\n360 全家桶众说纷纭但工具箱还是挺实用的,这波小工具可以单独下载使用,有需要的朋友赶紧下载吧!</p>\n<p><span class=\"exturl\" data-url=\"aHR0cHM6Ly9wYW4uamluZ3hpeXVhbi5jbi8lRTglQkQlQUYlRTQlQkIlQjYvJUU3JUIzJUJCJUU3JUJCJTlGLzM2MCVFNSVCMCU4RiVFNSVCNyVBNSVFNSU4NSVCNw==\">下载地址</span></p>\n<h4 id=\"部分工具截图\"><a class=\"anchor\" href=\"#部分工具截图\">#</a> 部分工具截图</h4>\n<p><img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/1a2e50f738d4a8c1.png\" alt=\"\" /><br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/21d1ee247aa7c69f.png\" alt=\"\" /><br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen624392843.jpg\" alt=\"\" /></p>\n",
|
||
"tags": [
|
||
"Windows",
|
||
"工具",
|
||
"360小工具"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/10/31/%E4%B8%80%E9%94%AE%E5%85%B3%E9%97%ADWindows10-11%E7%B3%BB%E7%BB%9F%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/10/31/%E4%B8%80%E9%94%AE%E5%85%B3%E9%97%ADWindows10-11%E7%B3%BB%E7%BB%9F%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0/",
|
||
"title": "一键关闭Windows10/11系统自动更新",
|
||
"date_published": "2022-10-31T07:30:00.000Z",
|
||
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>当你经常需要在家远程到公司进行办公,或者开启了很多临时文件、文档、软件需要等到第二天继续之前的工作时,结果系统自行更新并重启了。是不是会让你非常郁闷。关闭系统自行更新就可以轻松解决此类问题。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/31/afc55608b4c1b512.png\" alt=\"\" /></li>\n</ul>\n<h4 id=\"下载\"><a class=\"anchor\" href=\"#下载\">#</a> 下载</h4>\n<p><span class=\"exturl\" data-url=\"aHR0cHM6Ly9tZXRhLmJveC5sZW5vdm8uY29tL2xpbmsvdmlldy8yNjdjOGU3Mzc5MTY0OWJmYmNlMmVkODQ0NGMxNjBjNg==\">win10</span> / <span class=\"exturl\" data-url=\"aHR0cHM6Ly9tZXRhLmJveC5sZW5vdm8uY29tL3YvbGluay92aWV3LzQwZGIwNTQ1ZThmNDQ4ZDc5OTBkZDE2YjU5NDgzNjhh\">win11</span> / <span class=\"exturl\" data-url=\"aHR0cHM6Ly9wYW4uamluZ3hpeXVhbi5jbi8lRTglQkQlQUYlRTQlQkIlQjYvJUU3JUIzJUJCJUU3JUJCJTlGL1dpbmRvd3MlRTglODclQUElRTUlOEElQTglRTYlOUIlQjQlRTYlOTYlQjA=\">本地</span></p>\n",
|
||
"tags": [
|
||
"Windows",
|
||
"工具",
|
||
"Windows10",
|
||
"Windows11",
|
||
"自动更新"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/10/27/%E6%9E%81%E7%A9%BA%E9%97%B4web%E7%AB%AFhttps%E7%9B%B4%E8%BF%9Enginx%E9%85%8D%E7%BD%AE/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/10/27/%E6%9E%81%E7%A9%BA%E9%97%B4web%E7%AB%AFhttps%E7%9B%B4%E8%BF%9Enginx%E9%85%8D%E7%BD%AE/",
|
||
"title": "极空间web端https直连nginx配置",
|
||
"date_published": "2022-10-27T05:34:00.000Z",
|
||
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>ip 直连一般都映射了 5055, 但是直接访问 5055 极空间只提供了 http 协议,如果希望使用 https 协议则必须使用其它端口进行访问。以下方案采用 nginx 反向代理实现,端口使用 10000 举例。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/27/2022-10-27-14-39-25.jpg\" alt=\"\" /></li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ol>\n<li>需要先把 10000 端口在路由器上做好映射。</li>\n<li>证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度)</li>\n<li>http 跳转 https 配置</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\t\tif ($scheme = http) <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\t\t\trewrite ^(.<span class=\"token important\">*)$</span> https<span class=\"token punctuation\">:</span>//$host$1 permanent;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>\t\t<span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><ol start=\"4\">\n<li>web 端口监听配置</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\">#极空间 - web</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>server <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\tlisten 10000 ssl http2; <span class=\"token comment\">#ipv4</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre>\tlisten <span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>10000 ssl http2; <span class=\"token comment\">#ipv6</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>\tserver_name xxx.xxx.com; <span class=\"token comment\">#填写自己的域名,主域名或者子域名</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>\t<span class=\"token comment\">#include /etc/nginx/conf.d/ssl/ssl_common.conf;</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre>\tssl_certificate_key /etc/nginx/conf.d/ssl/xxx.key; <span class=\"token comment\">#加密证书</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>\tssl_certificate /etc/nginx/conf.d/ssl/xxx.pem; <span class=\"token comment\">#加密证书</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\tssl_session_timeout 1d;</pre></td></tr><tr><td data-num=\"11\"></td><td><pre>\tssl_session_cache shared<span class=\"token punctuation\">:</span>MozSSL<span class=\"token punctuation\">:</span>10m;</pre></td></tr><tr><td data-num=\"12\"></td><td><pre>\tssl_session_tickets off;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre>\tssl_protocols TLSv1.2 TLSv1.3;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre>\tssl_ciphers ECDHE<span class=\"token punctuation\">-</span>ECDSA<span class=\"token punctuation\">-</span>AES128<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA256<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>RSA<span class=\"token punctuation\">-</span>AES128<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA256<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>ECDSA<span class=\"token punctuation\">-</span>AES256<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA384<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>RSA<span class=\"token punctuation\">-</span>AES256<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA384<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>ECDSA<span class=\"token punctuation\">-</span>CHACHA20<span class=\"token punctuation\">-</span>POLY1305<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>RSA<span class=\"token punctuation\">-</span>CHACHA20<span class=\"token punctuation\">-</span>POLY1305<span class=\"token punctuation\">:</span>DHE<span class=\"token punctuation\">-</span>RSA<span class=\"token punctuation\">-</span>AES128<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA256<span class=\"token punctuation\">:</span>DHE<span class=\"token punctuation\">-</span>RSA<span class=\"token punctuation\">-</span>AES256<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA384;</pre></td></tr><tr><td data-num=\"15\"></td><td><pre>\tssl_prefer_server_ciphers on;</pre></td></tr><tr><td data-num=\"16\"></td><td><pre></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> <span class=\"token comment\">#开启 OCSP stapling</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre>\tssl_stapling on;</pre></td></tr><tr><td data-num=\"19\"></td><td><pre>\tssl_stapling_verify on;</pre></td></tr><tr><td data-num=\"20\"></td><td><pre></pre></td></tr><tr><td data-num=\"21\"></td><td><pre>\tclient_max_body_size 128M;</pre></td></tr><tr><td data-num=\"22\"></td><td><pre></pre></td></tr><tr><td data-num=\"23\"></td><td><pre>\tadd_header Strict<span class=\"token punctuation\">-</span>Transport<span class=\"token punctuation\">-</span>Security \"max<span class=\"token punctuation\">-</span>age=31536000; includeSubdomains; preload\";</pre></td></tr><tr><td data-num=\"24\"></td><td><pre></pre></td></tr><tr><td data-num=\"25\"></td><td><pre>\tproxy_send_timeout 180s; <span class=\"token comment\">#设置发送超时时间</span></pre></td></tr><tr><td data-num=\"26\"></td><td><pre> proxy_read_timeout 180s; <span class=\"token comment\">#设置读取超时时间</span></pre></td></tr><tr><td data-num=\"27\"></td><td><pre></pre></td></tr><tr><td data-num=\"28\"></td><td><pre>\t<span class=\"token comment\"># Prevent Information leaks</span></pre></td></tr><tr><td data-num=\"29\"></td><td><pre>\tproxy_hide_header X<span class=\"token punctuation\">-</span>Powered<span class=\"token punctuation\">-</span>By;</pre></td></tr><tr><td data-num=\"30\"></td><td><pre>\tproxy_hide_header Server;</pre></td></tr><tr><td data-num=\"31\"></td><td><pre>\tproxy_hide_header X<span class=\"token punctuation\">-</span>AspNetMvc<span class=\"token punctuation\">-</span>Version;</pre></td></tr><tr><td data-num=\"32\"></td><td><pre>\tproxy_hide_header X<span class=\"token punctuation\">-</span>AspNet<span class=\"token punctuation\">-</span>Version;</pre></td></tr><tr><td data-num=\"33\"></td><td><pre></pre></td></tr><tr><td data-num=\"34\"></td><td><pre>\t<span class=\"token comment\"># http security headers</span></pre></td></tr><tr><td data-num=\"35\"></td><td><pre>\tadd_header X<span class=\"token punctuation\">-</span>Content<span class=\"token punctuation\">-</span>Type<span class=\"token punctuation\">-</span>Options nosniff;</pre></td></tr><tr><td data-num=\"36\"></td><td><pre>\tadd_header Pragma no<span class=\"token punctuation\">-</span>cache;</pre></td></tr><tr><td data-num=\"37\"></td><td><pre>\tadd_header Cache<span class=\"token punctuation\">-</span>Control no<span class=\"token punctuation\">-</span>store;</pre></td></tr><tr><td data-num=\"38\"></td><td><pre>\tadd_header X<span class=\"token punctuation\">-</span>XSS<span class=\"token punctuation\">-</span>Protection \"1; mode=block\";</pre></td></tr><tr><td data-num=\"39\"></td><td><pre>\tadd_header Referrer<span class=\"token punctuation\">-</span>Policy origin<span class=\"token punctuation\">-</span>when<span class=\"token punctuation\">-</span>cross<span class=\"token punctuation\">-</span>origin;</pre></td></tr><tr><td data-num=\"40\"></td><td><pre>\tadd_header X<span class=\"token punctuation\">-</span>Permitted<span class=\"token punctuation\">-</span>Cross<span class=\"token punctuation\">-</span>Domain<span class=\"token punctuation\">-</span>Policies none;</pre></td></tr><tr><td data-num=\"41\"></td><td><pre> add_header X<span class=\"token punctuation\">-</span>Frame<span class=\"token punctuation\">-</span>Options SAMEORIGIN; <span class=\"token comment\">#允许同域嵌套</span></pre></td></tr><tr><td data-num=\"42\"></td><td><pre></pre></td></tr><tr><td data-num=\"43\"></td><td><pre>\t<span class=\"token comment\"># Add Security cookie flags</span></pre></td></tr><tr><td data-num=\"44\"></td><td><pre>\tproxy_cookie_path ~(.<span class=\"token important\">*)</span> \"$1; SameSite=strict; secure; httponly\";</pre></td></tr><tr><td data-num=\"45\"></td><td><pre></pre></td></tr><tr><td data-num=\"46\"></td><td><pre>\t<span class=\"token comment\"># Path to the root of your installation</span></pre></td></tr><tr><td data-num=\"47\"></td><td><pre>\tlocation / <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"48\"></td><td><pre>\t\tproxy_intercept_errors on;</pre></td></tr><tr><td data-num=\"49\"></td><td><pre>\t\tproxy_max_temp_file_size 0;</pre></td></tr><tr><td data-num=\"50\"></td><td><pre>\t\tproxy_set_header Host $host;</pre></td></tr><tr><td data-num=\"51\"></td><td><pre>\t\tproxy_set_header X<span class=\"token punctuation\">-</span>Real<span class=\"token punctuation\">-</span>IP $remote_addr;</pre></td></tr><tr><td data-num=\"52\"></td><td><pre>\t\tproxy_set_header X<span class=\"token punctuation\">-</span>Forwarded<span class=\"token punctuation\">-</span>For $proxy_add_x_forwarded_for;</pre></td></tr><tr><td data-num=\"53\"></td><td><pre>\t\tproxy_set_header X<span class=\"token punctuation\">-</span>Forwarded<span class=\"token punctuation\">-</span>Proto $scheme;</pre></td></tr><tr><td data-num=\"54\"></td><td><pre> </pre></td></tr><tr><td data-num=\"55\"></td><td><pre>\t\tproxy_pass http<span class=\"token punctuation\">:</span>//极空间内网ip<span class=\"token punctuation\">:</span>5055; <span class=\"token comment\">#这里设置你自己要跳转的局域网应用;</span></pre></td></tr><tr><td data-num=\"56\"></td><td><pre>\t\tproxy_redirect http<span class=\"token punctuation\">:</span>//域名<span class=\"token punctuation\">:</span>5055/home https<span class=\"token punctuation\">:</span>//域名<span class=\"token punctuation\">:</span>10000/home; <span class=\"token comment\">#极空间在登陆后会跳转到 http 协议的 5055 端口,所以要在此替换为 https 协议的 10000 端口</span></pre></td></tr><tr><td data-num=\"57\"></td><td><pre>\t<span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"58\"></td><td><pre></pre></td></tr><tr><td data-num=\"59\"></td><td><pre>\terror_page 500 502 503 504 /500.html;</pre></td></tr><tr><td data-num=\"60\"></td><td><pre>\terror_page 400 404 /500.html;</pre></td></tr><tr><td data-num=\"61\"></td><td><pre>\tlocation = /500.html <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"62\"></td><td><pre>\t\troot /usr/share/nginx/html/; <span class=\"token comment\">#错误 html</span></pre></td></tr><tr><td data-num=\"63\"></td><td><pre>\t<span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"64\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><h4 id=\"问题\"><a class=\"anchor\" href=\"#问题\">#</a> 问题</h4>\n<ul>\n<li>需要开启允许嵌套否则登陆后所有应用都是拒绝访问</li>\n<li>需要配置 proxy_redirect 替换响应 url,否则会跳转到默认 http 协议的 5055 端口</li>\n<li>如果配置 proxy_redirect 后无效可能需要清除浏览器缓存(F12 - 网络 - 右键点击 url 区域 - 清除浏览器缓存)</li>\n</ul>\n",
|
||
"tags": [
|
||
"极空间",
|
||
"nginx",
|
||
"极空间",
|
||
"https",
|
||
"web"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/10/22/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/10/22/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
|
||
"title": "极空间Docker版青龙面板安装与配置",
|
||
"date_published": "2022-10-22T02:44:00.000Z",
|
||
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>青龙面板是一个支持 python3、javascript、shell、typescript 的定时任务管理面板。它支持在线管理脚本、环境变量、配置文件,支持在线查看日志及支持多种方式的消息通知。</li>\n</ul>\n<h4 id=\"安装\"><a class=\"anchor\" href=\"#安装\">#</a> 安装</h4>\n<ul>\n<li>本文使用的是<span class=\"exturl\" data-url=\"aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL3doeW91ci9xaW5nbG9uZw==\"> whyour/qinglong</span> 的镜像。</li>\n<li>路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/24/2022-10-24-19-29-06.jpg\" alt=\"\" /></li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\">#青龙面板装载路径</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>/ql/data</pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token comment\">#博客装载路径(如果你不部署 hexo 博客可以不用配置)</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre>/root/.ssh <span class=\"token comment\">#ssh 证书文件(如果你不用把 hexo 推送到 git 上可以不用配置)</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>/blog <span class=\"token comment\">#hexo 博客编译目录</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre>/blog/nginx_blog <span class=\"token comment\">#nginx 上放置博客的目录(例如:/Docker/nginx/html/blog)</span></pre></td></tr></table></figure><ul>\n<li>端口<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/22/2022-10-22-11-02-195ea093b249c53244.jpg\" alt=\"\" /><br />\n <code>4000端口是hexo-admin使用的,如果你不用可以不配置</code></li>\n<li>环境<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/22/2022-10-22-11-02-19a0822966d88a012e.jpg\" alt=\"\" /></li>\n<li>登录<br />\n地址:<span class=\"exturl\" data-url=\"aHR0cDovL3huLS1JUC1odThkeTcwZTRtNWE6NTcwMA==\">http:// 极空间 IP:5700</span><br />\n 默认账号:admin<br />\n 默认密码:admin</li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>我主要用青龙面板跑京东的脚本,所以也只介绍相关的配置方法</li>\n<li>定时任务 (我使用的是 KingRan/KR 的集合库,以下是拉取命令)<br />\n <code>ql repo https://github.com/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp|wskey" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"</code></li>\n<li>定时规则(我是每 3 小时拉取一次,不要拉取太频繁否则可能被封)<br />\n <code>0 */3 * * *</code></li>\n<li>环境变量</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>名称:JD_COOKIE</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>值:web京东登陆后按F12在网络tab页中的请求内查找cookie,然后复制pt_key=到pt_pin=等</pre></td></tr></table></figure><ul>\n<li>配置文件 (主要修改和添加以下配置)</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>RepoFileExtensions=\"js py ts\"</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>钉钉(消息推送)</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>export DD_BOT_TOKEN=</pre></td></tr><tr><td data-num=\"5\"></td><td><pre>export DD_BOT_SECRET=</pre></td></tr><tr><td data-num=\"6\"></td><td><pre><span class=\"token comment\">## 开卡</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>export guaopencard_All=\"true\"</pre></td></tr><tr><td data-num=\"8\"></td><td><pre>export guaopencard_addSku_All=\"true\"</pre></td></tr><tr><td data-num=\"9\"></td><td><pre>export guaopencardRun_All=\"true\"</pre></td></tr><tr><td data-num=\"10\"></td><td><pre>export guaopencard_draw=\"true\"</pre></td></tr><tr><td data-num=\"11\"></td><td><pre>export JD_TRY=\"true\"</pre></td></tr><tr><td data-num=\"12\"></td><td><pre>export exjxbeans=\"true\"</pre></td></tr><tr><td data-num=\"13\"></td><td><pre>export DY_OPENALL=\"true\"</pre></td></tr><tr><td data-num=\"14\"></td><td><pre><span class=\"token comment\">#抽奖</span></pre></td></tr><tr><td data-num=\"15\"></td><td><pre>export opencard_draw=3</pre></td></tr><tr><td data-num=\"16\"></td><td><pre><span class=\"token comment\">#开启脚本依赖文件缺失修复</span></pre></td></tr><tr><td data-num=\"17\"></td><td><pre>export ec_fix_dep=\"true\" </pre></td></tr><tr><td data-num=\"18\"></td><td><pre><span class=\"token comment\">#开启脚本依赖文件更新</span></pre></td></tr><tr><td data-num=\"19\"></td><td><pre>export ec_re_dep=\"true\" </pre></td></tr><tr><td data-num=\"20\"></td><td><pre><span class=\"token comment\">#清空购物车</span></pre></td></tr><tr><td data-num=\"21\"></td><td><pre>export JD_CART_REMOVE=\"true\"</pre></td></tr><tr><td data-num=\"22\"></td><td><pre>export JD_CART=\"true\"</pre></td></tr><tr><td data-num=\"23\"></td><td><pre><span class=\"token comment\">#去掉多余的双十一红包脚本</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre>export FLCODE=''</pre></td></tr><tr><td data-num=\"25\"></td><td><pre><span class=\"token comment\">#加购物车抽奖</span></pre></td></tr><tr><td data-num=\"26\"></td><td><pre>export RUN_CAR=true</pre></td></tr><tr><td data-num=\"27\"></td><td><pre><span class=\"token comment\">#停用小额免密支付</span></pre></td></tr><tr><td data-num=\"28\"></td><td><pre>export JD_PAY_CONTRACT=true</pre></td></tr></table></figure><ul>\n<li>依赖管理</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\">#nodejs 依赖</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>crypto<span class=\"token punctuation\">-</span>js\t</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>prettytable\t</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>dotenv\t</pre></td></tr><tr><td data-num=\"5\"></td><td><pre>jsdom\t</pre></td></tr><tr><td data-num=\"6\"></td><td><pre>date<span class=\"token punctuation\">-</span>fns\t</pre></td></tr><tr><td data-num=\"7\"></td><td><pre>tough<span class=\"token punctuation\">-</span>cookie\t</pre></td></tr><tr><td data-num=\"8\"></td><td><pre>tslib\t</pre></td></tr><tr><td data-num=\"9\"></td><td><pre>ws@7.4.3\t</pre></td></tr><tr><td data-num=\"10\"></td><td><pre>ts<span class=\"token punctuation\">-</span>md5\t</pre></td></tr><tr><td data-num=\"11\"></td><td><pre>jsdom <span class=\"token punctuation\">-</span>g\t</pre></td></tr><tr><td data-num=\"12\"></td><td><pre>jieba\t</pre></td></tr><tr><td data-num=\"13\"></td><td><pre>fs\t</pre></td></tr><tr><td data-num=\"14\"></td><td><pre>form<span class=\"token punctuation\">-</span>data\t</pre></td></tr><tr><td data-num=\"15\"></td><td><pre>json5\t</pre></td></tr><tr><td data-num=\"16\"></td><td><pre>global<span class=\"token punctuation\">-</span>agent\t</pre></td></tr><tr><td data-num=\"17\"></td><td><pre>png<span class=\"token punctuation\">-</span>js\t</pre></td></tr><tr><td data-num=\"18\"></td><td><pre>@types/node\t</pre></td></tr><tr><td data-num=\"19\"></td><td><pre>require\t</pre></td></tr><tr><td data-num=\"20\"></td><td><pre>typescript\t</pre></td></tr><tr><td data-num=\"21\"></td><td><pre>js<span class=\"token punctuation\">-</span>base64\t</pre></td></tr><tr><td data-num=\"22\"></td><td><pre>axios</pre></td></tr><tr><td data-num=\"23\"></td><td><pre><span class=\"token comment\">#pythone 依赖</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre>requests\t</pre></td></tr><tr><td data-num=\"25\"></td><td><pre>canvas\t</pre></td></tr><tr><td data-num=\"26\"></td><td><pre>ping3\t</pre></td></tr><tr><td data-num=\"27\"></td><td><pre>jieba\t</pre></td></tr><tr><td data-num=\"28\"></td><td><pre>aiohttp\t</pre></td></tr><tr><td data-num=\"29\"></td><td><pre>PyExecJS</pre></td></tr><tr><td data-num=\"30\"></td><td><pre><span class=\"token comment\">#Linux 依赖</span></pre></td></tr><tr><td data-num=\"31\"></td><td><pre>bizCode</pre></td></tr><tr><td data-num=\"32\"></td><td><pre>bizMsg</pre></td></tr><tr><td data-num=\"33\"></td><td><pre>lxml</pre></td></tr></table></figure><h4 id=\"其它\"><a class=\"anchor\" href=\"#其它\">#</a> 其它</h4>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\">#配置国内源</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>pip config <span class=\"token parameter variable\">--global</span> <span class=\"token builtin class-name\">set</span> global.index-url https://mirrors.aliyun.com/pypi/simple/</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>pip config <span class=\"token parameter variable\">--global</span> <span class=\"token builtin class-name\">set</span> install.trusted-host https://mirrors.aliyun.com</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token comment\">#升级 pip</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre>pip <span class=\"token function\">install</span> <span class=\"token parameter variable\">--upgrade</span> pip</pre></td></tr><tr><td data-num=\"7\"></td><td><pre></pre></td></tr><tr><td data-num=\"8\"></td><td><pre><span class=\"token comment\">#更新青龙</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>ql update</pre></td></tr><tr><td data-num=\"10\"></td><td><pre></pre></td></tr><tr><td data-num=\"11\"></td><td><pre><span class=\"token comment\">#已知要安装的依赖(不安装部分脚本任务会失败)</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre><span class=\"token function\">pnpm</span> <span class=\"token function\">install</span> ds</pre></td></tr><tr><td data-num=\"13\"></td><td><pre></pre></td></tr><tr><td data-num=\"14\"></td><td><pre><span class=\"token comment\">#一键安装所有依赖(基于 Faker 一键脚本安装的青龙</span></pre></td></tr><tr><td data-num=\"15\"></td><td><pre>可通过执行/ql/data/scripts下的QLDependency.sh脚本安装,如脚本已经更新则通过下面命令执行</pre></td></tr><tr><td data-num=\"16\"></td><td><pre><span class=\"token function\">curl</span> <span class=\"token parameter variable\">-fsSL</span> https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh <span class=\"token operator\">|</span> <span class=\"token function\">sh</span></pre></td></tr><tr><td data-num=\"17\"></td><td><pre></pre></td></tr><tr><td data-num=\"18\"></td><td><pre><span class=\"token comment\">#一般出现这种错误:(缺依赖)</span></pre></td></tr><tr><td data-num=\"19\"></td><td><pre>Error: Cannot <span class=\"token function\">find</span> module <span class=\"token string\">'xx'</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre>执行pnpm <span class=\"token function\">install</span> xxx</pre></td></tr><tr><td data-num=\"21\"></td><td><pre></pre></td></tr><tr><td data-num=\"22\"></td><td><pre><span class=\"token comment\">#一般出现这种错误:(缺文件)</span></pre></td></tr><tr><td data-num=\"23\"></td><td><pre>Error: Cannot <span class=\"token function\">find</span> module <span class=\"token string\">'./xx'</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre>那就是拉库命令不完整,请检查或复制完整的拉库命</pre></td></tr><tr><td data-num=\"25\"></td><td><pre></pre></td></tr><tr><td data-num=\"26\"></td><td><pre><span class=\"token comment\">#Python3 依赖安装失败修复(基于 Faker 一键脚本安装的青龙)</span></pre></td></tr><tr><td data-num=\"27\"></td><td><pre><span class=\"token function\">curl</span> <span class=\"token parameter variable\">-sS</span> https://bootstrap.pypa.io/get-pip.py <span class=\"token operator\">|</span> python3</pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"极空间",
|
||
"Docker",
|
||
"docker",
|
||
"青龙面板",
|
||
"定时任务"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/10/21/Hexo-Theme-Shoka-Valine%E8%AF%84%E8%AE%BA%E9%85%8D%E7%BD%AE/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/10/21/Hexo-Theme-Shoka-Valine%E8%AF%84%E8%AE%BA%E9%85%8D%E7%BD%AE/",
|
||
"title": "Hexo + Theme.Shoka + Valine评论配置",
|
||
"date_published": "2022-10-21T03:48:00.000Z",
|
||
"content_html": "<ul>\n<li>valine 评论需要 LeanCloud 支持</li>\n</ul>\n<h4 id=\"leancloud注册\"><a class=\"anchor\" href=\"#leancloud注册\">#</a> LeanCloud 注册</h4>\n<ol>\n<li>到<span class=\"exturl\" data-url=\"aHR0cHM6Ly93d3cubGVhbmNsb3VkLmNu\"> LeanCloud</span> 网站完成注册。</li>\n<li>创建应用。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32.jpg\" alt=\"\" /></li>\n<li>名称随便取,方案看自己选择。开发版免费但是有限制,商业版收费无限制。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32516c410640de936a.jpg\" alt=\"\" /></li>\n<li>点击配置按钮进行配置。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32267554cf6f62d3eb.jpg\" alt=\"\" /></li>\n<li>点击设置 - 应用凭证可获取 App ID 和 App Key<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-328c330a6fdd48d2c3.jpg\" alt=\"\" /></li>\n<li>点击设置 - 安全中心根据自己的需求配置<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32204f14d87e95b59e.jpg\" alt=\"\" /></li>\n</ol>\n<h4 id=\"修改themeshoka配置\"><a class=\"anchor\" href=\"#修改themeshoka配置\">#</a> 修改 Theme.Shoka 配置</h4>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token key atrule\">valine</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre> appId<span class=\"token punctuation\">:</span> 粘贴5中获取的App ID <span class=\"token comment\">#Your_appId</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> <span class=\"token key atrule\">appKey</span><span class=\"token punctuation\">:</span> 粘贴5中获取的App Key <span class=\"token comment\">#Your_appkey</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre> <span class=\"token key atrule\">placeholder</span><span class=\"token punctuation\">:</span> ヽ(○´∀`)ノ♪欢迎畅所欲言 <span class=\"token comment\"># Comment box placeholder</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> <span class=\"token key atrule\">avatar</span><span class=\"token punctuation\">:</span> mp <span class=\"token comment\">#默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre> <span class=\"token key atrule\">pageSize</span><span class=\"token punctuation\">:</span> <span class=\"token number\">10</span> <span class=\"token comment\"># Pagination size</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> <span class=\"token key atrule\">lang</span><span class=\"token punctuation\">:</span> zh<span class=\"token punctuation\">-</span>CN</pre></td></tr><tr><td data-num=\"8\"></td><td><pre> <span class=\"token key atrule\">visitor</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span> <span class=\"token comment\"># Article reading statistic 这个要设置为 false,以免与 leancloud_visitors 突冲 </span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token key atrule\">NoRecordIP</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">false</span> <span class=\"token comment\"># Whether to record the commenter IP</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre> <span class=\"token key atrule\">serverURLs</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> <span class=\"token key atrule\">powerMode</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre> <span class=\"token key atrule\">tagMeta</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> <span class=\"token key atrule\">visitor</span><span class=\"token punctuation\">:</span> 新朋友</pre></td></tr><tr><td data-num=\"14\"></td><td><pre> <span class=\"token key atrule\">master</span><span class=\"token punctuation\">:</span> 博主</pre></td></tr><tr><td data-num=\"15\"></td><td><pre> <span class=\"token key atrule\">friend</span><span class=\"token punctuation\">:</span> 小伙伴</pre></td></tr><tr><td data-num=\"16\"></td><td><pre> <span class=\"token key atrule\">investor</span><span class=\"token punctuation\">:</span> 金主粑粑</pre></td></tr><tr><td data-num=\"17\"></td><td><pre> <span class=\"token key atrule\">tagColor</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre> <span class=\"token key atrule\">master</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"var(--color-orange)\"</span></pre></td></tr><tr><td data-num=\"19\"></td><td><pre> <span class=\"token key atrule\">friend</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"var(--color-aqua)\"</span></pre></td></tr><tr><td data-num=\"20\"></td><td><pre> <span class=\"token key atrule\">investor</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"var(--color-pink)\"</span></pre></td></tr><tr><td data-num=\"21\"></td><td><pre> <span class=\"token key atrule\">tagMember</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"22\"></td><td><pre> <span class=\"token key atrule\">master</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"23\"></td><td><pre> <span class=\"token comment\"># - hash of master@email.com</span></pre></td></tr><tr><td data-num=\"24\"></td><td><pre> <span class=\"token comment\"># - hash of master2@email.com</span></pre></td></tr><tr><td data-num=\"25\"></td><td><pre> <span class=\"token key atrule\">friend</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"26\"></td><td><pre> <span class=\"token comment\"># - hash of friend@email.com</span></pre></td></tr><tr><td data-num=\"27\"></td><td><pre> <span class=\"token comment\"># - hash of friend2@email.com</span></pre></td></tr><tr><td data-num=\"28\"></td><td><pre> <span class=\"token key atrule\">investor</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"29\"></td><td><pre> <span class=\"token comment\"># - hash of investor1@email.com</span></pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"极空间",
|
||
"Docker",
|
||
"Hexo",
|
||
"博客",
|
||
"Hexo",
|
||
"Shoka",
|
||
"Valine",
|
||
"评论"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/10/21/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88mariadb%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/10/21/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88mariadb%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
|
||
"title": "极空间Docker版mariadb安装与配置",
|
||
"date_published": "2022-10-21T01:06:00.000Z",
|
||
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>mariadb 属于 mysql 的一个分支,完全兼容 mysql,使用方式和 mysql 无区别。</li>\n</ul>\n<h4 id=\"安装\"><a class=\"anchor\" href=\"#安装\">#</a> 安装</h4>\n<ul>\n<li>本文介绍安装的镜像为 linuxserver_mariadb 的 10.5.13-r0-ls45,原则上使用最新版即可</li>\n<li>配置文件映射<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-09-20-56.jpg\" alt=\"\" /></li>\n<li>端口<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-09-21-49.jpg\" alt=\"\" /></li>\n<li>环境(MYSQL_ROOT_PASSWORD 为数据库 root 用户密码)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-09-22-43.jpg\" alt=\"\" /></li>\n<li>到此已经可以在内网使用了,<a href=\"https://blog.jingxiyuan.cn/2022/11/13/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/\">连接方法</a>同 mysql 一样</li>\n</ul>\n<div class=\"note info\">\n<p>按本文设置内网连接信息为:<br />\nip:极空间内网 ip<br />\n 端口:3306<br />\n 用户名:root<br />\n 密码:<span class=\"red\">MYSQL_ROOT_PASSWORD</span> 对应的值</p>\n</div>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>配置 nginx 反向代理</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>stream <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\t</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\t<span class=\"token comment\">#极空间 - docker-mariadb</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre>\tupstream mariadb <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>\t\thash $remote_addr consistent;</pre></td></tr><tr><td data-num=\"6\"></td><td><pre>\t\tserver 192.168.0.254<span class=\"token punctuation\">:</span>3306; <span class=\"token comment\">#192.168.0.254 为极空间内网 ip</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>\t<span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>\tserver <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\t\tlisten 8090; <span class=\"token comment\">#8090 为 nginx 监听端口,需要在路由器开放 8090 端口并映射给极空间内网 IP(nginx 部署在极空间上)</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre></pre></td></tr><tr><td data-num=\"12\"></td><td><pre>\t\tproxy_connect_timeout 30s;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre>\t\tproxy_timeout 300s;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre>\t\tproxy_pass mariadb;</pre></td></tr><tr><td data-num=\"15\"></td><td><pre>\t<span class=\"token punctuation\">}</span></pre></td></tr><tr><td data-num=\"16\"></td><td><pre> </pre></td></tr><tr><td data-num=\"17\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"极空间",
|
||
"Docker",
|
||
"mysql",
|
||
"极空间",
|
||
"Docker",
|
||
"mariadb"
|
||
]
|
||
},
|
||
{
|
||
"id": "https://blog.jingxiyuan.cn/2022/10/20/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88Wordpress%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
|
||
"url": "https://blog.jingxiyuan.cn/2022/10/20/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88Wordpress%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
|
||
"title": "极空间Docker版Wordpress安装与配置",
|
||
"date_published": "2022-10-20T00:56:00.000Z",
|
||
"content_html": "<h4 id=\"安装\"><a class=\"anchor\" href=\"#安装\">#</a> 安装</h4>\n<ul>\n<li>下载最新版 wordpress 镜像,如极空间无法下载,可到<span class=\"exturl\" data-url=\"aHR0cHM6Ly9wdWxsaW1hZ2UucGFzc2VybWEuY29tLw==\"> passerma 网站</span>下载。</li>\n<li>需要先在 mysql 中创建给 wordpress 使用的库。</li>\n<li>文件路径映射(目前极空间不能映射到高速盘,否则无法启动)。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/20/2022-10-20-08-58-31.png\" alt=\"\" /></li>\n<li>端口映射。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/20/2022-10-20-08-58-56.png\" alt=\"\" /></li>\n<li>通过映射的端口访问安装界面(一定要通过最终访问的页面进行安装,否则修改配置比较麻烦。如最终是域名访问,就先把域名解析代理等先配置好,再通过域名访问安装)。</li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。</li>\n</ul>\n<figure class=\"highlight php\"><figcaption data-lang=\"PHP\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTP_X_FORWARDED_HOST'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTP_X_FORWARDED_FOR'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTP_HOST'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTP_X_FORWARDED_HOST'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTPS'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'on'</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure><ul>\n<li>后台安装插件时如果跳转到 ftp 配置,则需要在 wp-config.php 中加入以下代码,并到 wp-content 目录下创建 tmp 目录,最后还需要给 tmp 目录赋予读写权限。</li>\n</ul>\n<figure class=\"highlight php\"><figcaption data-lang=\"PHP\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">define</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'WP_TEMP_DIR'</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">ABSPATH</span><span class=\"token operator\">.</span><span class=\"token string single-quoted-string\">'wp-content/tmp'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token function\">define</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'FS_METHOD'</span><span class=\"token punctuation\">,</span> <span class=\"token string single-quoted-string\">'direct'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token function\">define</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'FS_CHMOD_DIR'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0777</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token function\">define</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'FS_CHMOD_FILE'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0777</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr></table></figure><ul>\n<li>目录和文件所有者、组会自动变为 root,目前我是通过访问页面时通过命令修正。暂时未发现问题,如果不行则只能通过定时任务来定时修正了。需要在 wp-config.php 中加入以下代码。</li>\n</ul>\n<figure class=\"highlight php\"><figcaption data-lang=\"PHP\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">chown</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'/var/www/html'</span><span class=\"token punctuation\">,</span> <span class=\"token string single-quoted-string\">'www-data'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token function\">chgrp</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'/var/www/html'</span><span class=\"token punctuation\">,</span> <span class=\"token string single-quoted-string\">'www-data'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token function\">chmod</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'/var/www/html/wp-content/plugins'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0777</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token function\">chmod</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'/var/www/html/wp-content/themes'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0777</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token function\">chmod</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'/var/www/html/wp-content/tmp'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0777</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr></table></figure><ul>\n<li>隐藏后台访问需要在 wp-login.php 中加入以下代码,key、value 和 https://www.xxx.com/ 需要修改为自己的。修改后只能通过 https://www.xxx.com/wp-login.php?key=value 访问,其它访问需要登录的页面都会跳转到配置的 https://www.xxx.com/ 地址。</li>\n</ul>\n<figure class=\"highlight php\"><figcaption data-lang=\"PHP\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$_GET</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'key'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token string single-quoted-string\">'value'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\t<span class=\"token function\">header</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'Location: https://www.xxx.com/'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token punctuation\">}</span></pre></td></tr></table></figure>",
|
||
"tags": [
|
||
"极空间",
|
||
"Docker",
|
||
"博客",
|
||
"极空间",
|
||
"Wordpress"
|
||
]
|
||
}
|
||
]
|
||
} |