blog/rss.xml
2022-10-18 10:47:28 +08:00

962 lines
98 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Hito的公告栏</title>
<subtitle>天下事有难易乎?为之,则难者亦易矣</subtitle>
<icon>https://blog.jingxiyuan.cn/images/favicon.ico</icon>
<link>https://blog.jingxiyuan.cn</link>
<author>
<name>Hito li</name>
</author>
<description>hito的博客</description>
<language>zh-CN</language>
<pubDate>Tue, 18 Oct 2022 09:39:00 +0800</pubDate>
<lastBuildDate>Tue, 18 Oct 2022 09:39:00 +0800</lastBuildDate>
<category term="hito" />
<category term="無言" />
<category term="博客" />
<category term="公告栏" />
<category term="笔记" />
<category term="心得体会" />
<category term="踩坑" />
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/10/18/nagios%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/</guid>
<title>搭建nagios监控</title>
<link>https://blog.jingxiyuan.cn/2022/10/18/nagios%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="经验分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/" />
<category term="心得体会" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/%E5%BF%83%E5%BE%97%E4%BD%93%E4%BC%9A/" />
<category term="nagios" scheme="https://blog.jingxiyuan.cn/tags/nagios/" />
<category term="服务监控" scheme="https://blog.jingxiyuan.cn/tags/%E6%9C%8D%E5%8A%A1%E7%9B%91%E6%8E%A7/" />
<pubDate>Tue, 18 Oct 2022 09:39:00 +0800</pubDate>
<description><![CDATA[ &lt;h4 id=&#34;监控端服务安装与配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#监控端服务安装与配置&#34;&gt;#&lt;/a&gt; 监控端服务安装与配置&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;nagios 需要安装主程序和 nrpenagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9zdXBwb3J0Lm5hZ2lvcy5jb20va2Iv&#34;&gt;官网&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处&lt;/li&gt;
&lt;li&gt;etc/objects/commands.cfg 用于保存 nagios 默认监控命令&lt;/li&gt;
&lt;li&gt;etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加)&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/10/18/image.png&#34; alt=&#34;&#34; /&gt;&lt;/li&gt;
&lt;li&gt;etc/objects/hosts 目录下配置需要被监控的主机信息&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/10/18/image2.png&#34; alt=&#34;&#34; /&gt;&lt;/li&gt;
&lt;li&gt;etc/objects/servers 目录下配置需要在被监控主机上执行的监控命令(第 4 项中的命令)&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/10/18/image3.png&#34; alt=&#34;&#34; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;被监控端服务安装与配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#被监控端服务安装与配置&#34;&gt;#&lt;/a&gt; 被监控端服务安装与配置&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;被监控端需要安装 nrpe&lt;/li&gt;
&lt;li&gt;被监控端需要把监控端的命令写入到 nrpe 的配置文件中&lt;/li&gt;
&lt;li&gt;被监控端需要把命令执行脚本放入 libexec 目录中&lt;/li&gt;
&lt;li&gt;被监控端自动安装脚本(可借鉴)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;1、请先修改脚本中的服务端IP。
2、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令弹出选择窗口后选择no。
3、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。
#!/bin/bash
#服务端ip
SERVER_IP=10.10.10.121
#安装目录
INSTALL_HOME=`pwd`
#安装ubuntu版本
INSTALL_UBUNTU()
&amp;#123;
sudo apt-get update
sudo apt-get install -y autoconf automake gcc libc6 libmcrypt-dev make libssl-dev wget openssl
cd /tmp
#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz
cp $INSTALL_HOME/Ubuntu/nrpe.tar.gz ./
tar xzf nrpe.tar.gz
cd /tmp/nrpe-nrpe-4.0.3/
sudo ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/
sudo make all
sudo make install-groups-users
sudo make install
sudo make install-config
sudo sh -c &amp;quot;echo &amp;gt;&amp;gt; /etc/services&amp;quot;
sudo sh -c &amp;quot;sudo echo &#39;# Nagios services&#39; &amp;gt;&amp;gt; /etc/services&amp;quot;
sudo sh -c &amp;quot;sudo echo &#39;nrpe 5666/tcp&#39; &amp;gt;&amp;gt; /etc/services&amp;quot;
#判断系统是高版本还是低版本
VERSION=`lsb_release -r --short`
IS_LOW_VERSION=`echo &amp;quot;$VERSION &amp;lt; 15&amp;quot; | bc`
if [ $IS_LOW_VERSION = 1 ]; then
#低版本
sudo make install-init
else
#高版本
sudo make install-init
sudo systemctl enable nrpe.service
fi
sudo mkdir -p /etc/ufw/applications.d
sudo sh -c &amp;quot;echo &#39;[NRPE]&#39; &amp;gt; /etc/ufw/applications.d/nagios&amp;quot;
sudo sh -c &amp;quot;echo &#39;title=Nagios Remote Plugin Executor&#39; &amp;gt;&amp;gt; /etc/ufw/applications.d/nagios&amp;quot;
sudo sh -c &amp;quot;echo &#39;description=Allows remote execution of Nagios plugins&#39; &amp;gt;&amp;gt; /etc/ufw/applications.d/nagios&amp;quot;
sudo sh -c &amp;quot;echo &#39;ports=5666/tcp&#39; &amp;gt;&amp;gt; /etc/ufw/applications.d/nagios&amp;quot;
sudo ufw allow NRPE
sudo ufw reload
sudo sh -c &amp;quot;sed -i &#39;/^allowed_hosts=/s/$/,$SERVER_IP/&#39; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;sed -i &#39;s/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g&#39; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
cd $INSTALL_HOME
sudo cp ./sh/* /usr/local/nagios/libexec/
sudo chmod +xr /usr/local/nagios/libexec/*
sudo sh -c &amp;quot;echo &#39;command[check_ping]=/usr/local/nagios/libexec/check_ping -H 127.0.0.1 -w 3000.0,80% -c 5000.0,100% -p 5&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_mem]=/usr/local/nagios/libexec/check_mem.sh&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_disk]=/usr/local/nagios/libexec/check_disk.sh&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \$ARG1\$&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
NETWORK_INDEX=1
for NETWORK_NAME in `cat /proc/net/dev | awk &#39;&amp;#123;i++; if(i&amp;gt;2)&amp;#123;print $1&amp;#125;&amp;#125;&#39; | sed &#39;s/^[\t]*//g&#39; | sed &#39;s/[:]*$//g&#39;`;do
if [ $NETWORK_NAME != &#39;lo&#39; ]; then
sudo sh -c &amp;quot;echo &#39;command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
NETWORK_INDEX=`expr $NETWORK_INDEX + 1 `
fi
done
if [ $IS_LOW_VERSION = 1 ]; then
#低版本
sudo start nrpe
else
#高版本
sudo systemctl start nrpe.service
fi
&amp;#125;
#安装centos版本
INSTALL_CENTOS()
&amp;#123;
yum install -y gcc glibc glibc-common openssl openssl-devel perl wget
cd /tmp
#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz
cp $INSTALL_HOME/CentOS/nrpe.tar.gz ./
tar xzf nrpe.tar.gz
cd /tmp/nrpe-nrpe-4.0.3/
./configure --enable-command-args
make all
make install-groups-users
make install
make install-config
echo &amp;gt;&amp;gt; /etc/services
echo &#39;# Nagios services&#39; &amp;gt;&amp;gt; /etc/services
echo &#39;nrpe 5666/tcp&#39; &amp;gt;&amp;gt; /etc/services
#判断系统是高版本还是低版本
VERSION=`rpm -q centos-release|cut -d- -f3`
#安装bc命令
yum -y install bc
IS_LOW_VERSION=`echo &amp;quot;$VERSION &amp;lt; 7&amp;quot; | bc`
if [ $IS_LOW_VERSION = 1 ]; then
#低版本
make install-init
iptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
service iptables save
ip6tables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
service ip6tables save
else
#高版本
make install-init
systemctl enable nrpe.service
firewall-cmd --zone=public --add-port=5666/tcp
firewall-cmd --zone=public --add-port=5666/tcp --permanent
fi
sudo sh -c &amp;quot;sed -i &#39;/^allowed_hosts=/s/$/,$SERVER_IP/&#39; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;sed -i &#39;s/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g&#39; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
cd $INSTALL_HOME
sudo cp ./sh/* /usr/local/nagios/libexec/
sudo chmod +xr /usr/local/nagios/libexec/*
sudo sh -c &amp;quot;echo &#39;command[check_ping]=/usr/local/nagios/libexec/check_ping -H 127.0.0.1 -w 3000.0,80% -c 5000.0,100% -p 5&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_mem]=/usr/local/nagios/libexec/check_mem.sh&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_disk]=/usr/local/nagios/libexec/check_disk.sh&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \$ARG1\$&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
sudo sh -c &amp;quot;echo &#39;command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
NETWORK_INDEX=1
for NETWORK_NAME in `cat /proc/net/dev | awk &#39;&amp;#123;i++; if(i&amp;gt;2)&amp;#123;print $1&amp;#125;&amp;#125;&#39; | sed &#39;s/^[\t]*//g&#39; | sed &#39;s/[:]*$//g&#39;`;do
if [ $NETWORK_NAME != &#39;lo&#39; ]; then
sudo sh -c &amp;quot;echo &#39;command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME&#39; &amp;gt;&amp;gt; /usr/local/nagios/etc/nrpe.cfg&amp;quot;
NETWORK_INDEX=`expr $NETWORK_INDEX + 1 `
fi
done
if [ $IS_LOW_VERSION = 1 ]; then
#低版本
if [ $(echo &amp;quot;$VERSION &amp;lt; 6&amp;quot; | bc) -eq 1 ]; then
service nrpe start
else
start nrpe
fi
else
#高版本
systemctl start nrpe.service
fi
&amp;#125;
#安装其它版本
INSTALL_OTHER()
&amp;#123;
echo &amp;quot;Not supported at the moment.&amp;quot;
&amp;#125;
#根据不同系统安装不同版本
INSTALL()
&amp;#123;
if grep -Eqii &amp;quot;CentOS&amp;quot; /etc/issue || grep -Eq &amp;quot;CentOS&amp;quot; /etc/*-release; then
DISTRO=&#39;CentOS&#39;
PM=&#39;yum&#39;
INSTALL_CENTOS
elif grep -Eqi &amp;quot;Red Hat Enterprise Linux Server&amp;quot; /etc/issue || grep -Eq &amp;quot;Red Hat Enterprise Linux Server&amp;quot; /etc/*-release; then
DISTRO=&#39;RHEL&#39;
PM=&#39;yum&#39;
INSTALL_OTHER
elif grep -Eqi &amp;quot;Aliyun&amp;quot; /etc/issue || grep -Eq &amp;quot;Aliyun&amp;quot; /etc/*-release; then
DISTRO=&#39;Aliyun&#39;
PM=&#39;yum&#39;
INSTALL_OTHER
elif grep -Eqi &amp;quot;Fedora&amp;quot; /etc/issue || grep -Eq &amp;quot;Fedora&amp;quot; /etc/*-release; then
DISTRO=&#39;Fedora&#39;
PM=&#39;yum&#39;
INSTALL_OTHER
elif grep -Eqi &amp;quot;Debian&amp;quot; /etc/issue || grep -Eq &amp;quot;Debian&amp;quot; /etc/*-release; then
DISTRO=&#39;Debian&#39;
PM=&#39;apt&#39;
INSTALL_OTHER
elif grep -Eqi &amp;quot;Ubuntu&amp;quot; /etc/issue || grep -Eq &amp;quot;Ubuntu&amp;quot; /etc/*-release; then
DISTRO=&#39;Ubuntu&#39;
PM=&#39;apt&#39;
INSTALL_UBUNTU
elif grep -Eqi &amp;quot;Raspbian&amp;quot; /etc/issue || grep -Eq &amp;quot;Raspbian&amp;quot; /etc/*-release; then
DISTRO=&#39;Raspbian&#39;
PM=&#39;apt&#39;
INSTALL_OTHER
else
echo &amp;quot;unknow linux.&amp;quot;
exit 1
fi
echo $DISTRO
&amp;#125;
INSTALL
exit 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;常见问题&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#常见问题&#34;&gt;#&lt;/a&gt; 常见问题&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;监控日志未写入 mysql可能是 ndoutils 服务不正常导致)。采用以下脚本命令解决&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;#!/bin/bash
sudo rm -f /usr/local/nagios/var/ndo2db.pid
sudo rm -f /usr/local/nagios/var/ndo.sock
sudo systemctl restart ndo2db.service
sudo systemctl status ndo2db.service
&lt;/code&gt;&lt;/pre&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/10/17/redis%E4%B8%BB%E4%BB%8E%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/</guid>
<title>redis主从基础配置</title>
<link>https://blog.jingxiyuan.cn/2022/10/17/redis%E4%B8%BB%E4%BB%8E%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="redis" scheme="https://blog.jingxiyuan.cn/tags/redis/" />
<pubDate>Mon, 17 Oct 2022 14:07:00 +0800</pubDate>
<description><![CDATA[ &lt;h4 id=&#34;主服务&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#主服务&#34;&gt;#&lt;/a&gt; 主服务&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;基础配置&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;port 6379
requirepass 123456密码建议不设置
vm-enabled no (虚拟内存,内存够的情况下可以不使用)
maxmemory 1GB告诉Redis当使用了多少物理内存后就开始拒绝后续的写入
bind 127.0.0.1 (注释掉,否则不能外部连接)
rdbchecksum no持久化数据检查
list-max-ziplist-size 1024ziplist的最大容量正数为自己指定的大小。负数-1到-5为对应的值4到64Kb
list-compress-depth 20quicklist的两端多少个node不压缩0为全部不压缩
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;sysctl vm.overcommit_memory=1 (立即生效)
修改/etc/sysctl.conf添加vm.overcommit_memory=1表示内核允许分配所有的物理内存而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间但是由于linux很早就支持的copy-on-write技术所以实际上并不需要这么多的物理内存的。
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;禁用透明大页(影响性能)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;需要sudo su 切换到root身份sudo 没用)
echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled
修改/etc/init.d/redis-server加入/bin/echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;修复 TCP 警告&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;sysctl net.core.somaxconn=1024立即生效
修改/etc/sysctl.conf添加net.core.somaxconn=1024
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;客户端缓冲区限制&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。
可以三种不同客户端的方式进行设置:
normal -&amp;gt; 正常客户端
slave -&amp;gt; slave 和 MONITOR 客户端
pubsub -&amp;gt; 至少订阅了一个 pubsub channel 或 pattern 的客户端
语法 :
client-output-buffer-limit &amp;lt;class&amp;gt;&amp;lt;hard limit&amp;gt; &amp;lt;soft limit&amp;gt; &amp;lt;soft seconds&amp;gt;
一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。
例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,
只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。
把硬限制和软限制都设置为 0 来禁用该特性
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 5gb 512mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;持久化配置&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;---关闭RDB持久化---
save &amp;quot;&amp;quot;
默认配置如下:
save 900 1 #900秒内有1次更新就持久化
save 300 10 #300秒内有10次更新就持久化
save 60 10000 #60秒内有10000次更新就持久化
---关闭RDB持久化---
主从同步支持两种策略即disk和socket方式。
新的slave端和重连的salve端不允许去继续同步进程这被称之为“完全同步”。
一个RDB文件从master端传到slave端分为两种情况
1、支持diskmaster端将RDB file写到disk稍后再传送到slave端
2、无磁盘disklessmaster端直接将RDB file传到slave socket不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。
repl-diskless-sync no 默认不使用diskless同步方式
repl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟以便slave端能够进行到待传送的目标队列中这个时间默认是5秒
repl-ping-slave-period 60 slave端向server端发送pings的时间区间设置默认为10秒
repl-timeout 3600 设置超时时间
repl-disable-tcp-nodelay no 是否启用TCP_NODELAY如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端当然速度会比较慢如果不启用则传输速度比较快但是会占用比较多的带宽。
repl-backlog-size 1mb 设置backlog的大小backlog是一个缓冲区在slave端失连时存放要同步到slave的数据因此当一个slave要重连时经常是不需要完全同步的执行局部同步就足够了。
backlog设置的越大slave可以失连的时间就越长。
repl-backlog-ttl 3600 如果一段时间后没有slave连接到master则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。
slave-priority 100 slave端的优先级设置值是一个整数数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复如果值设置为0则表示该slave永远不会被选择。
min-slaves-to-write 3
min-slaves-max-lag 10 设置当一个master端的可用slave少于N个延迟时间大于M秒时不接收写操作。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;从服务&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#从服务&#34;&gt;#&lt;/a&gt; 从服务&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;基本配置同主服务一致
slaveof 127.0.0.1 6379主redis的ip和端口
masterauth 123456 (主redis的密码)
可以通过slaveof no one命令将Slaver升级为Maste
bgsave 持久化命令在redis-cli中执行默认创建dump.rdb文件路径为 /var/lib/redis/dump.rdb。可通过find / -name dump.rd查找
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;相关命令&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#相关命令&#34;&gt;#&lt;/a&gt; 相关命令&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;看状态
sudo /etc/init.d/redis-server status
看端口
netstat -nlt|grep 6379
外部连接
sudo vim /etc/redis/redis.conf把protected-mode改为no把bind ip注释掉
重启
sudo server redis-server restart
查看内存
free -m
批量删除指定key
redis-cli -n 6 scan 0 match *2020-06-12 count 10000| xargs redis-cli -n 6 del
大量删除key后快速释放被占用的内存
memory purge
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;问题解决&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#问题解决&#34;&gt;#&lt;/a&gt; 问题解决&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;写入问题
redis-cli config set stop-writes-on-bgsave-error no
sudo vim /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no
修改系统 sudo vim /etc/sysctl.conf加入vm.overcommit_memory=1
sudo sysctl vm.overcommit_memory=1
&lt;/code&gt;&lt;/pre&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/10/14/%E5%85%81%E8%AE%B8%E8%B7%A8%E5%9F%9F%E8%8E%B7%E5%8F%96cookies%E6%96%B9%E6%B3%95/</guid>
<title>允许跨域获取cookie的方法</title>
<link>https://blog.jingxiyuan.cn/2022/10/14/%E5%85%81%E8%AE%B8%E8%B7%A8%E5%9F%9F%E8%8E%B7%E5%8F%96cookies%E6%96%B9%E6%B3%95/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="nginx" scheme="https://blog.jingxiyuan.cn/tags/nginx/" />
<category term="iframe" scheme="https://blog.jingxiyuan.cn/tags/iframe/" />
<category term="cookie" scheme="https://blog.jingxiyuan.cn/tags/cookie/" />
<pubDate>Fri, 14 Oct 2022 17:13:00 +0800</pubDate>
<description><![CDATA[ &lt;h4 id=&#34;使用场景&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#使用场景&#34;&gt;#&lt;/a&gt; 使用场景&lt;/h4&gt;
&lt;p&gt;  在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;server &amp;#123;
listen port ssl http2;
server_name xxx.com;
ssl_certificate_key /xxx.key;
ssl_certificate /xxx.pem;
proxy_cookie_path ~(.*) &amp;quot;$1; SameSite=None; secure; httponly&amp;quot;;
location / &amp;#123;
#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)
add_header X-Frame-Options ALLOWALL; #允许被所有域名镶套
proxy_pass http://xxx;
&amp;#125;
&amp;#125;
&lt;/code&gt;&lt;/pre&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/10/12/%E4%BD%BF%E7%94%A8picgo%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%88%B0chevereto/</guid>
<title>使用PicGo上传图片到chevereto</title>
<link>https://blog.jingxiyuan.cn/2022/10/12/%E4%BD%BF%E7%94%A8picgo%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%88%B0chevereto/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="PicGo" scheme="https://blog.jingxiyuan.cn/tags/PicGo/" />
<category term="chevereto" scheme="https://blog.jingxiyuan.cn/tags/chevereto/" />
<pubDate>Wed, 12 Oct 2022 14:40:00 +0800</pubDate>
<description><![CDATA[ &lt;h1 id=&#34;简介&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#简介&#34;&gt;#&lt;/a&gt; 简介&lt;/h1&gt;
&lt;p&gt;PicGo 是一款开源的图床管理工具,十分流行。&lt;/p&gt;
&lt;p&gt;PicGo 官方指南:&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9waWNnby5naXRodWIuaW8vUGljR28tRG9jL3poL2d1aWRlLw==&#34;&gt;PicGo | PicGo&lt;/span&gt;&lt;/p&gt;
&lt;h1 id=&#34;配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#配置&#34;&gt;#&lt;/a&gt; 配置&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;安装插件(需要先安装 NodeJS&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-24-09.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;图床配置  &lt;br /&gt;
url 后缀必须用红线圈中的部分key 在 chevereto 登陆后 api 配置中查找&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-24-51.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/10/11/svn%E5%BA%93%E8%BD%ACgit%E5%BA%93/</guid>
<title>svn库转git库</title>
<link>https://blog.jingxiyuan.cn/2022/10/11/svn%E5%BA%93%E8%BD%ACgit%E5%BA%93/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="svn" scheme="https://blog.jingxiyuan.cn/tags/svn/" />
<category term="git" scheme="https://blog.jingxiyuan.cn/tags/git/" />
<pubDate>Tue, 11 Oct 2022 10:40:00 +0800</pubDate>
<description><![CDATA[ &lt;h4 id=&#34;前期准备&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#前期准备&#34;&gt;#&lt;/a&gt; 前期准备&lt;/h4&gt;
&lt;p&gt;  首先安装好 svn 和 git 工具。&lt;/p&gt;
&lt;h4 id=&#34;svn转git&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#svn转git&#34;&gt;#&lt;/a&gt; svn 转 git&lt;/h4&gt;
&lt;p&gt;1、 到 svn 项目目录右键选中 gitbash 打开窗口,执行获取用户并映射成 git 样式账号命令如下:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;svn log -q | awk -F &#39;|&#39; &#39;/^r/ &amp;#123;sub(&amp;quot;^ &amp;quot;, &amp;quot;&amp;quot;, $2); sub(&amp;quot; $&amp;quot;, &amp;quot;&amp;quot;, $2); print $2&amp;quot; = &amp;quot;$2&amp;quot; &amp;lt;&amp;quot;$2&amp;quot;&amp;gt;&amp;quot;&amp;#125;&#39; | sort -u &amp;gt; users.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  然后会在目录下生成文件 users.txt 样式如zhansan = 张三 &lt;span class=&#34;exturl&#34; data-url=&#34;bWFpbHRvOnpoYW5zYW5AeHh4LmNvbQ==&#34;&gt;zhansan@xxx.com&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;2、新建个文件夹将生成的 users.txt 放入新建的文件夹,然后在新建的文件夹中右键选中 gitbash 弹出窗口后执行下面命令https://svn_project_url/ 为 svn 库的 url拉取 svn 代码到本地新建文件夹中。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;git svn clone https://svn_project_url/ --no-metadata --no-minimize-url --authors-file=users.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  期间可能会弹出 svn 的账户密码验证窗口,正确输入即可。&lt;/p&gt;
&lt;h4 id=&#34;推送项目到git库&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#推送项目到git库&#34;&gt;#&lt;/a&gt; 推送项目到 git 库&lt;/h4&gt;
&lt;p&gt;1、在 gitbash 窗口 cd 到 git 项目文件夹中执行以下命令把 git 仓库地址加入到 remote 中https://git_project_url/ 为 git 库的 url。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;git remote add origin https://git_project_url/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2、push 项目到 git 库中。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;git push origin master
&lt;/code&gt;&lt;/pre&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/10/06/Nginx%E9%85%8D%E7%BD%AEiframe%E8%AE%BF%E9%97%AE/</guid>
<title>Nginx配置iframe访问</title>
<link>https://blog.jingxiyuan.cn/2022/10/06/Nginx%E9%85%8D%E7%BD%AEiframe%E8%AE%BF%E9%97%AE/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="nginx" scheme="https://blog.jingxiyuan.cn/tags/nginx/" />
<category term="iframe" scheme="https://blog.jingxiyuan.cn/tags/iframe/" />
<pubDate>Thu, 06 Oct 2022 23:46:00 +0800</pubDate>
<description><![CDATA[ &lt;h4 id=&#34;x-frame-options响应头配置详解&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#x-frame-options响应头配置详解&#34;&gt;#&lt;/a&gt; X-Frame-Options 响应头配置详解&lt;/h4&gt;
&lt;p&gt;X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在,或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。&lt;br /&gt;
X-Frame-Options 三个参数:&lt;/p&gt;
&lt;p&gt;1、 DENY&lt;/p&gt;
&lt;p&gt;  表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。&lt;/p&gt;
&lt;p&gt;2、SAMEORIGIN&lt;/p&gt;
&lt;p&gt;  表示该页面可以在相同域名页面的 frame 中展示。&lt;/p&gt;
&lt;p&gt;3、ALLOW-FROM uri&lt;/p&gt;
&lt;p&gt;  表示该页面可以在指定来源的 frame 中展示。&lt;/p&gt;
&lt;p&gt;4、ALLOWALL&lt;/p&gt;
&lt;p&gt;  表示该页面可以在任何来源的 frame 中展示。&lt;/p&gt;
&lt;p&gt;  换一句话说,如果设置为 DENY不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN那么页面就可以在同域名页面的 frame 中嵌套。正常情况下我们通常使用 SAMEORIGIN 参数。&lt;/p&gt;
&lt;h4 id=&#34;apache配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#apache配置&#34;&gt;#&lt;/a&gt; Apache 配置&lt;/h4&gt;
&lt;p&gt;  需要把下面这行添加到&#39;site&#39; 的配置中&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt; Header always append X-Frame-Options SAMEORIGIN
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;nginx配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#nginx配置&#34;&gt;#&lt;/a&gt; Nginx 配置&lt;/h4&gt;
&lt;p&gt;  需要添加到 http, server 或者 location 的配置项中个人来讲喜欢配置在server 中&lt;/p&gt;
&lt;p&gt;  正常情况下都是使用 SAMEORIGIN 参数,允许同域嵌套&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt; add_header X-Frame-Options SAMEORIGIN;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  允许单个域名 iframe 嵌套&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt; add_header X-Frame-Options ALLOW-FROM http://xxx.com/;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  允许多个域名 iframe 嵌套,注意这里是用逗号分隔&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt; add_header X-Frame-Options &amp;quot;ALLOW-FROM http://xxx.com/,https://xxx.com/&amp;quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  允许任何域名 iframe 嵌套&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt; add_header X-Frame-Options ALLOWALL;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;tomcat配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#tomcat配置&#34;&gt;#&lt;/a&gt; Tomcat 配置&lt;/h4&gt;
&lt;p&gt;conf/web.xml填加以下配置&lt;/p&gt;
&lt;figure class=&#34;highlight xml&#34;&gt;&lt;figcaption data-lang=&#34;XML&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;filter&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;filter-name&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;httpHeaderSecurity&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;filter-name&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;filter-class&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;org.apache.catalina.filters.HttpHeaderSecurityFilter&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;filter-class&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;init-param&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;param-name&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;antiClickJackingOption&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;param-name&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;param-value&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;SAMEORIGIN&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;param-value&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;init-param&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;async-supported&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;true&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;async-supported&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;filter&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;filter-mapping&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;filter-name&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;httpHeaderSecurity&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;filter-name&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;url-pattern&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;/*&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;url-pattern&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;dispatcher&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;REQUEST&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;dispatcher&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;dispatcher&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;FORWARD&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;dispatcher&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;filter-mapping&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h4 id=&#34;iis配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#iis配置&#34;&gt;#&lt;/a&gt; IIS 配置&lt;/h4&gt;
&lt;p&gt;  添加下面的配置到 Web.config文件中&lt;/p&gt;
&lt;figure class=&#34;highlight xml&#34;&gt;&lt;figcaption data-lang=&#34;XML&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;system.webServer&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;httpProtocol&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;customHeaders&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;&lt;/span&gt;add&lt;/span&gt; &lt;span class=&#34;token attr-name&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;token attr-value&#34;&gt;&lt;span class=&#34;token punctuation attr-equals&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&#34;&lt;/span&gt;X-Frame-Options&lt;span class=&#34;token punctuation&#34;&gt;&#34;&lt;/span&gt;&lt;/span&gt; &lt;span class=&#34;token attr-name&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;token attr-value&#34;&gt;&lt;span class=&#34;token punctuation attr-equals&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&#34;&lt;/span&gt;SAMEORIGIN&lt;span class=&#34;token punctuation&#34;&gt;&#34;&lt;/span&gt;&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;customHeaders&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;httpProtocol&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token tag&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;lt;/&lt;/span&gt;system.webServer&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt; ]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/09/28/%E6%B7%B1%E6%B7%B1%E7%9A%84%E6%8C%AB%E8%B4%A5%E5%92%8C%E6%97%A0%E5%8A%A9%E6%84%9F/</guid>
<title>深深的挫败和无助感</title>
<link>https://blog.jingxiyuan.cn/2022/09/28/%E6%B7%B1%E6%B7%B1%E7%9A%84%E6%8C%AB%E8%B4%A5%E5%92%8C%E6%97%A0%E5%8A%A9%E6%84%9F/</link>
<category term="心情" scheme="https://blog.jingxiyuan.cn/categories/%E5%BF%83%E6%83%85/" />
<category term="郁闷" scheme="https://blog.jingxiyuan.cn/tags/%E9%83%81%E9%97%B7/" />
<pubDate>Wed, 28 Sep 2022 16:02:00 +0800</pubDate>
<description><![CDATA[ &lt;p&gt;  一个月都过去了,工作还没有着落!&lt;/p&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">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/</guid>
<title>nginx负载均衡配置</title>
<link>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/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="nginx" scheme="https://blog.jingxiyuan.cn/tags/nginx/" />
<category term="负载均衡" scheme="https://blog.jingxiyuan.cn/tags/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/" />
<pubDate>Tue, 27 Sep 2022 14:45:00 +0800</pubDate>
<description><![CDATA[ &lt;h2 id=&#34;nginx负载均衡配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#nginx负载均衡配置&#34;&gt;#&lt;/a&gt; nginx 负载均衡配置&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;轮询(默认)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-yum&#34;&gt;upstream my_server &amp;#123;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
&amp;#125;
server &amp;#123;
listen 80;
server_name 192.168.0.1;
# Path to the root of your installation
location / &amp;#123;
proxy_pass http://my_server;
&amp;#125;
&amp;#125;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;weight 权重策略&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;weight 代表权重,默认为 1权重越高被分配的客户端越多指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-yum&#34;&gt;upstream my_server &amp;#123;
server 192.168.0.2:8080 weight=1;
server 192.168.0.3:8080 weight=2;
&amp;#125;
server &amp;#123;
listen 80;
server_name 192.168.0.1;
# Path to the root of your installation
location / &amp;#123;
proxy_pass http://my_server;
&amp;#125;
&amp;#125;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;ip_hash&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-yum&#34;&gt;upstream my_server &amp;#123;
ip_hash;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
&amp;#125;
server &amp;#123;
listen 80;
server_name 192.168.0.1;
# Path to the root of your installation
location / &amp;#123;
proxy_pass http://my_server;
&amp;#125;
&amp;#125;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;fair (第三方)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;按后端服务器的响应时间来分配请求,响应时间短的优先分配。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-yum&#34;&gt;upstream my_server &amp;#123;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
fair;
&amp;#125;
server &amp;#123;
listen 80;
server_name 192.168.0.1;
# Path to the root of your installation
location / &amp;#123;
proxy_pass http://my_server;
&amp;#125;
&amp;#125;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;动静分离&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;把静态的资源比如图片cssjs 等先加载到 Nginx 的服务器里。&lt;/em&gt;&lt;/p&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/09/26/%E8%A7%A3%E5%86%B3Hexo-Shoka%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90%E6%97%A0%E6%B3%95%E6%92%AD%E6%94%BE%E7%9A%84%E9%97%AE%E9%A2%98/</guid>
<title>解决Hexo+Shoka背景音乐无法播放的问题</title>
<link>https://blog.jingxiyuan.cn/2022/09/26/%E8%A7%A3%E5%86%B3Hexo-Shoka%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90%E6%97%A0%E6%B3%95%E6%92%AD%E6%94%BE%E7%9A%84%E9%97%AE%E9%A2%98/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="博客" scheme="https://blog.jingxiyuan.cn/tags/%E5%8D%9A%E5%AE%A2/" />
<category term="Hexo" scheme="https://blog.jingxiyuan.cn/tags/Hexo/" />
<category term="Shoka" scheme="https://blog.jingxiyuan.cn/tags/Shoka/" />
<category term="背景音乐" scheme="https://blog.jingxiyuan.cn/tags/%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90/" />
<pubDate>Mon, 26 Sep 2022 19:30:00 +0800</pubDate>
<description><![CDATA[ &lt;p&gt;&lt;em&gt;  今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 https://api.i-meto.com/meting/api 调用出错了。shoka 主题应该是通过这个网站提取音乐地址、图片等信息。通过断点发现网易播放列表还是能正常获取的,只是列表中的具体音乐、图片无法获取了。于是自己用获取的列表信息组装出正确的 url 问题基本解决。只针对网易播放列表,图片只能使用一张固定的。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;  解决方法如下:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;    到 themes\shoka\source\js_app 目录下打开 player.js 文件,在最底部 init (config) 下加入 vendorJs (&#39;fancybox&#39;);,然后找到 56 行用下面的代码替换即可。&lt;/em&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight js&#34;&gt;&lt;figcaption data-lang=&#34;JavaScript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function-variable function&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; list &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;token class-name&#34;&gt;Promise&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;resolve&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; reject&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; source&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;forEach&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;raw&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; meta &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; utils&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;raw&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;meta&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; skey &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JSON&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;stringify&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;meta&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; playlist &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; store&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;skey&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;playlist&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token comment&#34;&gt;// 自己修改 - start&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; audioInfos &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JSON&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;playlist&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; neteaseStartUrl &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;https://music.163.com/song/media/outer/url?id=&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;meta&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;netease&#34;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; audioInfos &lt;span class=&#34;token operator&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; audioInfos&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;length&lt;span class=&#34;token operator&#34;&gt;&gt;&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;!&lt;/span&gt;audioInfos&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;url&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;startsWith&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;neteaseStartUrl&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 如果是网易音乐就自己构建 url&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; jQuery&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;ajax&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token literal-property property&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; audioInfos&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;url&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token literal-property property&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;get&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token literal-property property&#34;&gt;async&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token boolean&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token literal-property property&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;5000&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token function-variable function&#34;&gt;complete&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;XMLHttpRequest&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; status&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;XMLHttpRequest&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;status &lt;span class=&#34;token operator&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; audioInfos&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;forEach&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;audioInfo&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; id &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; audioInfo&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;url&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;substring&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;audioInfo&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;url&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;indexOf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;id=&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; audioInfo&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;url&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;indexOf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;&amp;amp;auth=&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; audioInfo&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;url &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; neteaseStartUrl &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; id&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;25&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; audioInfo&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;pic &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;https://p3.music.126.net/Vji3PQJAZ2C7gS_6X51NFQ==/109951164723650033.jpg?param=200y200&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;26&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;27&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;28&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; list&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;apply&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;list&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; audioInfos&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;29&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token function&#34;&gt;resolve&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;list&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;30&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;31&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;32&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;33&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; list&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;apply&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;list&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; audioInfos&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;34&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token function&#34;&gt;resolve&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;list&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;35&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;36&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token comment&#34;&gt;// 自己修改 - end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;37&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;38&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token function&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;https://api.i-meto.com/meting/api?server=&#39;&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;meta&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;&amp;amp;type=&#39;&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;meta&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;&amp;amp;id=&#39;&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;meta&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;&amp;amp;r=&#39;&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; Math&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;random&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;39&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;40&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; response&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;41&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;42&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; store&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;skey&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JSON&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;stringify&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;json&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;43&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; list&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;apply&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;list&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; json&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;44&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token function&#34;&gt;resolve&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;list&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;45&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;ex&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;46&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;47&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;48&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; list&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;raw&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;49&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token function&#34;&gt;resolve&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;list&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;50&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;51&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;52&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;53&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt; ]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/09/23/%E8%A7%A3%E5%86%B3%E5%9F%9F%E5%90%8Dip%E5%8F%98%E5%8A%A8%E5%90%8E%E9%9C%80%E8%A6%81%E9%87%8D%E5%90%AFnginx%E7%9A%84%E9%97%AE%E9%A2%98/</guid>
<title>解决域名ip变动后需要重启nginx的问题</title>
<link>https://blog.jingxiyuan.cn/2022/09/23/%E8%A7%A3%E5%86%B3%E5%9F%9F%E5%90%8Dip%E5%8F%98%E5%8A%A8%E5%90%8E%E9%9C%80%E8%A6%81%E9%87%8D%E5%90%AFnginx%E7%9A%84%E9%97%AE%E9%A2%98/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="nginx" scheme="https://blog.jingxiyuan.cn/tags/nginx/" />
<pubDate>Fri, 23 Sep 2022 16:17:00 +0800</pubDate>
<description><![CDATA[ &lt;p&gt;&lt;em&gt;今天突然发现自己的网站不能访问了。经过一顿排查,发现是家里的外网 ip 变动后 nginx 解析的域名 ip 还是旧 ip 导致的。手动重启 nginx 后恢复正常。但这不是长久之计,如果每次 ip 变动都需要重启一次 nginx想想都头大。于是查询资料后获得了解决办法方法如下&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-yum&#34;&gt;location / &amp;#123;
resolver 114.114.114.114 valid=60s; #自定义缓存有效时间间隔对变量中的域名进行解析
set $my_server &amp;quot;https://ip:port&amp;quot;;
proxy_pass $my_server;
&amp;#125;
&lt;/code&gt;&lt;/pre&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/09/22/protobuf%E7%94%9F%E6%88%90js%E6%96%87%E4%BB%B6/</guid>
<title>protobuf生成js文件</title>
<link>https://blog.jingxiyuan.cn/2022/09/22/protobuf%E7%94%9F%E6%88%90js%E6%96%87%E4%BB%B6/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="protobuf" scheme="https://blog.jingxiyuan.cn/tags/protobuf/" />
<category term="js" scheme="https://blog.jingxiyuan.cn/tags/js/" />
<pubDate>Thu, 22 Sep 2022 10:30:00 +0800</pubDate>
<description><![CDATA[ &lt;h1 id=&#34;下载工具&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#下载工具&#34;&gt;#&lt;/a&gt; 下载工具&lt;/h1&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly92ZXJzYXdlYi5kbC5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9wcm90b2NvbC1idWZmZXJzLm1pcnJvci92My4xOS41L3Byb3RvYy0zLjE5LjUtd2luNjQuemlw&#34;&gt;protoc-3.19.5-win64.zip&lt;/span&gt;&lt;/p&gt;
&lt;h1 id=&#34;生成js文件&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#生成js文件&#34;&gt;#&lt;/a&gt; 生成 js 文件&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;把 xxx.proto 文件拷贝到解压的 protoc-3.19.5-win64\bin 目录下&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;cmd 到相同的 bin 目录下&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;执行 protoc.exe --js_out=import_style=commonjs,binary:. ./xxx.proto 命令,就会在 bin 目录下生成 xxx_pb.js 文件&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/09/21/%E8%AE%B0%E4%B8%80%E6%AC%A1netty-socket-io%E6%9C%8D%E5%8A%A1%E7%AB%AF%E8%BF%9E%E6%8E%A5%E4%B8%8D%E4%B8%8A%E7%9A%84%E9%97%AE%E9%A2%98/</guid>
<title>记一次netty-socketio服务端连接不上的问题</title>
<link>https://blog.jingxiyuan.cn/2022/09/21/%E8%AE%B0%E4%B8%80%E6%AC%A1netty-socket-io%E6%9C%8D%E5%8A%A1%E7%AB%AF%E8%BF%9E%E6%8E%A5%E4%B8%8D%E4%B8%8A%E7%9A%84%E9%97%AE%E9%A2%98/</link>
<category term="经验分享" scheme="https://blog.jingxiyuan.cn/categories/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/" />
<category term="心得体会" scheme="https://blog.jingxiyuan.cn/categories/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/%E5%BF%83%E5%BE%97%E4%BD%93%E4%BC%9A/" />
<category term="netty" scheme="https://blog.jingxiyuan.cn/tags/netty/" />
<category term="socketIO" scheme="https://blog.jingxiyuan.cn/tags/socketIO/" />
<category term="踩坑" scheme="https://blog.jingxiyuan.cn/tags/%E8%B8%A9%E5%9D%91/" />
<pubDate>Wed, 21 Sep 2022 09:46:00 +0800</pubDate>
<description><![CDATA[ &lt;p&gt;&lt;em&gt;今天前端开发跟我反馈用 vue 的 socketio 连接不上后台服务,连接无反应无任何报错。所以不清楚是前端代码问题还是后台服务的问题。由于框架为另一同事搭建,我只负责处理后端业务逻辑部分,所以第一时间我也不清楚具体的原因。于是我找了个第三方的 socket 工具尝试连接,果然有问题。但是只是提示连接不上,无明显错误原因。到后台查看发现有提示 Unknown transport for request 错误,最后通过调试发现 netty-socketio 的库中 AuthorizeHandler 类有段处理 transport 的代码只能接受大写的 WEBSOCKET 或者 POLLING于是我在工具中按要求填上结果还是不行。然后我在网上搜索也未发现有相关问题只发现有网友提示需要用 socketio 的库,不要自己写 socket 连接。于是我找了 socket.io.js 来连接,结果还是一样。经过大量调试改代码,最后突发奇想,有没有可能跟 netty-socketio 的版本有关系,于是我把版本从 1.7.20 升级到 1.7.21,结果就奇迹般的好了。&lt;/em&gt;&lt;/p&gt;
&lt;h6 id=&#34;总结就好像大力出奇迹实在找不到原因的时候不妨升级一下版本说不定问题就解决了呢o_o&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#总结就好像大力出奇迹实在找不到原因的时候不妨升级一下版本说不定问题就解决了呢o_o&#34;&gt;#&lt;/a&gt; 总结就好像大力出奇迹实在找不到原因的时候不妨升级一下版本说不定问题就解决了呢O (∩_∩) O&lt;/h6&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/09/17/Hexo-Theme-Shoka-algolia%E6%90%9C%E7%B4%A2%E8%B8%A9%E5%9D%91-1/</guid>
<title>Hexo + Theme.Shoka + algolia搜索踩坑</title>
<link>https://blog.jingxiyuan.cn/2022/09/17/Hexo-Theme-Shoka-algolia%E6%90%9C%E7%B4%A2%E8%B8%A9%E5%9D%91-1/</link>
<pubDate>Sat, 17 Sep 2022 23:12:00 +0800</pubDate>
<description><![CDATA[ &lt;h1 id=&#34;hexo-themeshoka安装&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#hexo-themeshoka安装&#34;&gt;#&lt;/a&gt; Hexo + Theme.Shoka 安装&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.jingxiyuan.cn/2022/09/14/Hexo%E5%AE%89%E8%A3%85%E6%91%B8%E7%B4%A2/&#34;&gt;安装介绍&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;algolia注册&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#algolia注册&#34;&gt;#&lt;/a&gt; algolia 注册&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuYWxnb2xpYS5jb20vdXNlcnMvc2lnbl9pbg==&#34;&gt;algolia&lt;/span&gt; 不支持国内邮箱注册,而 google 和 github 由于国内被墙也没法使用。所以只能先注册&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9hcHAubmV0bGlmeS5jb20v&#34;&gt; netlify&lt;/span&gt; 然后通过 netlify 注册 algolia。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;登录 algolia 后创建一个 index名字随意记住既可。&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/09/17/2022-09-17-23-32-20.png&#34; alt=&#34;2022-09-17-23-32-20.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击右上角红点,弹出窗口点 settings 按钮。&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/09/17/2022-09-17-23-35-04.png&#34; alt=&#34;2022-09-17-23-35-04.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 API KEYS获取 appId 和 adminApiKey 填入 hexo 的_config.yml 中 apiKey 暂时不填。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-yml&#34;&gt;algolia:
appId: #Your appId
apiKey: #Your apiKey
adminApiKey: #Your adminApiKey
chunkSize: 5000
indexName: blog #&amp;quot;shoka&amp;quot;
fields:
- title #必须配置
- path #必须配置
- categories #推荐配置
- content:strip:truncate,0,2000
- gallery
- photos
- tags
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;
&lt;p&gt;点击 All Api Keys - New Api key 创建一个 api keyIndices 选先前让记住的 indexACL 选下面图片中的选项。&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/09/17/2022-09-17-23-47-50.png&#34; alt=&#34;2022-09-17-23-47-50.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;把第 5 步中新建的 api key 填入到第 4 步中的配置中,到此已经完成了百分之九十,只需要重新编译发布即可。不过编译步骤多了一步,在 hexo g 后需要再执行 hexo algolia至此搜索功能就大功告成了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/09/16/chevereto%E5%9B%BE%E5%BA%8A%E5%AE%89%E8%A3%85/</guid>
<title>极空间chevereto图床docker版安装</title>
<link>https://blog.jingxiyuan.cn/2022/09/16/chevereto%E5%9B%BE%E5%BA%8A%E5%AE%89%E8%A3%85/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="心得体会" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/%E5%BF%83%E5%BE%97%E4%BD%93%E4%BC%9A/" />
<category term="踩坑" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/%E5%BF%83%E5%BE%97%E4%BD%93%E4%BC%9A/%E8%B8%A9%E5%9D%91/" />
<category term="docker" scheme="https://blog.jingxiyuan.cn/tags/docker/" />
<category term="极空间" scheme="https://blog.jingxiyuan.cn/tags/%E6%9E%81%E7%A9%BA%E9%97%B4/" />
<category term="图床" scheme="https://blog.jingxiyuan.cn/tags/%E5%9B%BE%E5%BA%8A/" />
<category term="图片上传" scheme="https://blog.jingxiyuan.cn/tags/%E5%9B%BE%E7%89%87%E4%B8%8A%E4%BC%A0/" />
<pubDate>Fri, 16 Sep 2022 08:04:00 +0800</pubDate>
<description><![CDATA[ &lt;h1 id=&#34;安装准备&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装准备&#34;&gt;#&lt;/a&gt; 安装准备&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;需要先安装好 mysql 数据库&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;s&gt;选择版本1.5 版以前支持中文,之后被维护的团队删除只支持英文&lt;/s&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;s&gt;本文介绍使用的是&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL2xpbnV4c2VydmVyL2NoZXZlcmV0bw==&#34;&gt; linuxserver_chevereto&lt;/span&gt; 的镜像&lt;/s&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;需要预先创建好给 chevereto 使用的库、账户、密码&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;* 经过测试,使用&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL3N1cmVua2lkL2NoZXZlcmV0bw==&#34;&gt; surenkid_chevereto&lt;/span&gt; 的镜像可以完美支持多国语言,配置同 linuxserver_chevereto 一样&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-16-02.png&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-11-10.png&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-12-49.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;容器配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#容器配置&#34;&gt;#&lt;/a&gt; 容器配置&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;映射路径(不要放在高速盘,否则会有权限问题)&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/09/16/6150d69d9a170d96e66ca69420f8c4e8.png&#34; alt=&#34;6150d69d9a170d96e66ca69420f8c4e8.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;端口&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/09/16/08eafb3b30a7eb9b0c0be26ea7a1502a.png&#34; alt=&#34;08eafb3b30a7eb9b0c0be26ea7a1502a.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;环境puid 和 pgid 使用 1000不要使用 0否则会报错&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/09/16/01567ca9f31f87f832276be35cc4554b.png&#34; alt=&#34;01567ca9f31f87f832276be35cc4554b.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;初始化配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#初始化配置&#34;&gt;#&lt;/a&gt; 初始化配置&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用 http:// 极空间 ip:81 (端口号使用上面配置的,我配置的是 81) 进行 web 访问(数据库配置)&lt;br /&gt;
&lt;img data-src=&#34;http://file.jingxiyuan.cn/images/2022/09/15/0.png&#34; alt=&#34;0.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;管理员配置(注意 website 配置选择个人,除非需要提供给其它人注册)&lt;br /&gt;
&lt;img data-src=&#34;http://file.jingxiyuan.cn/images/2022/09/15/1.png&#34; alt=&#34;1.png&#34; /&gt;&lt;br /&gt;
&lt;img data-src=&#34;http://file.jingxiyuan.cn/images/2022/09/15/2.png&#34; alt=&#34;2.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;默认上传大小是 2M可通过修改 php.ini 配置提升(路径 /etc/php7/php.ini 查找 upload_max_filesize 和 post_max_size 进行修改)。之后用管理员登录通过页面 http://xxx/dashboard/settings/image-upload 修改。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;安装完成&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装完成&#34;&gt;#&lt;/a&gt; 安装完成&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;作为图片管理和链接分享服务完全够用。图片链接 url 支持的也很全面。&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/09/16/2022-09-16-14-52-29.png&#34; alt=&#34;2022-09-16-14-52-29.png&#34; /&gt;&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/09/16/2022-09-16-14-54-58.png&#34; alt=&#34;2022-09-16-14-54-58.png&#34; /&gt;&lt;br /&gt;
&lt;img data-src=&#34;https://file.jingxiyuan.cn/images/2022/09/16/2022-09-16-14-56-13.png&#34; alt=&#34;2022-09-16-14-56-13.png&#34; /&gt;&lt;/li&gt;
&lt;/ol&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/2022/09/14/Hexo%E5%AE%89%E8%A3%85%E6%91%B8%E7%B4%A2/</guid>
<title>Hexo安装摸索</title>
<link>https://blog.jingxiyuan.cn/2022/09/14/Hexo%E5%AE%89%E8%A3%85%E6%91%B8%E7%B4%A2/</link>
<category term="技术分享" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
<category term="心得体会" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/%E5%BF%83%E5%BE%97%E4%BD%93%E4%BC%9A/" />
<category term="踩坑" scheme="https://blog.jingxiyuan.cn/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/%E5%BF%83%E5%BE%97%E4%BD%93%E4%BC%9A/%E8%B8%A9%E5%9D%91/" />
<category term="博客" scheme="https://blog.jingxiyuan.cn/tags/%E5%8D%9A%E5%AE%A2/" />
<category term="Hexo" scheme="https://blog.jingxiyuan.cn/tags/Hexo/" />
<pubDate>Wed, 14 Sep 2022 12:23:55 +0800</pubDate>
<description><![CDATA[ &lt;h1 id=&#34;hexo博客安装&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#hexo博客安装&#34;&gt;#&lt;/a&gt; hexo 博客安装&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9ub2RlanMub3JnL2VuLw==&#34;&gt;安装 nodejs&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXQtc2NtLmNvbS8=&#34;&gt;安装 git&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装 hexowindows 需进入 git bash&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm install -g hexo-cli&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;初始化博客目录&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hexo init blog&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进入博客目录&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cd blog&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;初始化 hexo 到博客目录&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm install&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;shoka主题安装&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#shoka主题安装&#34;&gt;#&lt;/a&gt; shoka 主题安装&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下载主题 &lt;/p&gt;
&lt;p&gt;&lt;code&gt;git clone &lt;/code&gt; &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL2FtZWhpbWUvaGV4by10aGVtZS1zaG9rYS5naXQ=&#34;&gt;https://github.com/amehime/hexo-theme-shoka.git&lt;/span&gt; &lt;code&gt; ./themes/shoka&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;卸载 hexo-renderer-marked 以及别的 markdown 文件渲染器 &lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm un hexo-renderer-marked --save&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装md 文件渲染器,压缩 css/js/html&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm i hexo-renderer-multi-markdown-it --save&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装(给生成的 css 文件们添加浏览器前缀)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm i hexo-autoprefixer --save&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装(站内搜索功能) &lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm i hexo-algoliasearch --save&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装(文章或站点字数及阅读时间统计)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm i hexo-symbols-count-time --save&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装(生成 Feed 文件)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm i hexo-feed --save&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;hexo部分常用命令&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#hexo部分常用命令&#34;&gt;#&lt;/a&gt; Hexo 部分常用命令&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;清除静态文件&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hexo clean&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;生成静态文件&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hexo g&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装 git 推送插件 &lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm install hexo-deployer-git --save&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;推送静态文件到 git &lt;/p&gt;
&lt;p&gt;&lt;code&gt;hexo d&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;安装hexo-admin编写博客插件&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装hexo-admin编写博客插件&#34;&gt;#&lt;/a&gt; 安装 hexo-admin编写博客插件&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;npm install hexo-admin --save&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;hexo-admin 编辑 url&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://localhost:4000/admin&#34;&gt; &lt;code&gt;http://localhost:4000/admin&lt;/code&gt; &lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;settings 设置用户名、密码、Secret&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://localhost:4000/admin/#/settings&#34;&gt; &lt;code&gt;http://localhost:4000/admin/#/settings&lt;/code&gt; &lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;把底部生成的配置拷入 hexo 配合文件中 (_config.yml)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&#34;language-yml&#34;&gt;admin:
username: username
password_hash: xxxxxx
secret: &#39;my super secret phrase&#39; #用单引号包裹
deployCommand: &#39;hexo_publish.sh&#39; #windows用hexo_publish.batlinux用hexo_publish.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;hexo_publishsh&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#hexo_publishsh&#34;&gt;#&lt;/a&gt; hexo_publish.sh&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;#!/bin/bash
hexo clean
hexo g
hexo d
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;hexo_publishbat&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#hexo_publishbat&#34;&gt;#&lt;/a&gt; hexo_publish.bat&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;@echo off
cd D:\blog
d:
@cmd /c &amp;quot;hexo clean&amp;amp;&amp;amp; hexo g&amp;amp;&amp;amp;hexo d&amp;amp;&amp;amp;echo success&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://blog.jingxiyuan.cn/1970/01/01/hello-world/</guid>
<title>Hello World</title>
<link>https://blog.jingxiyuan.cn/1970/01/01/hello-world/</link>
<pubDate>Thu, 01 Jan 1970 08:00:00 +0800</pubDate>
<description><![CDATA[ &lt;p&gt;Welcome to &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9oZXhvLmlvLw==&#34;&gt;Hexo&lt;/span&gt;! This is your very first post. Check &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9oZXhvLmlvL2RvY3Mv&#34;&gt;documentation&lt;/span&gt; for more info. If you get any problems when using Hexo, you can find the answer in &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9oZXhvLmlvL2RvY3MvdHJvdWJsZXNob290aW5nLmh0bWw=&#34;&gt;troubleshooting&lt;/span&gt; or you can ask me on &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2lzc3Vlcw==&#34;&gt;GitHub&lt;/span&gt;.&lt;/p&gt;
&lt;h2 id=&#34;quick-start&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#quick-start&#34;&gt;#&lt;/a&gt; Quick Start&lt;/h2&gt;
&lt;h3 id=&#34;create-a-new-post&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#create-a-new-post&#34;&gt;#&lt;/a&gt; Create a new post&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;$ hexo new &amp;quot;My New Post&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;More info: &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9oZXhvLmlvL2RvY3Mvd3JpdGluZy5odG1s&#34;&gt;Writing&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;run-server&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#run-server&#34;&gt;#&lt;/a&gt; Run server&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;$ hexo server
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;More info: &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9oZXhvLmlvL2RvY3Mvc2VydmVyLmh0bWw=&#34;&gt;Server&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;generate-static-files&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#generate-static-files&#34;&gt;#&lt;/a&gt; Generate static files&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;$ hexo generate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;More info: &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9oZXhvLmlvL2RvY3MvZ2VuZXJhdGluZy5odG1s&#34;&gt;Generating&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;deploy-to-remote-sites&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#deploy-to-remote-sites&#34;&gt;#&lt;/a&gt; Deploy to remote sites&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;$ hexo deploy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;More info: &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9oZXhvLmlvL2RvY3Mvb25lLWNvbW1hbmQtZGVwbG95bWVudC5odG1s&#34;&gt;Deployment&lt;/span&gt;&lt;/p&gt;
]]></description>
</item>
</channel>
</rss>