<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"><channel><title>星空之上</title><link>https://blog.xkzs.cc</link><atom:link href="https://blog.xkzs.cc/rss.xml" rel="self" type="application/rss+xml"/><description>星空之上</description><generator>Halo v2.24.2</generator><language>zh-cn</language><image><url>https://blog.xkzs.cc/upload/pluto.JPG</url><title>星空之上</title><link>https://blog.xkzs.cc</link></image><lastBuildDate>Mon, 18 May 2026 14:58:29 GMT</lastBuildDate><item><title><![CDATA[最新版本 Centos 7 yum 安装nodejs、npm、pm2、yarn 并升级GLIBC]]></title><link>https://blog.xkzs.cc/archives/The%20latest%20version%20of%20Centos%207yum%20installs%20nodejs%2C%20npm%2C%20PM2%2C%20yarn%20and%20upgrades%20GLIBC</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%20Centos%207%20yum%20%E5%AE%89%E8%A3%85nodejs%E3%80%81npm%E3%80%81pm2%E3%80%81yarn%20%E5%B9%B6%E5%8D%87%E7%BA%A7GLIBC&amp;url=/archives/The%20latest%20version%20of%20Centos%207yum%20installs%20nodejs%2C%20npm%2C%20PM2%2C%20yarn%20and%20upgrades%20GLIBC" width="1" height="1" alt="" style="opacity:0;">
<h1 id="最新版本-centos-7-yum-安装nodejsnpmpm2yarn-并升级glibc"><strong>最新版本</strong> Centos 7 yum 安装nodejs、npm、pm2、yarn 并升级GLIBC</h1>
<h2 id="一环境准备">一、环境准备</h2>
<h3 id="11-查看系统环境">1.1 查看系统环境</h3>
<pre><code class="language-Linux">[root@localhost /]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@localhost /]# uname -m
x86_64
[root@localhost /]# uname -r
3.10.0-1160.105.1.el7.x86_64
</code></pre>
<h3 id="12-关闭防火墙和selinux">1.2 关闭防火墙和selinux</h3>
<h4 id="121-关闭防火墙">1.2.1 关闭防火墙</h4>
<pre><code class="language-Linux">[root@localhost /]# systemctl stop firewalld.service
[root@localhost /]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
</code></pre>
<h4 id="122-关闭selinux">1.2.2 关闭selinux</h4>
<pre><code class="language-Linux">[root@localhost ~]# getenforce    #查看selinux是否开启
Enforcing    #enforcing表示selinux开启的，
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'  /etc/selinux/config    #修改配置文件，需要重启才后永久关闭
[root@localhost ~]# setenforce 0    #临时关闭selinx
[root@localhost ~]# getenforce    #检测是否关闭
Disabled
</code></pre>
<h2 id="二安装epel源-extra-packages-for-enterprise-linux-仓库">二、安装epel源 (Extra Packages for Enterprise Linux) 仓库</h2>
<blockquote>
 <p>添加 EPEL 仓库,就可以通过 yum 安装 EPEL 仓库中提供的额外软件包。这些软件包通常是主仓库中没有的，可以获取更广泛的软件选择和更新的软件版本。</p>
</blockquote>
<pre><code class="language-Linux">[19:11:07:590][root@localhost ~]# yum install epel-release -y
</code></pre>
<h2 id="三安装nodejs和npm">三、安装nodejs和npm</h2>
<h3 id="31-安装nodejs和npm">3.1 安装nodejs和npm</h3>
<pre><code class="language-Linux">yum install nodejs npm -y
</code></pre>
<h3 id="32-查看安装的node和npm版本">3.2 查看安装的node和npm版本</h3>
<pre><code class="language-Linux">[19:11:57:054][root@localhost ~]# node -v
[19:11:57:071]v16.9.1
[19:11:59:629][root@localhost ~]# npm -v
[19:11:59:998]8.19.4
</code></pre>
<h3 id="33-npm常用命令">3.3 <code>npm</code>常用命令</h3>
<h4 id="331-初始化新项目">3.3.1 初始化新项目</h4>
<pre><code class="language-Linux">npm init    #初始化一个新的 JavaScript 项目，创建一个 `package.json` 文件
</code></pre>
<h4 id="332-安装和管理包">3.3.2 安装和管理包</h4>
<pre><code class="language-Linux">npm install [package_name]    #安装一个包到项目中
npm install [package_name]@version    #安装特定版本的包
npm install -g [package_name]    #全局安装一个包
npm update [package_name]    #更新项目中的一个包
npm uninstall [package_name]    #从项目中卸载一个包
</code></pre>
<h4 id="333-项目依赖和配置">3.3.3 项目依赖和配置</h4>
<pre><code class="language-Linux">npm list    #列出项目依赖的包
npm view [package_name] versions    #查看可用版本的包
npm config list    #查看 npm 配置
</code></pre>
<h4 id="334-运行脚本和发布">3.3.4 运行脚本和发布</h4>
<pre><code class="language-Linux">npm run [script]    #运行定义在 package.json 中的脚本
npm start    #运行 package.json 中的 start 脚本
npm test    #运行 package.json 中的 test 脚本
npm publish    #发布包到 npm
</code></pre>
<h4 id="335-其他常用命令">3.3.5 其他常用命令</h4>
<pre><code class="language-Linux">npm cache clean --force    #清除 npm 缓存
npm help [command]    #获取命令的帮助信息
</code></pre>
<blockquote>
 <p>到这里 已经算安装完成了,但对我所需要的环境还是版本较低,下面升级一下版本.
  <br>
  切记! 如果当前版本已经够你使用 不要再升级了.不然下面要出现问题了~</p>
</blockquote>
<h3 id="34-可选-设置淘宝镜像和安装淘宝-cnpm">3.4 (可选) 设置淘宝镜像和安装淘宝 cnpm</h3>
<pre><code class="language-Linux"># 设置淘宝镜像源
npm config set registry https://registry.npm.taobao.org
npm install -g cnpm --registry=https://registry.npm.taobao.org
# 取消设置
npm config set registry https://registry.npmjs.org/
#查看当前镜像配置
npm config get registry
</code></pre>
<h3 id="35-安装升级node版本的工具-n-是一个-nodejs-版本管理器">3.5 安装升级node版本的工具 <code>n</code> 是一个 Node.js 版本管理器</h3>
<pre><code class="language-Linux">npm install -g n
</code></pre>
<h3 id="36-n的常用方法">3.6 n的常用方法</h3>
<h4 id="361-安装-nodejs-版本">3.6.1 安装 Node.js 版本</h4>
<pre><code class="language-Linux">n latest # 安装最新版本的 Node.js
n stable # 安装最稳定的 Node.js 版本
n lts # 安装最新的长期支持（LTS）版本的 Node.js
n [version] # 安装指定版本的 Node.js，如 n 14.17.0
</code></pre>
<h4 id="362-查看和选择-nodejs-版本">3.6.2 查看和选择 Node.js 版本</h4>
<pre><code class="language-Linux">n # 显示安装的版本并选择
n ls # 列出已安装的 Node.js 版本
n ls-remote # 列出可安装的 Node.js 版本
n [version] # 切换到指定版本，如 n 14.17.0
</code></pre>
<h4 id="363-卸载-nodejs-版本">3.6.3 卸载 Node.js 版本</h4>
<pre><code class="language-Linux">n rm [version] # 卸载指定版本的 Node.js，如 n rm 14.17.0
n prune # 移除所有不是当前选定版本的 Node.js 版本
</code></pre>
<h4 id="364-其他命令">3.6.4 其他命令</h4>
<pre><code class="language-Linux">n --version # 显示 n 的版本信息
n doctor # 运行 n 的诊断工具
n which [version] # 显示指定版本 Node.js 的安装路径
n use [version] [args] # 以指定的 Node.js 版本运行脚本
n bin [version] # 显示指定版本 Node.js 的 bin 目录
n cache clear # 清除 n 的下载缓存
n auto # 自动根据当前目录的 .n-node-version 文件切换 Node.js 版本
</code></pre>
<h4 id="365-环境变量">3.6.5 环境变量</h4>
<pre><code class="language-Linux">N_PREFIX # 设置 n 的安装目录
N_NODE_MIRROR # 设置 Node.js 镜像的 URL
N_NODE_VERSIONS # 设置 n 存储 Node.js 版本的目录
</code></pre>
<h3 id="37-升级node到稳定版">3.7 升级<code>node</code>到稳定版</h3>
<pre><code class="language-Linux">[15:31:08:193][root@localhost ~]# n stable
[15:31:08:615]  installing : node-v20.10.0
...
</code></pre>
<h3 id="38-升级npm到最新版报错了">3.8 升级npm到最新版(<code>报错了!</code>)</h3>
<pre><code class="language-Linux">[15:32:05:814][root@localhost ~]# npm install -g npm
[15:32:05:821]node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
[15:32:05:821]node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
[15:32:05:821]node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
[15:32:05:821]node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
[15:32:05:821]node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
[15:32:05:821]node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
</code></pre>
<blockquote>
 <p>系统中缺少所需的 GLIBC 和 GLIBCXX 版本,那么 开始安装缺失的库~</p>
</blockquote>
<h2 id="四安装glibc-228-此步骤根据机器性能来定需要的时间">四、安装<code>glibc-2.28</code> (此步骤根据机器性能来定需要的时间.)</h2>
<h3 id="41-编译升级gcc850">4.1 编译升级<code>gcc8.5.0</code></h3>
<h4 id="411-安装所需要的依赖库">4.1.1 安装所需要的依赖库</h4>
<pre><code class="language-Linux">yum install -y gmp-devel mpfr-devel libmpc-devel gcc gcc-c++ gcc-gfortran.x86_64 make bison
</code></pre>
<blockquote>
 <p>由于 yum 安装的 gcc 和 make 版本太低,所以只能手动编译安装了</p>
</blockquote>
<pre><code class="language-Linux"># 下载源代码压缩包
wget https://ftp.gnu.org/gnu/gcc/gcc-8.5.0/gcc-8.5.0.tar.gz
#解压
tar -zxvf gcc-8.5.0.tar.gz
cd gcc-8.5.0
#编译
./configure --prefix=/usr --disable-multilib --enable-languages=c,c++,fortran
make -j 8
#卸载低版本
yum remove gcc -y
# 安装8.5.0版本的gcc
make install
# 查看版本是否升级成功
gcc -v
</code></pre>
<h3 id="42-编译升级make43">4.2 编译升级<code>make4.3</code></h3>
<pre><code class="language-Linux"># 下载源代码压缩包
wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
#解压
tar -zxvf make-4.3.tar.gz
cd make-4.3
#编译并安装
./configure --prefix=/usr &amp;&amp; make &amp;&amp; make install
# 查看版本是否升级成功
make -v
</code></pre>
<h3 id="43-编译glibc">4.3 编译<code>glibc</code></h3>
<pre><code class="language-Linux"># 下载源代码压缩包
wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
#解压
tar -zxvd glibc-2.28.tar.gz
#解压
cd glibc-2.28 &amp;&amp; mkdir build &amp;&amp; cd build
../configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include  --disable-sanity-checks --disable-werror      #/usr禁止修改安装目录,改后无法登录. 这里用覆盖模式,直接用
make -j 8
# 安装
make install
make localedata/install-locales #解决乱码问题
</code></pre>
<blockquote>
 <p>make install 如果提示报错,可暂时忽略,看一下命令中是否有 glibc-2.28版本,有即可</p>
</blockquote>
<pre><code class="language-Linux">strings /lib64/libc.so.6 | grep GLIBC_
</code></pre>
<blockquote>
 <p>此时再升级<code>npm</code>就好了.</p>
</blockquote>
<h2 id="五安装pm2工具-进程管理器">五、安装<code>PM2</code>工具 (进程管理器)</h2>
<h3 id="51-安装pm2">5.1 安装<code>PM2</code></h3>
<pre><code class="language-Linux">npm install -g pm2
</code></pre>
<h3 id="52-pm2的常用方法">5.2 <code>PM2</code>的常用方法</h3>
<h4 id="521-启动应用">5.2.1 启动应用</h4>
<pre><code class="language-Linux">pm2 start app.js    #使用 PM2 启动 app.js 文件
pm2 start app.js --name="MyApp"    #以自定义名称启动应用
pm2 start app.js -i max    #以集群模式启动应用，并根据 CPU 核心数启动最大实例数
pm2 start app.js --watch    #启动应用并监控文件变化自动重启
</code></pre>
<h4 id="522-列出所有进程">5.2.2 列出所有进程</h4>
<pre><code class="language-Linux">pm2 list    #显示所有由 PM2 管理的进程
pm2 monit    #监控所有进程
pm2 show [app-name]    #显示特定应用的详细信息
</code></pre>
<h4 id="523-重启和停止">5.2.3 重启和停止</h4>
<pre><code class="language-Linux">pm2 restart all    #重启所有进程
pm2 reload all    #无宕机重新加载所有进程
pm2 stop all    #停止所有进程
pm2 restart [app-name]    #重启指定的应用
</code></pre>
<h4 id="524-日志管理">5.2.4 日志管理</h4>
<pre><code class="language-Linux">pm2 logs    #显示所有进程的日志
pm2 logs [app-name]    #显示指定应用的日志
pm2 flush    #清空所有日志文件
pm2 reloadLogs    #重新加载所有日志
</code></pre>
<h4 id="525-负载均衡和集群模式">5.2.5 负载均衡和集群模式</h4>
<pre><code class="language-Linux">pm2 start app.js -i 0    #根据可用 CPU 数启动最大进程数
pm2 scale [app-name] +3    #增加 [app-name] 的实例数
pm2 scale [app-name] 2    #将 [app-name] 的实例数调整为 2
</code></pre>
<h4 id="526-配置和环境管理">5.2.6 配置和环境管理</h4>
<pre><code class="language-Linux">pm2 start app.js --env production    #在生产环境下启动应用
pm2 start ecosystem.config.js    #根据配置文件启动应用
</code></pre>
<h4 id="527-其他重要命令">5.2.7 其他重要命令</h4>
<pre><code class="language-Linux">pm2 save    #保存当前的进程列表和配置
pm2 resurrect    #在系统重启后恢复之前保存的进程列表
pm2 update    #更新 PM2 运行时和所有应用
pm2 reload [app-name]    #无宕机重新加载指定应用
pm2 logrotate    #开启日志文件自动轮换
pm2 deploy [configuration_file] [environment] [action]    #部署应用
pm2 plus    #启动 PM2 Plus 互动式仪表板
pm2 describe [id|name]    #描述特定应用的状态和详情
pm2 reset [process_name]    #重置重启计数
pm2 delete [process_name]    #删除并停止指定的进程
pm2 ping    #检查 PM2 守护进程是否运行
pm2 report    #生成状态报告，用于故障排除
pm2 startup    #生成启动脚本
</code></pre>
<h2 id="六安装yarn工具-包管理工具">六、安装<code>yarn</code>工具 (包管理工具)</h2>
<h3 id="61-安装yarn工具">6.1 安装<code>yarn</code>工具</h3>
<pre><code class="language-Linux">npm install -g yarn
</code></pre>
<h3 id="62-yarn常用命令">6.2 <code>yarn</code>常用命令</h3>
<h4 id="621-初始化新项目">6.2.1 初始化新项目</h4>
<pre><code class="language-Linux">yarn init    #初始化一个新的 JavaScript 项目，创建一个 `package.json` 文件
</code></pre>
<h4 id="622-安装和管理包">6.2.2 安装和管理包</h4>
<pre><code class="language-Linux">yarn add [package_name]    #安装一个包到项目中
yarn add [package_name]@version    #安装特定版本的包
yarn global add [package_name]    #全局安装一个包
yarn upgrade [package_name]    #更新项目中的一个包
yarn remove [package_name]    #从项目中卸载一个包
</code></pre>
<h4 id="623-项目依赖和配置">6.2.3 项目依赖和配置</h4>
<pre><code class="language-Linux">yarn list    #列出项目依赖的包
yarn info [package_name]    #查看包的信息
yarn config list    #查看 yarn 配置
</code></pre>
<h4 id="624-运行脚本和发布">6.2.4 运行脚本和发布</h4>
<pre><code class="language-Linux">yarn run [script]    #运行定义在 package.json 中的脚本
yarn start    #运行 package.json 中的 start 脚本
yarn test    #运行 package.json 中的 test 脚本
yarn publish    #发布包到 npm
</code></pre>
<h4 id="625-其他常用命令">6.2.5 其他常用命令</h4>
<pre><code class="language-Linux">yarn cache clean    #清除 yarn 缓存
yarn help [command]    #获取命令的帮助信息
</code></pre>]]></description><guid isPermaLink="false">/archives/The%20latest%20version%20of%20Centos%207yum%20installs%20nodejs%2C%20npm%2C%20PM2%2C%20yarn%20and%20upgrades%20GLIBC</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fb85077a095e7b219f9a62eb0d5be8a17.webp&amp;size=m" type="image/jpeg" length="128908"/><category>GLIBC</category><category>PM2</category><category>Npm</category><category>Yum</category><category>Linux</category><pubDate>Thu, 28 Dec 2023 10:05:48 GMT</pubDate></item><item><title><![CDATA[SecureCRT优化配置]]></title><link>https://blog.xkzs.cc/archives/Optimized_configuration_of_SecureCRT</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=SecureCRT%E4%BC%98%E5%8C%96%E9%85%8D%E7%BD%AE&amp;url=/archives/Optimized_configuration_of_SecureCRT" width="1" height="1" alt="" style="opacity:0;">
<h1 id="securecrt优化配置">SecureCRT优化配置</h1>
<h2 id="一-基本设置">一. 基本设置</h2>
<p>修改设置
 <br>
 为了SecureCRT用起来更方便，需要做一些设置，需要修改的有如下几处:</p>
<ol>
 <li>退出主机自动关闭窗口</li>
</ol>
<p>"Options"-&gt;"Configure"&gt;"Default Session Options" 点击<code>Terminal</code> 进行编辑.
 <br>
 勾选<code>Close on disconnect</code></p>
<p><img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2F9c8880b98ffb390e4e1a49af196418b9-0.webp&amp;size=m" alt="Terminal"></p>
<ol start="2">
 <li>修改默认卷屏行数</li>
</ol>
<p>当查看日志或者某些操作,屏幕输出有上百行,需要将屏幕回翻时,这个设置会有很大的帮助,默认为 500 行,可以改为 10000 行,不用担心找不到了.</p>
<p>"Options"-&gt;"Configure"&gt;"Default Session Options"&gt;"Terminal" 点击<code>Emulation</code> 进行编辑.
 <br>
 <code>Scrollback buffer</code> 改为 10000.
 <br>
 <img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2Fb8112d69ffd0ef78522c3c3c11c7f540-0.webp&amp;size=m" alt="Scrollback buffer"></p>
<ol start="3">
 <li>修改Xmodem/Zmodem上传下载路径</li>
</ol>
<p>SecureCRT可以使用Xmodem/Zmodem方便的上传和下载文件。
 <br>
 "Options"-&gt;"Configure"&gt;"Default Session Options"&gt;"X/Y/Zmodem" 修改 <code>Upload/Download</code> 路径为自己想要设置的路径即可</p>
<p><img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2Fd0b56ac65cedd6f1436d6fca673420e7-0.webp&amp;size=m" alt="Upload/Download"></p>
<ol start="4">
 <li>拷贝与粘贴的设置</li>
</ol>
<p>通过鼠标操作即可拷贝或粘贴所需内容是一个非常方便的设置.
 <br>
 "Options"-&gt;"Global options" 点击<code>Terminal</code>进行编辑.
 <br>
 勾选 <code>Mouse</code> 下的 <code>Copy on select</code> <code>Paste on (right/middle) button</code>
 <br>
 这样设置后,只要用鼠标选中所需内容,点击鼠标右键即可粘贴内容.</p>
<p><img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2F094c0554073ac5488215a57b8ff2baab-0.webp&amp;size=m" alt="Mouse"></p>
<h2 id="二-日志配置">二. 日志配置</h2>
<p>"Options"-&gt;"Configure"&gt;"Default Session Options" 点击<code>Log File</code> 进行编辑.
 <br>
 <img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2F271167e9e5434788ef4db1f6dcc998a1-0.webp&amp;size=m" alt="Log File"></p>
<ol>
 <li>日志文件名:</li>
</ol>
<p>创建对应 session 文件名
 <br>
 <img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2F76d4a7812d7541a5f52b19fc641185f7-0.webp&amp;size=m" alt="Log file name"></p>
<p><code>Log file name</code> 输入</p>
<pre><code>/Users/pluto/文件/SecureCRT_log/%S/%Y%M%D-%h%m%s.log
</code></pre>
<p>每个不同的 Session 会自动创建对应文件夹,并以"年月日-时分秒.log"为文件名存储.</p>
<ol start="2">
 <li>自定义日志格式:</li>
</ol>
<p><img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2Febf10d14f14ff9e8016e1ebc9874bb01-0.webp&amp;size=m" alt="Custom log data"></p>
<p><code>Custom log data</code>
 <br>
 <code>Upon connect</code> | 在连接时自动加入：[%Y%M%D_%h:%m:%s.%t ]
 <br>
 <code>On each line</code> | 在每行自动加入：[%h:%m:%s:%t]
 <br>
 <img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2F4c61975fc485be79109329b5acaf647e-0.webp&amp;size=m" alt="Custom log data"></p>
<ol start="3">
 <li>日志保存选项设置:</li>
</ol>
<p><img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2Fc6ce5c43ef357945fe638535c465614b-0.webp&amp;size=m" alt="Options"></p>
<p><code>Start log upon connect</code> | 在每次连接时开始日志
 <br>
 <code>Start new log at midnight</code> | 在午夜启用新日志</p>
<blockquote>
 <p>由于我选择的是按照时间来作为日志名称，所以下面2个可以任选一个</p>
</blockquote>
<p><code>Append to file</code> | 追加到文件
 <br>
 <code>Overwrite file</code> | 覆盖文件</p>
<ol start="4">
 <li>设置保存:</li>
</ol>
<p>选择<code>Change ALL Sessions(no undo)</code>修改设置保存至全部sessions
 <br>
 <img src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F12%2F20%2F1741ce42870c098d1459b3ec10a04a43-0.webp&amp;size=m" alt="Change ALL Sessions(no undo)"></p>]]></description><guid isPermaLink="false">/archives/Optimized_configuration_of_SecureCRT</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Ff1bea0cc7b7b01462a219a8b741fa438.webp&amp;size=m" type="image/jpeg" length="278482"/><category>软件</category><pubDate>Wed, 20 Dec 2023 14:56:13 GMT</pubDate></item><item><title><![CDATA[Mac常用软件整理]]></title><link>https://blog.xkzs.cc/archives/Mac_Software</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=Mac%E5%B8%B8%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%95%B4%E7%90%86&amp;url=/archives/Mac_Software" width="1" height="1" alt="" style="opacity:0;">
<h1 id="日常使用中常用到的软件整理">日常使用中常用到的软件整理</h1>
<blockquote>
 <p>本站资源收集于网络,部分安装包来自<a href="https://www.macdo.cn/">Mac毒</a>,仅罗列了个人常用的软件.蓝奏云&amp;百度云&amp;阿里云 仅用来做快速下载使用.<code>如侵权请告知,删</code></p>
</blockquote>
<hr>
<h2 id="postman">Postman</h2>
<blockquote>
 <p>Postman 是一个强大的 API 调试和测试工具，用于发送 HTTP 请求并分析服务器响应。它可以用来测试和调用 REST 和 SOAP API，以及模拟 API 调用。此外，Postman 还提供了丰富的调试和测试功能，例如断言、脚本、集合、环境变量等，可以帮助开发者更加高效地完成 API 的测试工作。</p>
</blockquote>
<ul>
 <li><a href="https://www.postman.com/downloads/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/ijYRY1eefd9c">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1SWXFaUZwIIs_Pret0EB0ZQ?pwd=nmwu">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/dv8Pdk67BaA">阿里云</a> 提取码<code>56kb</code></li>
</ul>
<h2 id="foxmail">FoxMail</h2>
<blockquote>
 <p>FoxMail是一款知名的电子邮件客户端软件，可以让用户方便快捷地管理多个邮箱帐户。它具有强大的反垃圾邮件功能，并支持多种邮件协议。此外，FoxMail还提供了各种实用的功能，如邮件分类、标签、搜索、过滤器等，可以帮助用户高效地处理大量邮件。</p>
</blockquote>
<ul>
 <li><a href="https://www.foxmail.com/mac/en/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/isQ7d1eeftqf">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1N_StdGIiCQn_lhb_zMiNgA?pwd=aeh6">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/jjs4Qyw4NhA">阿里云</a> 提取码<code>73kv</code></li>
</ul>
<h2 id="calibre">calibre</h2>
<blockquote>
 <p>Calibre 是一款强大的电子书管理和转换工具，可以帮助用户组织、编辑和导出他们的电子书库。它支持各种格式的电子书，并允许用户将它们转换成其他格式。此外，Calibre 还提供了一个集成的新闻源订阅器，可以让用户下载和整理新闻源文章。总的来说，Calibre 是一款非常有用的工具，可以让用户更好地管理和享受他们的电子书和新闻源文章。</p>
</blockquote>
<ul>
 <li><a href="https://calibre-ebook.com/download">官网</a></li>
 <li><a href="https://pan.baidu.com/s/1XusiPfQIgWQuQrGFnztBqA?pwd=7kur">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/SWxJMzyUBUR">阿里云</a> 提取码<code>5c4t</code></li>
</ul>
<h2 id="cleanmymac">CleanMyMac</h2>
<blockquote>
 <p>CleanMyMac 是一款 Mac 系统优化和清理工具，可以帮助用户清理磁盘空间、提升系统性能、保护隐私和安全。它包括了多项实用的功能，例如系统垃圾清理、大型和旧文件查找、卸载器、维护模块、隐私清理、恶意软件清除等。总的来说，CleanMyMac 是一款非常好用的工具，可以帮助用户更好地管理和维护他们的 Mac 设备。</p>
</blockquote>
<ul>
 <li><a href="https://cleanmymac.com/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/i3SiN1eegkcd">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1Jmwcot6T7saCbzQ7iZorgw?pwd=5gqe">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/LdfcQNy7vNq">阿里云</a> 提取码<code>u7y1</code></li>
</ul>
<h2 id="自动切换输入法">自动切换输入法</h2>
<blockquote>
 <p>自动切换输入法 是一种实用的应用程序，可以让用户在不同的语言环境下自动切换输入法。该应用可以根据用户的实际需求进行个性化设置，适用于各种应用场景，例如办公软件、浏览器和聊天工具等。使用 "自动切换输入法" 可以简化输入过程，避免手动切换输入法的繁琐操作，节省时间和精力。该应用受到许多 Mac 用户的喜爱和支持，是一款非常实用的工具。</p>
</blockquote>
<ul>
 <li><a href="https://www.better365.cn/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iWz4b1eel97c">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1tVvsHvzGsTnVCIqe4IvGag?pwd=mnhn">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/JXZYehBaq3g">阿里云</a> 提取码<code>3fs3</code></li>
</ul>
<h2 id="betterandbetter">BetterAndBetter</h2>
<blockquote>
 <p>BetterAndBetter 是一款 Mac 应用，提供多种快捷手势功能，让用户可以更快速、高效地进行日常操作。这款应用支持触摸板绘图手势、触摸板和鼠标快捷键、窗口管理和屏幕截图等功能，可以让用户节省时间和提高效率。它还支持自定义设置，可以根据个人喜好和习惯进行个性化的配置。总的来说，BetterAndBetter 是一款非常好用的 Mac 应用，可以让用户更加便捷地进行日常操作。</p>
</blockquote>
<ul>
 <li><a href="https://www.better365.cn/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iMD4G1eeojfi">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1hwLMcuJzrOJkfUxuQThasg?pwd=9x91">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/HB9dJHLYKs6">阿里云</a> 提取码<code>k2z0</code></li>
</ul>
<h2 id="tinycal">TinyCal</h2>
<blockquote>
 <p>TinyCal 是一款小巧精致的 Mac 日历应用，为用户提供直观易用的日历体验。这款应用不仅可以显示当前日期和时间，还可以显示中国传统农历、节假日、公休日、天气预报等内容，同时支持与 Google 日历同步，方便用户管理和安排日程。此外，TinyCal 还支持多种视图模式，包括月视图、周视图、列表视图等，可以让用户根据自身需求进行选择。总的来说，TinyCal 是一款非常实用的 Mac 应用，可以帮助用户更好地管理和规划生活。</p>
</blockquote>
<ul>
 <li><a href="https://apps.apple.com/cn/app/%E5%B0%8F%E5%8E%86-%E5%B0%8F%E8%80%8C%E7%BE%8E%E7%9A%84%E6%97%A5%E5%8E%86/id1114272557?mt=12?mt=12">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iIizP1eel90f">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1bew600xXQn_m9oHI7ecNfg?pwd=cuif">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/UxreBDVBwMw">阿里云</a> 提取码<code>ly44</code></li>
</ul>
<h2 id="idea">Idea</h2>
<blockquote>
 <p>Idea 是一款专为 Mac 开发者的智能代码编辑器，集成了 Java、Kotlin、Python、JavaScript、CSS 等多种编程语言的支持。它具备高度可定制性，拥有丰富的插件生态系统，能够满足各种开发需求。Idea 提供了智能代码补全、实时错误检测、重构建议等强大功能，可以帮助程序员更快、更高效地编写高质量代码。总的来说，Idea 是一款非常优秀的 Mac 编辑器，非常适合进行各类开发项目。</p>
</blockquote>
<ul>
 <li><a href="https://www.jetbrains.com/idea/download/?section=mac">官网</a></li>
 <li><a href="https://pan.baidu.com/s/1C0fq0sMdYuD76M3Ff9gt9w?pwd=t8q2">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/xkiMWgNMn4T">阿里云</a> 提取码<code>eg92</code></li>
 <li><a href="https://plutox.lanzout.com/iil6b1eeof7g">授权码</a></li>
</ul>
<h2 id="downie-4">Downie 4</h2>
<blockquote>
 <p>Downie 4 是一款功能强大的 Mac 视频下载工具，可以轻松从超过一千个网站上抓取视频内容。这款软件界面简洁明了，易于操作，支持一次性添加多个链接批量下载，并能够保存原始视频质量和字幕信息。此外，Downie 4 还具备良好的稳定性，能够在后台运行的同时保持系统的流畅性。总的来说，Downie 4 是一款非常实用的视频下载神器，可以让用户轻松获取自己喜欢的内容。</p>
</blockquote>
<ul>
 <li><a href="https://www.downie.cn/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/imTj51eeoire">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/16-6xySkm1VFB5bursKEMqw?pwd=4yai">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/2av9vjPcU6f">阿里云</a> 提取码<code>k21s</code></li>
</ul>
<h2 id="visual-studio-code">Visual Studio Code</h2>
<blockquote>
 <p>Visual Studio Code 是一款由 Microsoft 开发的跨平台代码编辑器，支持多种编程语言。这款软件拥有丰富的特性，包括代码高亮显示、语法检查、智能提示等功能，同时还支持 Git 版本控制。此外，Visual Studio Code 还有一个活跃的社区，提供大量的插件扩展，可以帮助用户进一步增强其功能。总的来说，Visual Studio Code 是一款十分优秀的代码编辑器，适合各层次开发者使用。</p>
</blockquote>
<ul>
 <li><a href="https://code.visualstudio.com/download">官网</a></li>
 <li><a href="https://pan.baidu.com/s/1IGVtioWFL8dpYn9u-hcc6g?pwd=c264">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/N4L3cXDYPzv">阿里云</a> 提取码<code>go35</code></li>
</ul>
<h2 id="bob">Bob</h2>
<blockquote>
 <p>Bob 是一款针对 Mac 用户设计的强大翻译软件，提供划词翻译、截图翻译、输入翻译等功能。它支持包括有道翻译、百度翻译、谷歌翻译在内的多种翻译引擎，用户可以根据自己的需要自由选择。Bob 具备快捷的操作方式和高效的翻译速度，无论是在浏览网页、阅读文档还是进行即时交流的过程中都能提供有力的支持。总之，Bob 是一款非常实用的翻译工具，可以帮助用户更方便地了解外语文档和信息。</p>
</blockquote>
<ul>
 <li><a href="https://bobtranslate.com/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/i8Auz1eft2tg">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1df_DD1Wx6cVmO0TDWWz1Tg?pwd=tprc">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/oXbVECYg1aq">阿里云</a> 提取码<code>11kw</code></li>
</ul>
<h2 id="popclip">PopClip</h2>
<blockquote>
 <p>PopClip 是一款轻量级的剪贴板增强工具，可以帮助用户快速复制、剪切、搜索、翻译等操作。这款软件具备极简的界面风格，只需简单点击即可实现多功能操作。此外，PopClip 支持自定义扩展插件，可以与其他应用进行深度整合，满足用户的各种需求。总的来说，PopClip 是一款十分实用的 Mac 剪贴板增强工具，能够大大提高用户的工作效率。</p>
</blockquote>
<ul>
 <li><a href="https://www.popclip.app/download">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iwVBT1eeofaj">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1R8cqJ42gR7aNgdvQoamkLQ?pwd=9ikp">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/VqUovJ8V7n5">阿里云</a> 提取码<code>d27a</code></li>
</ul>
<h2 id="bartender">Bartender</h2>
<blockquote>
 <p>Bartender 是一款 Mac 菜单栏管理工具，可以将系统和第三方应用的图标隐藏起来，使得菜单栏更加清爽有序。用户可以自由调整菜单栏图标的位置、大小、颜色等属性，以满足个性化需求。此外，Bartender 还支持热键触发功能，可以在按下指定组合键后显示所有隐藏的图标。总的来说，Bartender 是一款非常好的菜单栏整理软件，能够让用户更加轻松地管理菜单栏上的应用。</p>
</blockquote>
<ul>
 <li><a href="https://www.macbartender.com/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iYHpD1eeufoj">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1tox--WTlK_ou2xEUqUeImw?pwd=ullg">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/n1n471rAiN3">阿里云</a> 提取码<code>3zu8</code></li>
</ul>
<h2 id="todesk">ToDesk</h2>
<blockquote>
 <p>ToDesk 是一款远程控制软件，可以实现跨平台远程操作和桌面共享。它支持 Windows、Mac、Linux、Android、iOS 等多种操作系统，无论身处何处都可以随时访问您的计算机。此外，ToDesk 具有稳定的连接速度、高清流畅的画质和安全的传输机制，是远程办公的好帮手。总的来说，ToDesk 是一款优秀的远程控制工具，值得推荐给经常需要远程办公的用户。</p>
</blockquote>
<ul>
 <li><a href="https://www.todesk.com/download.html">官网</a></li>
 <li><a href="https://plutox.lanzout.com/igihi1ef17xc">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1hHz_PX1Nn-e-zWY8HPO2cQ?pwd=w4ba">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/Ni8DCsCNJmV">阿里云</a> 提取码<code>84ev</code></li>
</ul>
<h2 id="向日葵">向日葵</h2>
<blockquote>
 <p>向日葵是一款出色的远程控制软件，支持跨平台的电脑远程控制、屏幕分享、文件传输等操作。这款软件具备强大的安全性，使用 AES 256 位 SSL 加密技术保障用户的数据传输，防止个人信息泄露。此外，向日葵支持多终端设备控制，无论是手机还是平板电脑都可轻松实现远程控制。总而言之，向日葵是一款非常实用的远程控制工具，可以帮助用户实现跨平台远程操作。</p>
</blockquote>
<ul>
 <li><a href="https://sunlogin.oray.com/download">官网</a></li>
 <li><a href="https://plutox.lanzout.com/i6CYJ1ef1f0h">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/19fuz34FzSTu39zHJHR9P5g?pwd=zqim">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/SeatM2VzY2L">阿里云</a> 提取码<code>tr11</code></li>
</ul>
<h2 id="sourcetree">Sourcetree</h2>
<blockquote>
 <p>Sourcetree 是一个图形化 Git 客户端，提供友好简洁的界面来管理 Git 存储库。它支持各种版本控制系统，让开发者可以轻松掌握 Git 操作，包括克隆、分支、提交等。此外，Sourcetree 还提供丰富的图表和可视化的操作面板，方便用户跟踪代码变更。总的来说，Sourcetree 是一款非常好用的 Git 工具，值得推荐给所有使用 Git 的开发者。</p>
</blockquote>
<ul>
 <li><a href="https://www.sourcetreeapp.com/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iMmm41ef4s6j">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/17rXt_ouXpIGbJTb_s0So2Q?pwd=88zj">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/yZ71rkJ8We4">阿里云</a> 提取码<code>p4l6</code></li>
</ul>
<h2 id="snipaste">Snipaste</h2>
<blockquote>
 <p>Snipaste 是一款功能强大的屏幕截图及图片编辑工具，可以帮助用户快速截图、标注、复制、粘贴等功能。这款软件可以将截取的图片固定在桌面上，方便用户参考使用。此外，Snipaste 还提供强大的图像编辑功能，包括图片裁剪、旋转、标注等。总而言之，Snipaste 是一款实用性极高的屏幕截图和图片编辑软件，非常值得一试。</p>
</blockquote>
<ul>
 <li><a href="https://zh.snipaste.com/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iB9SX1ef67ze">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1uv0qmQ4lf3MpkeoSAkDdNw?pwd=156l">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/RVGUbwoZTYg">阿里云</a> 提取码<code>59rj</code></li>
</ul>
<h2 id="swish">Swish</h2>
<blockquote>
 <p>Swish 是一款 Mac 专属的手势操作增强工具，可以让用户利用触控板来进行高效的操作。它支持多种预设的手势动作，比如缩放、关闭、切换窗口等等。使用 Swish 可以大大减少鼠标的移动次数，提高了工作效率。总之，Swish 是一款很好用的手势操作工具，适合 Mac 用户使用。</p>
</blockquote>
<ul>
 <li><a href="https://highlyopinionated.co/swish/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iY6dT1efck8b">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1CRuEPcXO8gM4SZeXd7oK0A?pwd=woxl">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/9nr24BcYVrC">阿里云</a> 提取码<code>as87</code></li>
</ul>
<h2 id="keka">Keka</h2>
<blockquote>
 <p>Keka 是一款 Mac 下的压缩解压缩工具，支持多种格式，包括 ZIP、RAR、7z、TGZ 等。它具备一键解压、自定义解压位置等功能，让文件压缩变得更加快捷高效。此外，Keka 还支持安全加密压缩和分卷压缩等高级功能，满足用户的需求。总的来说，Keka 是一款强大实用的压缩解压缩软件，值得推荐给所有 Mac 用户。</p>
</blockquote>
<ul>
 <li><a href="https://www.keka.io/en/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/i1tmL1eeogbg">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1_b7Bh6C0Naig2a2nOB3yrw?pwd=fatu">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/JMiQFnazVQY">阿里云</a> 提取码<code>l65h</code></li>
</ul>
<h2 id="goole-chrome">Goole Chrome</h2>
<blockquote>
 <p>Google Chrome 是一款非常流行的网页浏览器，它具有快速、稳定、安全等特点。它支持多种扩展插件，可以增加更多的功能。此外，Google Chrome 还支持云同步，可以在任何设备上继续浏览之前打开的网页。总的来说，Google Chrome 是一款非常不错的浏览器，推荐大家使用。</p>
</blockquote>
<ul>
 <li><a href="https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg">官网</a></li>
 <li><a href="https://pan.baidu.com/s/11VEZkIqorKpk67M5lQ-GuQ?pwd=kksu">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/175ehkEeyg9">阿里云</a> 提取码<code>l20p</code></li>
</ul>
<h2 id="free-download-manager">Free Download Manager</h2>
<blockquote>
 <p>Free Download Manager 是一款免费而强大的下载工具，它支持多线程下载、定时任务、断点续传等功能，可以极大地提高下载速度。这款软件不仅可以用作 FTP 客户端和代理服务器，还可以作为 BitTorrent 客户端使用。总之，Free Download Manager 是一款非常好用的下载管理器，对于常需要下载文件的 Mac 用户来说是必不可少的一款利器。</p>
</blockquote>
<ul>
 <li><a href="https://www.freedownloadmanager.org/zh/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/i0cTn1eeohri">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1KzRosC1pDjTwycRdSwPaKA?pwd=vgex">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/r48ka7wRnjC">阿里云</a> 提取码<code>3t0j</code></li>
</ul>
<h2 id="wps">WPS</h2>
<blockquote>
 <p>WPS 是一款全能型办公软件，支持 Word 文档、Excel 表格、PPT 演示文稿等多种文件类型。它具备兼容微软 Office 功能，并且支持云存储、多人协作等特性，方便用户在各个平台上进行文件管理。总的来说，WPS 是一款非常实用的办公室套件，适合广大的 Mac 用户使用。</p>
</blockquote>
<ul>
 <li><a href="https://www.wps.com/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/ir7pr1ehfohe">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1RGyETcv-RnU3PCQpYSRTcw?pwd=1i0s">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/bZyxCZ45uti">阿里云</a> 提取码<code>3f0u</code></li>
</ul>
<h2 id="lx-music">LX Music</h2>
<blockquote>
 <p>LX Music 是一个强大的在线音乐播放器，可以通过搜索歌词、歌名、歌手等方式找到你想听的音乐。它可以将多种来源的音乐汇聚在一起，让你在电脑上就能直接播放音乐。此外，LX Music 还支持用户自定义皮肤和主题，让你可以按照自己的喜好进行设置。总之，LX Music 是一款非常好的音乐播放器，值得一试。</p>
</blockquote>
<ul>
 <li><a href="https://github.com/lyswhut/lx-music-desktop/releases">官网</a></li>
 <li><a href="https://plutox.lanzout.com/ifzHe1ehhlmd">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/14NZrNlEKf7F_ZdXF-Aezag?pwd=bupu">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/QVV6Yf1AqjC">阿里云</a> 提取码<code>y2w3</code></li>
</ul>
<h2 id="reeder">Reeder</h2>
<blockquote>
 <p>Reeder 是一款强大的 RSS 订阅工具，可以收集和聚合你的RSS订阅源。它支持多种在线阅读器服务，可以将你喜欢的博客、新闻、视频等内容统一呈现。此外，Reeder 还具备便捷的阅读模式和搜索功能，让你轻松查看和管理订阅内容。总的来说，Reeder 是一款优秀 RSS 阅读器，推荐给经常阅读资讯的用户使用。</p>
</blockquote>
<ul>
 <li><a href="https://reederapp.com/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/i8GZp1ehi6cj">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1OIy8vhyl1rF6bnBqasEUlw?pwd=h5fw">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/5yTiazHjtbU">阿里云</a> 提取码<code>h8h3</code></li>
</ul>
<h2 id="infuse">Infuse</h2>
<blockquote>
 <p>Infuse 是一款全面的多媒体播放器，支持播放各种格式的音视频文件。它拥有丰富的音频和视频设置选项，可以调整播放质量，获得最佳观看体验。此外，Infuse 还支持 AirPlay 投屏和 Chromecast，可以将影片无线传输到电视或投影仪上观看。总的来说，Infuse 是一款不错的媒体播放器，能满足大多数人的需求。</p>
</blockquote>
<ul>
 <li><a href="https://apps.apple.com/cn/app/infuse-%E6%99%BA%E8%83%BD%E8%A7%86%E9%A2%91%E6%92%AD%E6%94%BE%E5%99%A8/id1136220934">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iBmgR1ehjhaj">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1i-7Lk3I43YumRbG0KcmbcQ?pwd=uit5">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/Ck2xrFP31Zo">阿里云</a> 提取码<code>04ho</code></li>
</ul>
<h2 id="dbeaver">DBeaver</h2>
<blockquote>
 <p>DBeaver 是一款强大的数据库管理工具，可以轻松连接和管理多种数据库。它可以实现可视化编辑表结构、查询语句编写、导入导出数据等功能，对于数据库开发和管理工作有很大帮助。总的来说，DBeaver 是一款实用的数据库管理软件，值得推荐给数据库相关工作者。</p>
</blockquote>
<ul>
 <li><a href="https://dbeaver.io/files/dbeaver-ce-latest-macos-x86_64.dmg">官网</a></li>
 <li><a href="https://pan.baidu.com/s/1oMIzQkhtI1y6EKB-DKKM0g?pwd=bep4">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/AqkSey65hoM">阿里云</a> 提取码<code>k3n0</code></li>
</ul>
<h2 id="switchhosts">SwitchHosts</h2>
<blockquote>
 <p>SwitchHosts 是一款免费开源的 hosts 文件管理工具，可以便捷地进行 hosts 文件替换和管理。它支持多环境切换，可以帮助开发者调试网站。此外，SwitchHosts 还支持备份和恢复 hosts 文件，可以有效避免误操作。总的来说，SwitchHosts 是一款非常好用的 hosts 文件管理软件，适合网络管理员和开发者们使用。</p>
</blockquote>
<ul>
 <li><a href="https://github.com/oldj/SwitchHosts/releases">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iKvLQ1efcrfa">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1sRROGxfXAsWn9RhbXhgeHg?pwd=pkxa">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/SHBfjZNV8jB">阿里云</a> 提取码<code>3xc0</code></li>
</ul>
<h2 id="navicat-premium">Navicat Premium</h2>
<blockquote>
 <p>Navicat Premium 是一款数据库管理工具，支持单一程序同时连接多种类型的数据库，包括 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 等。它具有设计简洁、操作简单的特点，可以方便用户查询、设计、优化和管理数据库。总之，Navicat Premium 是一款强大而又容易上手的数据库管理软件，推荐给大家使用。</p>
</blockquote>
<ul>
 <li><a href="https://www.navicat.com/download/direct-download?product=navicat_premium_en.dmg&amp;location=1">官网</a></li>
 <li><a href="https://pan.baidu.com/s/1RjL-n401ZMxTlwvtKQLq4A?pwd=1531">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/UC4kAemVXVf">阿里云</a> 提取码<code>4uf3</code></li>
</ul>
<h2 id="dropover">Dropover</h2>
<blockquote>
 <p>Dropover 是一款用于文件临时存储的实用工具，可以把常用的文件放到屏幕上，方便快速拖拽和使用。它具有自定义透明度和阴影效果的功能，可以随心所欲地调整样式。此外，Dropover 还支持快捷键启动，方便用户快速调出文件。总的来说，Dropover 是一款简单易用的文件暂存工具，值得推荐。</p>
</blockquote>
<ul>
 <li><a href="https://itunes.apple.com/us/app/dropover/id1355679052?mt=12">官网</a></li>
 <li>[暂未提供]</li>
</ul>
<h2 id="paste">Paste</h2>
<blockquote>
 <p>Paste 是一款出色的剪切板管理工具，可以帮助用户保存复制过的文字、图片、链接等内容，便于再次使用。它支持历史记录回溯，可以随时查找之前的复制内容，避免重复劳动。此外，Paste 还支持云同步功能，可以在不同设备之间同步剪切板内容。总之，Paste 是一款非常好用的剪切板管理工具，非常适合长期依赖复制粘贴操作的人使用。</p>
</blockquote>
<ul>
 <li><a href="https://pasteapp.io/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iE6JL1eeoffe">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1okTbLALK3zeWPqt58EKS7A?pwd=c5gs">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/FxC3Bhxqmoo">阿里云</a> 提取码<code>2d8e</code></li>
</ul>
<h2 id="securecrt">SecureCRT</h2>
<blockquote>
 <p>SecureCRT 是一款终端模拟软件，能够为用户提供 SSH 协议的接入能力，从而让用户方便地连接到远程服务器。它可以提供一些非常实用的功能，例如支持多标签页、自动完成、脚本录制、端口转发等，帮助用户提高生产力。总的来说，SecureCRT 是 Mac 上的一款专业级终端模拟工具，适合专业人士使用。</p>
</blockquote>
<ul>
 <li><a href="https://www.vandyke.com/cgi-bin/download_form_1.php?pid=scrt_macx64_941">官网</a></li>
 <li><a href="https://plutox.lanzout.com/i9Rpo1ehjgyh">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/11RIc3njcqyJyDXvMtdofgw?pwd=496h">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/p3cv9tBmb2b">阿里云</a> 提取码<code>81fp</code></li>
</ul>
<h2 id="bitwarden">Bitwarden</h2>
<blockquote>
 <p>Bitwarden 是一个跨平台密码管理器，可以帮助用户生成和保存复杂的密码，并在需要时自动填写账户登录信息。它支持双因素身份验证和指纹识别，可以保护用户的账号安全。此外，Bitwarden 还支持跨平台同步，可以在多台设备上共享密码信息。总的来说，Bitwarden 是一款好用的密码管理工具，推荐给需要频繁登陆各种账户的用户使用。</p>
</blockquote>
<ul>
 <li><a href="https://itunes.apple.com/app/bitwarden/id1352778147">官网</a></li>
 <li><a href="https://pan.baidu.com/s/1qBhsDySoi6k1CuyeewPxGA?pwd=sjri">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/nYWsuATzHFL">阿里云</a> 提取码<code>f4v0</code></li>
</ul>
<h2 id="joplin">Joplin</h2>
<blockquote>
 <p>Joplin 是一款笔记和待办事项管理软件，具有离线存储和 Markdown 编辑功能。它采用笔记本的形式组织笔记，可以搜索笔记并添加标签。此外，Joplin 还支持多平台同步，可在多个设备上无缝访问笔记。总的来说，Joplin 是一款功能强大的笔记应用，对于需要整理思绪的人来说是非常有用的。</p>
</blockquote>
<ul>
 <li><a href="https://joplinapp.org/download/#">官网</a></li>
 <li><a href="https://pan.baidu.com/s/14yQsw_A0jO4xG4PqOHIamw?pwd=5qmj">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/n6rVDf4cyAW">阿里云</a> 提取码<code>xe57</code></li>
</ul>
<h2 id="傲软录屏">傲软录屏</h2>
<blockquote>
 <p>傲软录屏是一款视频捕捉工具，可以录制屏幕活动、游戏过程、摄像头录像等。它具备灵活的录制设置，支持麦克风声音输入和屏幕截图功能，方便用户快速记录重要时刻。总的来说，傲软录屏是一款功能齐全的录屏软件，适用于教学演示、游戏直播、娱乐制作等各种场景。</p>
</blockquote>
<ul>
 <li><a href="https://download.apowersoft.cn/down.php?softid=apowerrec">官网</a></li>
</ul>
<h2 id="apowermirror">ApowerMirror</h2>
<blockquote>
 <p>ApowerMirror 是一个优秀的屏幕镜像和屏幕共享应用程序，可以让您把 Android 或 iOS 设备与 PC 或 Mac 配对，在大屏幕上展示手机画面。它可以实现实时流式传输高分辨率屏幕画面以及录制屏幕操作等强大功能，是教学演示的理想选择。总之，ApowerMirror是一款实用性很高的投屏软件，适合家庭聚会、商务会议等多种场合。</p>
</blockquote>
<ul>
 <li><a href="https://download.apowersoft.com/down.php?softid=apowermirror">官网</a></li>
</ul>
<h2 id="picgo">PicGo</h2>
<blockquote>
 <p>PicGo 是一个专业的图床管理和图片上传工具，可以帮助您把图片上传到图床，并快速获取图片链接。它提供了很多贴心的功能，如一键上传、实时预览、批量处理等，使图片上传变得更容易。总的来说，PicGo 是一个相当不错的图片上传助手，值得尝试。</p>
</blockquote>
<ul>
 <li><a href="https://github.com/Molunerfinn/PicGo/releases">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iwclE1ehjgsb">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1hDulKMcrM5KBEqgzZ1mBXA?pwd=kh2r">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/q3Fhx8sS5P1">阿里云</a> 提取码<code>1rt7</code></li>
</ul>
<h2 id="oss-browser">oss-browser</h2>
<blockquote>
 <p>oss-browser 是阿里云提供的 Oss 浏览器，允许您从本地计算机上传、下载、查看和管理阿里云 OSS 中的对象存储。它采用类似 Windows 资源管理器的设计，为您提供直观的界面来组织您的数据。总的来说，oss-browser 是一个轻量级且易于使用的 OSS 图形化管理工具，适用于日常的 OSS 使用。</p>
</blockquote>
<ul>
 <li><a href="https://github.com/aliyun/oss-browser/releases/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/ikyFP1ehjgfi">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1xuXBQjRfQQcpibYLx0LI8g?pwd=k0rb">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/RGVzkHBdDfw">阿里云</a> 提取码<code>pr28</code></li>
</ul>
<h2 id="xterminal">XTerminal</h2>
<blockquote>
 <p>XTerminal 是一个跨平台的终端仿真程序，支持 Linux 和 macOS 系统，您可以使用它通过 SSH 访问远程主机，并执行命令行操作。它还提供了一些实用功能，例如书签、高亮语法等，使您的工作更加高效。总之，XTerminal 是一个优秀的终端模拟工具，可以为专业技术人员提供强大的远程访问能力。</p>
</blockquote>
<ul>
 <li><a href="https://www.xterminal.cn/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/id6tP1ehjfxa">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1pWVY_cQWn89UcXuEjJZVHA?pwd=8a3e">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/WqE62vVUjQw">阿里云</a> 提取码<code>p93m</code></li>
</ul>
<h2 id="beyond-compare">Beyond Compare</h2>
<blockquote>
 <p>Beyond Compare 是一款强大的文件和目录比较工具，可以发现文本和二进制文件之间的差异，并提供同步、合并等功能。它支持多种格式的文件比较，让您无需担心编码问题。总之，Beyond Compare 是一个功能强大的比较和合并工具，适合在多个版本中同步代码或文件。</p>
</blockquote>
<ul>
 <li><a href="https://www.scootersoftware.com/files/BCompareOSX-4.4.7.28397.zip">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iukQ01ebhghc">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/1G4Au3OIzvVcucghs46s8yw?pwd=aj3d">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/WDoNnkq5rwW">阿里云</a> 提取码<code>32ta</code></li>
</ul>
<h2 id="utools">utools</h2>
<blockquote>
 <p>Utools 是一个插件化的桌面应用程序，它支持大量插件，可以扩展和优化您的工作流程。您可以通过输入插件命令来快速启动应用程序或设置系统参数，实现快速操作。总的来说，Utools 是一个方便实用的小工具箱，帮助您提高工作效率。</p>
</blockquote>
<ul>
 <li><a href="https://www.u.tools/">官网</a></li>
 <li><a href="https://plutox.lanzout.com/i1SIl1ehjfli">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/10g7105hJzbxfLWaWXg_Fog?pwd=cwhv">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/27hbkcdRVZh">阿里云</a> 提取码<code>6uo0</code></li>
</ul>
<h2 id="charles">Charles</h2>
<blockquote>
 <p>Charles 是一款功能强大的 HTTP 抓包工具，可以截取和分析网络请求。它支持 SSL 解密和重发功能，可以有效地帮助您理解复杂的应用程序和 API 调用。总的来说，Charles 是一款面向开发者的出色调试工具，可以帮助您更好地掌握 Web 应用程序的运行机制。</p>
</blockquote>
<ul>
 <li><a href="https://www.charlesproxy.com/download/latest-release/#">官网</a></li>
 <li><a href="https://plutox.lanzout.com/iUpxF1ep4lpg">蓝奏云</a></li>
 <li><a href="https://pan.baidu.com/s/17VMMfX-wd1aFBnjTMU3lvA?pwd=a5ci">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/UADnhPUaQkS">阿里云</a> 提取码<code>s3w8</code></li>
</ul>
<h2 id="pdfelement">PDFelement</h2>
<blockquote>
 <p>PDFelement 是一款功能强大的 PDF 编辑工具，提供完整的 PDF 解决方案，支持文档编辑、OCR 文字识别、电子签名、表格填充等众多功能。总体来说，PDFelement 是一款实用且易于使用的 PDF 工具，适合在日常工作中处理 PDF 文档。</p>
</blockquote>
<ul>
 <li><a href="https://download.wondershare.com/mac-pdfelement_full5237.dmg">官网</a></li>
 <li><a href="https://pan.baidu.com/s/1DBtQrcVY16RflwrVTognTQ?pwd=7vb0">百度云</a></li>
 <li><a href="https://www.aliyundrive.com/s/pBwgHY6yuUK">阿里云</a> 提取码<code>1z3s</code></li>
</ul>
<hr>
<h2 id="未完待续">未完待续...</h2>]]></description><guid isPermaLink="false">/archives/Mac_Software</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Ffa2949d63f4211cfbc7d1a65c6fafa87.webp&amp;size=m" type="image/jpeg" length="389390"/><category>软件</category><pubDate>Mon, 13 Nov 2023 16:35:00 GMT</pubDate></item><item><title><![CDATA[Docker镜像加速]]></title><link>https://blog.xkzs.cc/archives/Docker%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=Docker%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F&amp;url=/archives/Docker%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F" width="1" height="1" alt="" style="opacity:0;">
<p style="">我们在拉取镜像的时候经常会发现拉取的特别慢，或者拉取失败，这是因为国内从 Docker Hub 拉取镜像有时会遇到困难，此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务。</p>
<pre><code>vim /etc/docker/daemon.json </code></pre>
<pre><code>{
  "experimental": false,
  "builder": {
    "gc": {
      "enabled": true,
      "defaultKeepStorage": "20GB"
    }
  },
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "http://f1361db2.m.daocloud.io",
    "https://mirror.baidubce.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://***需要自己注册**.mirror.aliyuncs.com"
  ],
  "features": {
    "buildkit": true
  }
}</code></pre>
<p style="">加载配置</p>
<pre><code>sudo systemctl daemon-reload
sudo systemctl restart docker</code></pre>
<p style="">检查配置</p>
<pre><code>docker info</code></pre>
<p style="">可以看到以下结果</p>
<p style=""><code>Registry Mirrors:
  <br>https://hub-mirror.c.163.com/
  <br>http://f1361db2.m.daocloud.io/
  <br>https://docker.mirrors.ustc.edu.cn/
  <br>https://*******.mirror.aliyuncs.com/</code></p>
<p style="">说明配置成功，至此 愉快的拉取你想要的镜像吧。</p>]]></description><guid isPermaLink="false">/archives/Docker%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fa4cc2f25873d8750110426dbf03899d6.webp&amp;size=m" type="image/jpeg" length="363680"/><category>Linux</category><category>Docker</category><pubDate>Sun, 15 May 2022 13:45:00 GMT</pubDate></item><item><title><![CDATA[Linux 脚本分析IP并加黑名单]]></title><link>https://blog.xkzs.cc/archives/Linux%E8%84%9A%E6%9C%AC%E5%88%86%E6%9E%90IP%E5%B9%B6%E5%8A%A0%E9%BB%91%E5%90%8D%E5%8D%95</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=Linux%20%E8%84%9A%E6%9C%AC%E5%88%86%E6%9E%90IP%E5%B9%B6%E5%8A%A0%E9%BB%91%E5%90%8D%E5%8D%95&amp;url=/archives/Linux%E8%84%9A%E6%9C%AC%E5%88%86%E6%9E%90IP%E5%B9%B6%E5%8A%A0%E9%BB%91%E5%90%8D%E5%8D%95" width="1" height="1" alt="" style="opacity:0;"><!-- wp:paragraph -->
<p>在日常使用中，我们经常会发现虽然改了端口，禁止了root的ssh登录权限。但是只要别人不懒的话，随便用工具扫描端口还是很容易扫描出来的之后你就会发现 你的机器无时不刻在有人尝试暴力破解。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>我们可以通过 lastb查看历史登陆失败的记录</p>
<!-- /wp:paragraph -->
<!-- wp:code -->
<pre class="wp-block-code"><code>lastb #查看全部记录
#或者
lastb -n 30 #查看最新的30条记录</code></pre>
<!-- /wp:code -->
<!-- wp:paragraph -->
<p>我们可以通过脚本将多次尝试登录，并失败的IP加入黑名单</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>脚本如下：/opt/black_host.sh</p>
<!-- /wp:paragraph -->
<!-- wp:code -->
<pre class="wp-block-code"><code>#!/bin/bash
#Denyhosts SHELL SCRIPT
# 分析登录日志文件，筛选失败登录并统计次数存入文件备用
cat /var/log/secure | awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' &gt;/root/Denyhosts.txt
# 定义允许失败登录的次数
DEFINE="10"
# 读取文件，并把条件范围内的IP写到hosts.deny中，实现黑名单效果
for i in `cat /root/Denyhosts.txt`
do
  IP=`echo $i|awk -F= '{print $1}'`
  NUM=`echo $i|awk -F= '{print $2}'`
  if [ $NUM -gt $DEFINE ]
  then
    ipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l`
    if [ $ipExists -lt 1 ]
    then
      echo "sshd:$IP" &gt;&gt; /etc/hosts.deny
    fi
  fi
done</code></pre>
<!-- /wp:code -->
<!-- wp:paragraph -->
<p>黑名单文件位置为<code>/etc/hosts.deny</code></p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>我们可以创建一个计划任务</p>
<!-- /wp:paragraph -->
<!-- wp:code -->
<pre class="wp-block-code"><code>*/10 * * * * /bin/bash /opt/black_host.sh
#每10分钟会执行一遍</code></pre>
<!-- /wp:code -->
<!-- wp:paragraph -->
<p>完成，至此你的机器安全更上一层。</p>
<!-- /wp:paragraph -->]]></description><guid isPermaLink="false">/archives/Linux%E8%84%9A%E6%9C%AC%E5%88%86%E6%9E%90IP%E5%B9%B6%E5%8A%A0%E9%BB%91%E5%90%8D%E5%8D%95</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fdfbf6cf878dc186570e2e06ff2445777.webp&amp;size=m" type="image/jpeg" length="189282"/><category>Linux</category><pubDate>Sun, 15 May 2022 13:26:00 GMT</pubDate></item><item><title><![CDATA[常用正则表达式]]></title><link>https://blog.xkzs.cc/archives/%E5%B8%B8%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=%E5%B8%B8%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F&amp;url=/archives/%E5%B8%B8%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F" width="1" height="1" alt="" style="opacity:0;"><!-- wp:paragraph -->
<p>匹配中文字符的正则表达式： [\u4e00-\u9fa5]</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：匹配中文还真是个头疼的事，有了这个表达式就好办了</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配双字节字符(包括汉字在内)：[^\x00-\xff]</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配空白行的正则表达式：\n\s*\r</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：可以用来删除空白行</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配HTML标记的正则表达式：&lt;(\S*?)[^&gt;]*&gt;.*?&lt;/\1&gt;|&lt;.*? /&gt;</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配首尾空白字符的正则表达式：^\s*|\s*$</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：表单验证时很实用</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配网址URL的正则表达式：[a-zA-z]+://[^\s]*</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：网上流传的版本功能很有限，上面这个基本可以满足需求</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：表单验证时很实用</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配国内电话号码：\d{3}-\d{8}|\d{4}-\d{7}</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：匹配形式如 0511-4405222 或 021-87888822</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配腾讯QQ号：[1-9][0-9]{4,}</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：腾讯QQ号从10000开始</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配中国邮政编码：[1-9]\d{5}(?!\d)</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：中国邮政编码为6位数字</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配身份证：\d{15}|\d{18}</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：中国的身份证为15位或18位</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配ip地址：\d+\.\d+\.\d+\.\d+</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：提取ip地址时有用</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配特定数字：</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^[1-9]\d*$　 　 //匹配正整数</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^-[1-9]\d*$ 　 //匹配负整数</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^-?[1-9]\d*$　　 //匹配整数</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^[1-9]\d*|0$　 //匹配非负整数（正整数 + 0）</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^-[1-9]\d*|0$　　 //匹配非正整数（负整数 + 0）</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$　　 //匹配正浮点数</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$　 //匹配负浮点数</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$　 //匹配浮点数</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$　　 //匹配非负浮点数（正浮点数 + 0）</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$　　//匹配非正浮点数（负浮点数 + 0）</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：处理大量数据时有用，具体应用时注意修正</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>匹配特定字符串：</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>^\w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>评注：最基本也是最常用的一些表达式</p>
<!-- /wp:paragraph -->]]></description><guid isPermaLink="false">/archives/%E5%B8%B8%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fb85077a095e7b219f9a62eb0d5be8a17.webp&amp;size=m" type="image/jpeg" length="128908"/><category>Regular</category><category>Linux</category><pubDate>Sun, 15 May 2022 11:23:00 GMT</pubDate></item><item><title><![CDATA[使用mailx 发送邮件和附件]]></title><link>https://blog.xkzs.cc/archives/%E4%BD%BF%E7%94%A8mailx%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E5%92%8C%E9%99%84%E4%BB%B6</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=%E4%BD%BF%E7%94%A8mailx%20%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E5%92%8C%E9%99%84%E4%BB%B6&amp;url=/archives/%E4%BD%BF%E7%94%A8mailx%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E5%92%8C%E9%99%84%E4%BB%B6" width="1" height="1" alt="" style="opacity:0;"><!-- wp:heading {"level":3} -->
<h3>安装mailx</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>yum install -y mailx</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>配置发送右键</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>vim /etc/mail.mc 加入一下配置
set from=xxxxxxxxxxxxxxxx@gmail.com 发送使用的邮箱用户
set smtp=smtps://smtp.gmail.com:465 gmail的smtp邮件服务器
set smtp-auth=login验证方式，默认就是login
set smtp-auth-user=xxxxxxxxxxx@gmail.com：邮箱验证用户
set smtp-auth-password=xxxxxxxxxxxxxxxxx：设备专用密码
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/</code></pre>
<!-- /wp:code -->
<!-- wp:paragraph -->
<p>确保gmail开启了两步验证
 <br>
 申请应用专用密码
 <br>
 发送测试邮件</p>
<!-- /wp:paragraph -->
<!-- wp:code -->
<pre class="wp-block-code"><code>echo "Your message" | mail -v -s "Message Subject" xxxxxxxx@gmail.com</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>备份文件</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>#!/bin/sh

#保存时间（天）

save_days=1

#删除指定目录中大于指定时间的.tar.gz文件（用以删除上次打包的备份）

find /opt/Bitwarden.backup/Vault*.tar.gz -mtime +$save_days -exec rm -rf {} \;

#构建数据库文件名称

d=`date "+%Y-%m-%d"`

#注意-c参数，到/opt/bitwarden目录下打包data文件夹，并将打包的文件保存到/opt/Bitwarden.backup/目录下

tar -czvf  /opt/Bitwarden.backup/Vault-$d.tar.gz --exclude=/opt/docker/appdata/bitwarden/sends/* --exclude=/opt/docker/appdata/bitwarden/icon_cache/* /opt/docker/appdata/bitwarden

#发送邮件的标题和内容

title="Vault-Backup-$d"

content="Hello，Master！Vault backup has been completed！Backup Time：$d"

#用自带的mail发邮件，需要配置/etc/mail.rc，在最后添加smtp信息，需要使用25端口

echo "$content" | mail -s "$title" -a /opt/Bitwarden.backup/Vault-$d.tar.gz xxxxxxxx@gmail.com

#退出当前脚本
exit</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>设置定时任务</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>30 9 * * * sh /opt/backup.sh &gt; /dev/null</code></pre>
<!-- /wp:code -->
<!-- wp:paragraph -->
<p>到此,每天9:30 你会准时收到一份备份邮件~</p>
<!-- /wp:paragraph -->]]></description><guid isPermaLink="false">/archives/%E4%BD%BF%E7%94%A8mailx%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E5%92%8C%E9%99%84%E4%BB%B6</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2916007ebcd7484ebe84e72439a3e48a.webp&amp;size=m" type="image/jpeg" length="506338"/><category>Mail</category><category>Linux</category><pubDate>Wed, 4 May 2022 08:43:00 GMT</pubDate></item><item><title><![CDATA[使用acme自动化申请免费的证书]]></title><link>https://blog.xkzs.cc/archives/%E4%BD%BF%E7%94%A8acme%E8%87%AA%E5%8A%A8%E5%8C%96%E7%94%B3%E8%AF%B7%E5%85%8D%E8%B4%B9%E7%9A%84%E8%AF%81%E4%B9%A6</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=%E4%BD%BF%E7%94%A8acme%E8%87%AA%E5%8A%A8%E5%8C%96%E7%94%B3%E8%AF%B7%E5%85%8D%E8%B4%B9%E7%9A%84%E8%AF%81%E4%B9%A6&amp;url=/archives/%E4%BD%BF%E7%94%A8acme%E8%87%AA%E5%8A%A8%E5%8C%96%E7%94%B3%E8%AF%B7%E5%85%8D%E8%B4%B9%E7%9A%84%E8%AF%81%E4%B9%A6" width="1" height="1" alt="" style="opacity:0;">
<blockquote>
 <p style="">本教程只是描述了基础的acme用法,还有很多其它用法目前用不到,所以没有介绍.</p>
 <p style="">具体相关教程可看开源<a target="_blank" rel="noopener noreferrer nofollow" href="https://github.com/acmesh-official/acme.sh">项目地址</a></p>
</blockquote>
<h3 style="" id="%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7%E5%B9%B6%E5%AE%89%E8%A3%85">下载工具并安装</h3>
<pre><code>#下面两种方式都可以.

curl https://get.acme.sh | sh

wget -O -  https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online -m {邮箱}

#安装路径默认隐藏 可以ll -a 看到</code></pre>
<h3 style="" id="%E5%AE%89%E8%A3%85%E5%A4%9A%E5%8A%9F%E8%83%BD%E7%9A%84%E7%BD%91%E7%BB%9C%E5%B7%A5%E5%85%B7socat">安装多功能的网络工具socat</h3>
<pre><code>yum install socat -y</code></pre>
<h3 style="" id="%E8%AE%BE%E7%BD%AE%E5%BF%AB%E6%8D%B7%E9%94%AE">设置快捷键</h3>
<pre><code>alias acme.sh=~/.acme.sh/acme.sh</code></pre>
<h3 style="" id="%E5%8D%87%E7%BA%A7acme%E5%92%8C%E5%BC%80%E5%90%AF%E8%87%AA%E5%8A%A8%E5%8D%87%E7%BA%A7acme">升级acme和开启自动升级acme</h3>
<pre><code>#升级
acme.sh --upgrade

#自动升级
acme.sh --upgrade --auto-upgrade

#关闭自动升级
acme.sh --upgrade --auto-upgrade 0</code></pre>
<h3 style="" id="%E6%B3%A8%E5%86%8C%E9%82%AE%E7%AE%B1">注册邮箱</h3>
<pre><code>#使用真实邮箱成功率更高
~/.acme.sh/acme.sh --register-account -m {邮箱}</code></pre>
<h2 style="" id="%E4%B8%8B%E9%9D%A2%E4%BB%8B%E7%BB%8D%E4%B8%A4%E7%A7%8D%E7%94%B3%E8%AF%B7%E8%AF%81%E4%B9%A6%E7%9A%84%E6%96%B9%E6%B3%95">下面介绍两种申请证书的方法</h2>
<h3 style="" id="%E7%AC%AC%E4%B8%80%E7%A7%8D%E6%96%B9%E6%B3%95-%E9%9C%80%E8%A6%8180%E7%AB%AF%E5%8F%A3-http-%E9%A2%81%E5%8F%91">第一种方法 需要80端口 http 颁发</h3>
<pre><code>~/.acme.sh/acme.sh --issue -d {domain name} --standalone
#创建了快捷键的可以直接使用acme.sh
acme.sh --issue -d {domain name} --standalone</code></pre>
<h3 style="" id="%E7%AC%AC%E4%BA%8C%E7%A7%8D-%EF%BC%88%E6%8E%A8%E8%8D%90%EF%BC%89dns-api-%E8%87%AA%E5%8A%A8%E9%A2%81%E5%8F%91">第二种 （推荐）dns api 自动颁发</h3>
<pre><code>#申请ali_key

export Ali_Key="****"
export Ali_Secret="*****"

acme.sh --issue --dns dns_ali -d {domain name}</code></pre>
<h3 style="" id="%E5%AE%89%E8%A3%85%E8%AF%81%E4%B9%A6">安装证书</h3>
<pre><code>#安装路径可以自定义,我依照自己的习惯安装到了这里
~/.acme.sh/acme.sh --installcert -d {domain name} --key-file /app/openresty/nginx/conf/ssl/{domain name}.private.key --fullchain-file /app/openresty/nginx/conf/ssl/{domain name}.cert.crt --reloadcmd     "service nginx force-reload"</code></pre>
<h3 style="" id="%E5%AE%8C%E6%88%90%E4%BB%A5%E4%B8%8A%E6%AD%A5%E9%AA%A4%E5%90%8E%E4%BC%9A%E4%BB%A5%E5%BD%93%E5%89%8D%E7%94%A8%E6%88%B7%E8%87%AA%E5%8A%A8%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1">完成以上步骤后会以当前用户自动创建一个计划任务</h3>
<pre><code>#每天检测一次证书
57 0 * * * "/home/{当前用户}/.acme.sh"/acme.sh --cron --home "/home/{当前用户}/.acme.sh" &gt; /dev/null

#我们可以手动创建一个强制申请证书
0 10 31 */2 * "/home/{当前用户}/.acme.sh"/acme.sh --cron --force --home "/home/{当前用户}/.acme.sh" &gt; /dev/null</code></pre>
<p style="">至此,自动化申请证书配置完毕~开始享受吧~</p>]]></description><guid isPermaLink="false">/archives/%E4%BD%BF%E7%94%A8acme%E8%87%AA%E5%8A%A8%E5%8C%96%E7%94%B3%E8%AF%B7%E5%85%8D%E8%B4%B9%E7%9A%84%E8%AF%81%E4%B9%A6</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Ff42c879627139f1a5030a18ffc81d88d.webp&amp;size=m" type="image/jpeg" length="278888"/><category>Linux</category><category>ACME</category><pubDate>Wed, 4 May 2022 08:23:00 GMT</pubDate></item><item><title><![CDATA[使用Docker搭建Bitwarden密码存储服务器并定时备份数据库]]></title><link>https://blog.xkzs.cc/archives/%E4%BD%BF%E7%94%A8Docker%E6%90%AD%E5%BB%BABitwarden%E5%AF%86%E7%A0%81%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B9%B6%E5%AE%9A%E6%97%B6%E5%A4%87%E4%BB%BD%E6%95%B0%E6%8D%AE%E5%BA%93</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=%E4%BD%BF%E7%94%A8Docker%E6%90%AD%E5%BB%BABitwarden%E5%AF%86%E7%A0%81%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B9%B6%E5%AE%9A%E6%97%B6%E5%A4%87%E4%BB%BD%E6%95%B0%E6%8D%AE%E5%BA%93&amp;url=/archives/%E4%BD%BF%E7%94%A8Docker%E6%90%AD%E5%BB%BABitwarden%E5%AF%86%E7%A0%81%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B9%B6%E5%AE%9A%E6%97%B6%E5%A4%87%E4%BB%BD%E6%95%B0%E6%8D%AE%E5%BA%93" width="1" height="1" alt="" style="opacity:0;">
<blockquote>
 <p style="">个人使用，仅供参考。</p>
</blockquote>
<h2 style="" id="%E5%87%86%E5%A4%87">准备</h2>
<p style="">安装 Docker</p>
<p style="">在终端中运行下面的命令安装 Docker。</p>
<h3 style="" id="%E5%90%AF%E5%8A%A8docker">启动docker</h3>
<pre><code>sudo service docker start</code></pre>
<h3 style="" id="%E5%AE%89%E8%A3%85-docker-compose">安装 Docker Compose</h3>
<p style="">Docker Compose 是 Docker 官方编排（Orchestration）项目之一，负责快速在集群中部署分布式应用，本文使用 docker-compose 来管理服务。</p>
<h3 style="" id="%E5%9B%BD%E5%86%85daocloud.io%E9%95%9C%E5%83%8F%E5%BF%AB%E9%80%9F%E5%AE%89%E8%A3%85">国内daocloud.io镜像快速安装</h3>
<pre><code>curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-uname -s-uname -m &gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose</code></pre>
<h2 style="" id="%E9%83%A8%E7%BD%B2">部署</h2>
<p style="">在用户主目录创建bitwarden目录</p>
<pre><code>cd /opt/ &amp;&amp; mkdir -p docker/bitwarden &amp;&amp; cd /opt/docker/bitwarden
</code></pre>
<pre><code>pwd
#确认目录为
/opt/docker/bitwarden</code></pre>
<p style="">方法一：
 <br>
 在bitwarden目录创建docker-compose.yml文件</p>
<p style="">vim docker-compose.yml</p>
<p style="">在docker-compose.yml写入一下配置，参考官方wiki</p>
<pre><code>version: "3"

services:
  bitwarden:
    image: vaultwarden/server
    container_name: vaultwarden
    restart: always
    ports:
        - "127.0.0.1:888:80" #将888 端口映射到镜像80端口
        - "127.0.0.1:999:3012"
    volumes:
      - ./bw-data:/data
    environment:
      PGID: 1000
      PUID: 1000
      TZ: "Asia/Shanghai" #设置时区
      SERVER_ADMIN_EMAIL: 'pluto@xkzs.cc' #设置管理邮箱
      INVITATIONS_ALLOWED: 'true' #开启邀请
      ADMIN_TOKEN: '*******'
      WEBSOCKET_ENABLED: "true" #开启WebSocket
      SIGNUPS_ALLOWED: "false" #开启注册，自己注册后改成fale
      WEB_VAULT_ENABLED: "true" #web客户端</code></pre>
<h3 style="" id="%E8%BF%90%E8%A1%8C%E6%9C%8D%E5%8A%A1">运行服务</h3>
<p style="">docker-compose up -d #运行服务
 <br>
 docker-compose down #关闭服务
 <br>
 docker-compose restart #重启服务</p>
<p style="">方法二：</p>
<pre><code>docker run \
-itd \
-e PGID=1000 \
-e PUID=1000 \
--name='bitwarden' \
-e TZ=Asia/Shanghai \
-e 'SERVER_ADMIN_EMAIL'='pluto@xkzs.cc' \
-e 'SIGNUPS_ALLOWED'='false' \
-e 'INVITATIONS_ALLOWED'='true' \
-e 'WEBSOCKET_ENABLED'='true' \
-e 'ADMIN_TOKEN'='' \
-p '888:80/tcp' \
-p '999:3012' \
-v '/xingkong/docker/appdata/bitwarden':'/data':'rw' 'bitwardenrs/server:latest'</code></pre>
<h2 style="" id="nginx-%E5%8F%8D%E4%BB%A3">Nginx 反代</h2>
<p style="">我是通过Nginx代理实例，也可以使用Caddy、Apache等做反向代理，因为我的服务器已经装过LNMP，直接用lnmp vhost add就能建立vhost并配置好https，为了安全强烈推荐配置HTTPS，反向代理配置可以参考项目wiki</p>
<p style="">在你的Nginx插入一下配置</p>
<pre><code>    location / {
        proxy_pass http://127.0.0.1:888;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /notifications/hub {
        proxy_pass http://127.0.0.1:999;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /notifications/hub/negotiate {
        proxy_pass http://127.0.0.1:888;
    }
    # 加入robots.txt 防止搜索引擎爬虫抓取
    location = /robots.txt {
        root /home/wwwroot/Bitwarden;
    }</code></pre>
<p style="">在根目录/opt/docker/bitwarden创建一个robots.txt 文件
 <br>
 写入以下内容禁止搜索引擎爬虫抓取</p>
<pre><code>User-agent: *
Disallow: /</code></pre>
<h2 style="" id="%E5%A4%87%E4%BB%BD">备份</h2>
<pre><code>#!/bin/bash
export LC_ALL=C

now=$(date +"%Y%m%d-%H%M%S")
parent_dir="/home/&lt;USER&gt;/bitwarden/bw-data"
backups_dir="${parent_dir}/backups"
log_file="${backups_dir}/backup-progress.log.${now}"
tmp_sqlite_backup="backups/db.sqlite3.${now}"
archive="backups/backup.tar.gz.${now}"

error () {
  printf "%s: %s\n" "$(basename "${BASH_SOURCE}")" "${1}" &gt;&amp;2
  exit 1
}

trap 'error "An unexpected error occurred."' ERR

take_backup () {
  cd "${parent_dir}"

  sqlite3 db.sqlite3 ".backup '${tmp_sqlite_backup}'"
  /bin/tar czf "${archive}" "${tmp_sqlite_backup}" attachments

  rm "${tmp_sqlite_backup}"

  find "${backups_dir}/" -type f -mtime +30 -exec rm {} \;
}

printf "\n======================================================================="
printf "\nBitwarden Backup"
printf "\n======================================================================="
printf "\nBackup in progress..."

take_backup 2&gt; "${log_file}"

if [[ -s "${log_file}" ]]
then
  printf "\nBackup failure! Check ${log_file} for more information."
  printf "\n=======================================================================\n\n"
else
  rm "${log_file}"
  printf "...SUCCESS!\n"
  printf "Backup created at ${backups_dir}/backup.tar.gz.${now}"
  printf "\n=======================================================================\n\n"
fi</code></pre>
<pre><code>#添加计划任务
30 9 * * * sh /opt/backup.sh &gt; /dev/null
#每天9:30自动备份</code></pre>
<p style=""></p>]]></description><guid isPermaLink="false">/archives/%E4%BD%BF%E7%94%A8Docker%E6%90%AD%E5%BB%BABitwarden%E5%AF%86%E7%A0%81%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B9%B6%E5%AE%9A%E6%97%B6%E5%A4%87%E4%BB%BD%E6%95%B0%E6%8D%AE%E5%BA%93</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fd602ca8866871db8ab090ad8e2672c57.webp&amp;size=m" type="image/jpeg" length="893790"/><category>Linux</category><category>Docker</category><pubDate>Wed, 4 May 2022 05:19:00 GMT</pubDate></item><item><title><![CDATA[Linux限制远程登录尝试密码次数及锁定时间]]></title><link>https://blog.xkzs.cc/archives/Linux%E9%99%90%E5%88%B6%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95%E5%B0%9D%E8%AF%95%E5%AF%86%E7%A0%81%E6%AC%A1%E6%95%B0%E5%8F%8A%E9%94%81%E5%AE%9A%E6%97%B6%E9%97%B4</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=Linux%E9%99%90%E5%88%B6%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95%E5%B0%9D%E8%AF%95%E5%AF%86%E7%A0%81%E6%AC%A1%E6%95%B0%E5%8F%8A%E9%94%81%E5%AE%9A%E6%97%B6%E9%97%B4&amp;url=/archives/Linux%E9%99%90%E5%88%B6%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95%E5%B0%9D%E8%AF%95%E5%AF%86%E7%A0%81%E6%AC%A1%E6%95%B0%E5%8F%8A%E9%94%81%E5%AE%9A%E6%97%B6%E9%97%B4" width="1" height="1" alt="" style="opacity:0;"><!-- wp:heading {"level":3} -->
<h3><strong>CentOS中有一个pam_tally2.so的PAM模块，来限定用户的登录失败次数，如果次数达到设置的阈值，则锁定用户。</strong></h3>
<!-- /wp:heading -->
<!-- wp:heading {"level":4} -->
<h4>1、编译PAM的配置文件</h4>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>[root@XK-V-HOME-24 ~]# vim /etc/pam.d/login 
#%PAM-1.0
auth    required    pam_tally2.so    deny=3    unlock_time=100 even_deny_root root_unlock_time=200
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       substack     system-auth
auth       include      postlogin
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
  ssion    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so</code></pre>
<!-- /wp:code -->
<!-- wp:heading -->
<h2>添加参数</h2>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>auth    required    pam_tally2.so    deny=3    unlock_time=100 even_deny_root root_unlock_time=200</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":4} -->
<h4>各参数介绍：</h4>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>even_deny_root    也限制root用户； 
deny           设置普通用户和root用户连续错误登陆的最大次数，超过最大次数，则锁定该用户 
unlock_time        设定普通用户锁定后，多少时间后解锁，单位是秒； 
root_unlock_time      设定root用户锁定后，多少时间后解锁，单位是秒； 
此处使用的是 pam_tally2 模块，如果不支持 pam_tally2 可以使用 pam_tally 模块。另外，不同的pam版本，设置可能有所不同，具体使用方法，可以参照相关模块的使用规则。</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":4} -->
<h4>在#%PAM-1.0的下面，即第二行，添加内容，一定要写在前面，如果写在后面，虽然用户被锁定，但是只要用户输入正确的密码，还是可以登录的！</h4>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>添加参数介绍：设置密码尝试错误三次，普通用户和root用户都进行锁定，普通用户锁定100秒，root用户锁定200秒</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":4} -->
<h4>2、这个只是限制了用户从tty登录，而没有限制远程登录，如果想限制远程登录，需要改sshd文件</h4>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>[root@XK-V-HOME-24 ~]# vim /etc/pam.d/sshd 
#%PAM-1.0
auth    required    pam_tally2.so    deny=3    unlock_time=100 even_deny_root root_unlock_time=200
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":4} -->
<h4>同样是增加在第2行！</h4>
<!-- /wp:heading -->
<!-- wp:heading {"level":4} -->
<h4>查看用户登录失败的次数:</h4>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>[root@XK-V-HOME-24 ~]# pam_tally2 --user
[root@XK-V-HOME-24 ~]# </code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":4} -->
<h4>解锁指定用户:</h4>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>pam_tally2: [-f rooted-filename] [--file rooted-filename]
   [-u username] [--user username]
   [-r] [--reset[=n]] [--quiet]</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":5} -->
<h5>ps：这个远程ssh的时候，输入密码错误超过三次但是没有提示，只要超过设定的值，输入正确的密码也是登陆不了的！，还是要等到设定的时间在重新尝试输入正确密码进行登录认证</h5>
<!-- /wp:heading -->]]></description><guid isPermaLink="false">/archives/Linux%E9%99%90%E5%88%B6%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95%E5%B0%9D%E8%AF%95%E5%AF%86%E7%A0%81%E6%AC%A1%E6%95%B0%E5%8F%8A%E9%94%81%E5%AE%9A%E6%97%B6%E9%97%B4</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F3099aab810a149ef56ccfd80ce6b42ed.webp&amp;size=m" type="image/jpeg" length="317460"/><category>Linux</category><pubDate>Sun, 1 May 2022 21:22:00 GMT</pubDate></item><item><title><![CDATA[官方源、镜像源汇总]]></title><link>https://blog.xkzs.cc/archives/%E5%AE%98%E6%96%B9%E6%BA%90%E3%80%81%E9%95%9C%E5%83%8F%E6%BA%90%E6%B1%87%E6%80%BB</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=%E5%AE%98%E6%96%B9%E6%BA%90%E3%80%81%E9%95%9C%E5%83%8F%E6%BA%90%E6%B1%87%E6%80%BB&amp;url=/archives/%E5%AE%98%E6%96%B9%E6%BA%90%E3%80%81%E9%95%9C%E5%83%8F%E6%BA%90%E6%B1%87%E6%80%BB" width="1" height="1" alt="" style="opacity:0;">
<p style="text-align: center; "><img loading="lazy" src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F09%2F26%2F2cae7657401446939067a3346543c76b-0.webp&amp;size=m" alt="" style="display: inline-block"></p>
<h3 style="" id="heading-1">（一）、企业站</h3>
<pre><code>搜狐：http://mirrors.sohu.com/
网易：http://mirrors.163.com/
阿里云：http://mirrors.aliyun.com/
腾讯：http://android-mirror.bugly.qq.com:8080/（仅针对APP开发的软件，限流，不推荐）
淘宝：http://npm.taobao.org/</code></pre>
<h3 style="" id="heading-2">（二）、教育站</h3>
<pre><code>上海交通大学：http://ftp.sjtu.edu.cn/html/resources.xml（部分移动运营商出口状况不佳，无法访问）
华中科技大学：http://mirror.hust.edu.cn/（当前已用容量估计：4.83T）
清华大学：http://mirrors.tuna.tsinghua.edu.cn/（当前已用容量估计：9.8T）
北京理工大学：http://mirror.bit.edu.cn/web/
兰州大学：http://mirror.lzu.edu.cn/
中国科技大学：http://mirrors.ustc.edu.cn/（当前已用容量估计：21.32T）
大连东软信息学院：http://mirrors.neusoft.edu.cn/（当前已用容量估计：2.5T）
东北大学：http://mirror.neu.edu.cn/
大连理工大学：http://mirror.dlut.edu.cn/
哈尔滨工业大学：http://run.hit.edu.cn/html/（部分联通运营商出口状况不佳，无法访问）
北京交通大学：http://mirror.bjtu.edu.cn/cn/
天津大学：http://mirror.tju.edu.cn（无法访问，ping超时）
中国地质大学：http://mirrors.cug.edu.cn/（当前已用容量估计：2.3T）
浙江大学：http://mirrors.zju.edu.cn/
厦门大学：http://mirrors.xmu.edu.cn/
中山大学：http://mirror.sysu.edu.cn/
重庆大学：http://mirrors.cqu.edu.cn/（当前已用容量估计：3.93T）
北京化工大学：http://ubuntu.buct.edu.cn/（Android SDK镜像仅供校内使用，当前已用容量估计：1.72T）
南阳理工学院：http://mirror.nyist.edu.cn/
中国科学院：http://www.opencas.org/mirrors/
电子科技大学：http://ubuntu.uestc.edu.cn/（无法访问，ping超时）
电子科技大学星辰工作室：http://mirrors.stuhome.net/（当前已用容量估计：1.08T）
西北农林科技大学：http://mirrors.nwsuaf.edu.cn/（只做CentOS镜像，当前已用容量估计：140GB） 
浙江大学：http://mirrors.zju.edu.cn/
台湾淡江大学: http://ftp.tku.edu.tw/Linux/</code></pre>
<h3 style="" id="heading-3">（三）、其他</h3>
<pre><code>首都在线科技股份有限公司（英文名Capital Online Data Service）：http://mirrors.yun-idc.com/
中国电信天翼云：http://mirrors.ctyun.cn/
noc.im：http://mirrors.noc.im/（当前已用容量估计：3.74T）
常州贝特康姆软件技术有限公司：http://centos.bitcomm.cn/（只做CentOS镜像，当前已用容量估计：140GB）
公云PubYun（母公司为贝特康姆）：http://mirrors.pubyun.com/
Linux运维派：http://mirrors.skyshe.cn/（使用阿里云服务器，界面使用浙江大学的模板，首页维护，内容可访问）
中国互联网络信息中心：http://mirrors.cnnic.cn/（只做Apache镜像，当前已用容量估计：120GB）
Fayea工作室：http://apache.fayea.com/（只做Apache镜像，当前已用容量估计：120GB）
开源中国社区 http://mirrors.oss.org.cn/</code></pre>
<h2 style="" id="heading-4">软件版</h2>
<h3 style="" id="heading-5">（一）、操作系统类</h3>
<p style="">1.Ubuntu</p>
<pre><code>阿里云：http://mirrors.aliyun.com/ubuntu-releases/
网易：http://mirrors.163.com/ubuntu-releases/
搜狐：http://mirrors.sohu.com/ubuntu-releases/（搜狐在12年之后似乎不同步了）
首都在线科技股份有限公司：http://mirrors.yun-idc.com/ubuntu-releases/</code></pre>
<p style="">2.CentOS</p>
<pre><code>网易：http://mirrors.163.com/centos/
搜狐：http://mirrors.sohu.com/centos/
阿里云：http://mirrors.aliyun.com/centos/</code></pre>
<h3 style="" id="heading-6">（二）、服务器类</h3>
<p style="">1.Apache</p>
<pre><code>中国互联网络信息中心：http://mirrors.cnnic.cn/apache/
华中科技大学：http://mirrors.hust.edu.cn/apache/
北京理工大学：http://mirror.bit.edu.cn/apache/TOMCAT全版本：https://archive.apache.org/dist/tomcat/</code></pre>
<p style="">2.MySQL</p>
<pre><code>北京理工大学：http://mirror.bit.edu.cn/mysql/Downloads/
中国电信天翼云：http://mirrors.ctyun.cn/Mysql/
搜狐镜像源：http://mirrors.sohu.com/mysql/</code></pre>
<p style="">3.PostgreSQL</p>
<pre><code>浙江大学：http://mirrors.zju.edu.cn/postgresql/</code></pre>
<p style="">4.MariaDB</p>
<pre><code>中国电信天翼云：http://mirrors.ctyun.cn/MariaDB/</code></pre>
<p style="">5.VideoLAN</p>
<pre><code>大连东软信息学院：http://mirrors.neusoft.edu.cn/videolan/
中国科技大学：http://mirrors.ustc.edu.cn/videolan-ftp/</code></pre>
<p style="">6、php</p>
<pre><code>php全版本：  https://secure.php.net/releases/</code></pre>
<h3 style="" id="heading-7">（三）、开发工具类</h3>
<p style="">1.Eclipse</p>
<pre><code>中国科技大学：http://mirrors.ustc.edu.cn/eclipse/
中国科学院：http://mirrors.opencas.cn/eclipse/
东北大学：http://ftp.neu.edu.cn/mirrors/eclipse/，http://mirror.neu.edu.cn/eclipse/</code></pre>
<p style="">2.Android SDK</p>
<pre><code>中国科学院：http://mirrors.opencas.ac.cn/android/repository/
南洋理工学院：http://mirror.nyist.edu.cn/android/repository/
中国科学院：http://mirrors.opencas.cn/android/repository/
腾讯：http://android-mirror.bugly.qq.com:8080/android/repository/（限流，不推荐）
大连东软信息学院：http://mirrors.neusoft.edu.cn/android/repository/（同步效果不如中科院的镜像，不推荐）</code></pre>
<p style="">3.Xcode</p>
<pre><code>腾讯：http://android-mirror.bugly.qq.com:8080/Xcode/（从7.2之后不再更新，建议直接从官网下载）</code></pre>
<h3 style="" id="heading-8">（四）、容器</h3>
<pre><code>lxc国内镜像源： https://mirrors.tuna.tsinghua.edu.cn/lxc-images/</code></pre>
<h2 style="" id="heading-9">官方镜像列表状态地址</h2>
<pre><code>CentOS：http://mirror-status.centos.org/#cn
Archlinux：https://www.archlinux.org/mirrors/status/
Ubuntu：https://launchpad.net/ubuntu/+cdmirrors
Debian：http://mirror.debian.org/status.html
Fedora Linux/Fedora EPEL：https://admin.fedoraproject.org/mirrormanager/mirrors
Apache：http://www.apache.org/mirrors/#cn
Cygwin：https://www.cygwin.com/mirrors.html</code></pre>
<hr>
<p style="">部分摘录自：<a target="_blank" rel="noopener noreferrer nofollow" href="https://link.juejin.cn?target=http%3A%2F%2Fblog.csdn.net%2Fwh211212%2Farticle%2Fdetails%2F53593057">blog.csdn.net/wh211212/ar…</a></p>]]></description><guid isPermaLink="false">/archives/%E5%AE%98%E6%96%B9%E6%BA%90%E3%80%81%E9%95%9C%E5%83%8F%E6%BA%90%E6%B1%87%E6%80%BB</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Ff37e32ad61aebc5b0c8e32303efb5164.webp&amp;size=m" type="image/jpeg" length="190150"/><category>Linux</category><category>镜像源</category><pubDate>Sun, 1 May 2022 21:11:00 GMT</pubDate></item><item><title><![CDATA[Linux的基本使用与安全配置]]></title><link>https://blog.xkzs.cc/archives/Linux%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E4%B8%8E%E5%AE%89%E5%85%A8%E9%85%8D%E7%BD%AE</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=Linux%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E4%B8%8E%E5%AE%89%E5%85%A8%E9%85%8D%E7%BD%AE&amp;url=/archives/Linux%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E4%B8%8E%E5%AE%89%E5%85%A8%E9%85%8D%E7%BD%AE" width="1" height="1" alt="" style="opacity:0;">
<h1 style="" id="heading-1">说明</h1>
<h3 style="" id="heading-2">以CentOS 7为例，实现基本安全配置</h3>
<h2 style="" id="heading-3">一、创建普通用户并授权</h2>
<blockquote>
 <p style="">一般登录服务器是远程登录的，这种情况下，登录的用户就必须要做一些限制，一般不用root用户登陆，因为权限太高，出于安全考虑，一般会自己创建一个普通用户进行登录，如果操作需要用到root权限，则可以用su root切换root用户进行操作即可</p>
</blockquote>
<pre><code>创建：adduser 用户名
设置密码：passwd 用户名</code></pre>
<pre><code>[root@BWG-US-153121 ~]# adduser xingkong  #创建用户
[root@BWG-US-153121 ~]# passwd xingkong   #设置密码
[root@BWG-US-153121 ~]# gpasswd -a xingkong wheel  #将用户添加到wheel用户组，给用户赋予root权限</code></pre>
<h3 style="" id="heading-4">完成之后就可以用新建的账号登录了，需要用户权限的话可以前面加个sudo再执行命令即可</h3>
<h2 style="" id="heading-5">二、禁止root远程登录</h2>
<pre><code>vim /etc/ssh/sshd_config
Port 2188
PermitRootLogin no</code></pre>
<h3 style="" id="heading-6">找到“PermitRootLogin yes”这一行，将yes改为no，保存退出即可</h3>
<p style="text-align: center; "><img loading="lazy" src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F09%2F26%2F79821a5470a73949c4b4e556a4b540ee-0.webp&amp;size=m" alt="" style="display: inline-block"></p>
<h3 style="" id="heading-7">关闭SElinux</h3>
<pre><code>vi /etc/selinux/config
设置SELinux为disable
SELINUX=disabled</code></pre>
<h2 style="" id="heading-8">修改wheel组免密码</h2>
<pre><code>vim /etc/sudoers
%wheel  ALL=(ALL)       NOPASSWD:ALL</code></pre>
<p style="">重启ssh服务：systemctl restart sshd</p>]]></description><guid isPermaLink="false">/archives/Linux%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E4%B8%8E%E5%AE%89%E5%85%A8%E9%85%8D%E7%BD%AE</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F6e0dc45230ec1545dfece387036f8d40.webp&amp;size=m" type="image/jpeg" length="533634"/><category>Linux</category><pubDate>Sun, 1 May 2022 20:48:00 GMT</pubDate></item><item><title><![CDATA[Nginx详解]]></title><link>https://blog.xkzs.cc/archives/Nginx%E8%AF%A6%E8%A7%A3</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=Nginx%E8%AF%A6%E8%A7%A3&amp;url=/archives/Nginx%E8%AF%A6%E8%A7%A3" width="1" height="1" alt="" style="opacity:0;">
<p style=""></p>
<h3 style="" id="heading-1"><strong>什么是Nginx？</strong></h3>
<p style="">Nginx是一个 轻量级/高性能的反向代理Web服务器，用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡，他可以处理2-3万并发连接数，官方监测能支持5万并发，现在中国使用nginx网站用户有很多，例如：新浪、网易、 腾讯等。</p>
<h3 style="" id="heading-2"></h3>
<h3 style="" id="heading-3"><strong>Nginx 有哪些优点？</strong></h3>
<ol>
 <li>
  <p style="">跨平台、配置简单。</p>
 </li>
 <li>
  <p style="">非阻塞、高并发连接：处理 2-3 万并发连接数，官方监测能支持 5 万并发。</p>
 </li>
 <li>
  <p style="">内存消耗小：开启 10 个 Nginx 才占 150M 内存。</p>
 </li>
 <li>
  <p style="">成本低廉，且开源。</p>
 </li>
 <li>
  <p style="">稳定性高，宕机的概率非常小。</p>
 </li>
 <li>
  <p style="">内置的健康检查功能：如果有一个服务器宕机，会做一个健康检查，再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上</p>
 </li>
</ol>
<h3 style="" id="heading-4"><strong>Nginx应用场景？</strong></h3>
<ol>
 <li>
  <p style="">http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。</p>
 </li>
 <li>
  <p style="">虚拟主机。可以实现在一台服务器虚拟出多个网站，例如个人网站使用的虚拟机。</p>
 </li>
 <li>
  <p style="">反向代理，负载均衡。当网站的访问量达到一定程度后，单台服务器不能满足用户的请求时，需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载，不会应为某台服务器负载高宕机而某台服务器闲置的情况。</p>
 </li>
 <li>
  <p style="">nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。</p>
 </li>
</ol>
<h3 style="" id="heading-5"><strong>Nginx怎么处理请求的？</strong></h3>
<pre><code> server { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 第一个Server区块开始，表示一个独立的虚拟主机站点
 &nbsp; &nbsp; &nbsp;  listen &nbsp; &nbsp; &nbsp; 80； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 提供服务的端口，默认80
 &nbsp; &nbsp; &nbsp;  server_name  localhost; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 提供服务的域名主机名
 &nbsp; &nbsp; &nbsp;  location / { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 第一个location区块开始
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  root &nbsp; html; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 站点的根目录，相当于Nginx的安装目录
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  index  index.html index.html; &nbsp; &nbsp; &nbsp; &nbsp;  # 默认的首页文件，多个用空格分开
 &nbsp; &nbsp; &nbsp;  } &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 第一个location区块结果</code></pre>
<ol>
 <li>
  <p style="">首先，Nginx 在启动时，会解析配置文件，得到需要监听的端口与 IP 地址，然后在 Nginx 的 Master 进程里面先初始化好这个监控的Socket(创建 S ocket，设置 addr、reuse 等选项，绑定到指定的 ip 地址端口，再 listen 监听)。</p>
 </li>
 <li>
  <p style="">然后，再 fork(一个现有进程可以调用 fork 函数创建一个新进程。由 fork 创建的新进程被称为子进程 )出多个子进程出来。</p>
 </li>
 <li>
  <p style="">之后，子进程会竞争 accept 新的连接。此时，客户端就可以向 nginx 发起连接了。当客户端与nginx进行三次握手，与 nginx 建立好一个连接后。此时，某一个子进程会 accept 成功，得到这个建立好的连接的 Socket ，然后创建 nginx 对连接的封装，即 ngx_connection_t 结构体。</p>
 </li>
 <li>
  <p style="">接着，设置读写事件处理函数，并添加读写事件来与客户端进行数据的交换。</p>
 </li>
 <li>
  <p style="">最后，Nginx 或客户端来主动关掉连接，到此，一个连接就寿终正寝了。</p>
 </li>
</ol>
<h3 style="" id="heading-6"><strong>Nginx 是如何实现高并发的？</strong></h3>
<p style="">如果一个 server 采用一个进程(或者线程)负责一个request的方式，那么进程数就是并发数。那么显而易见的，就是会有很多进程在等待中。等什么？最多的应该是等待网络传输。</p>
<p style="">而 Nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的时候，这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。</p>
<p style="">Nginx是如何利用的呢，简单来说：同样的 4 个进程，如果采用一个进程负责一个 request 的方式，那么，同时进来 4 个 request 之后，每个进程就负责其中一个，直至会话关闭。期间，如果有第 5 个request进来了。就无法及时反应了，因为 4 个进程都没干完活呢，因此，一般有个调度进程，每当新进来了一个 request ，就新开个进程来处理。</p>
<p style="">回想下，BIO 是不是存在酱紫的问题？</p>
<p style="">Nginx 不这样，每进来一个 request ，会有一个 worker 进程去处理。但不是全程的处理，处理到什么程度呢？处理到可能发生阻塞的地方，比如向上游（后端）服务器转发 request ，并等待请求返回。那么，这个处理的 worker 不会这么傻等着，他会在发送完请求后，注册一个事件：“如果 upstream 返回了，告诉我一声，我再接着干”。于是他就休息去了。此时，如果再有 request 进来，他就可以很快再按这种方式处理。而一旦上游服务器返回了，就会触发这个事件，worker 才会来接手，这个 request 才会接着往下走。</p>
<p style="">这就是为什么说，Nginx 基于事件模型。</p>
<p style="">由于 web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中，实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即：</p>
<p style="">webserver 刚好属于网络 IO 密集型应用，不算是计算密集型。</p>
<p style="">异步，非阻塞，使用 epoll ，和大量细节处的优化。也正是 Nginx 之所以然的技术基石。</p>
<h3 style="" id="heading-7"><strong>什么是正向代理？</strong></h3>
<p style="">一个位于客户端和原始服务器(origin server)之间的服务器，为了从原始服务器取得内容，客户端向代理发送一个请求并指定目标(原始服务器)，然后代理向原始服务器转交请求并将获得的内容返回给客户端。</p>
<p style=""><strong>客户端才能使用正向代理</strong>。正向代理总结就一句话：代理端代理的是客户端。例如说：我们使用的OpenVPN 等等。</p>
<h3 style="" id="heading-8"><strong>什么是反向代理？</strong></h3>
<p style="">反向代理（Reverse Proxy）方式，是指以代理服务器来接受 Internet上的连接请求，然后将请求，发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端，此时代理服务器对外就表现为一个反向代理服务器。</p>
<p style="">反向代理总结就一句话：代理端代理的是服务端。</p>
<h3 style="" id="heading-9"><strong>“反向代理服务器的优点是什么?</strong></h3>
<p style="">反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的，特别是当您使用web托管服务时。</p>
<h3 style="" id="heading-10"><strong>Nginx目录结构有哪些？</strong></h3>
<pre><code>[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Nginx所有配置文件的目录
│ &nbsp; ├── fastcgi.conf &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # fastcgi相关参数的配置文件
│ &nbsp; ├── fastcgi.conf.default &nbsp; &nbsp; &nbsp; &nbsp; # fastcgi.conf的原始备份文件
│ &nbsp; ├── fastcgi_params &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # fastcgi的参数文件
│ &nbsp; ├── fastcgi_params.default &nbsp; &nbsp; &nbsp; 
│ &nbsp; ├── koi-utf
│ &nbsp; ├── koi-win
│ &nbsp; ├── mime.types &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 媒体类型
│ &nbsp; ├── mime.types.default
│ &nbsp; ├── nginx.conf &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Nginx主配置文件
│ &nbsp; ├── nginx.conf.default
│ &nbsp; ├── scgi_params &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # scgi相关参数文件
│ &nbsp; ├── scgi_params.default &nbsp;
│ &nbsp; ├── uwsgi_params &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # uwsgi相关参数文件
│ &nbsp; ├── uwsgi_params.default
│ &nbsp; └── win-utf
├── fastcgi_temp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # fastcgi临时数据目录
├── html &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Nginx默认站点目录
│ &nbsp; ├── 50x.html &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 错误页面优雅替代显示文件，例如当出现502错误时会调用此页面
│ &nbsp; └── index.html &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 默认的首页文件
├── logs &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Nginx日志目录
│ &nbsp; ├── access.log &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 访问日志文件
│ &nbsp; ├── error.log &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 错误日志文件
│ &nbsp; └── nginx.pid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # pid文件，Nginx进程启动后，会把所有进程的ID号写到此文件
├── proxy_temp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 临时目录
├── sbin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Nginx命令目录
│ &nbsp; └── nginx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # Nginx的启动命令
├── scgi_temp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 临时目录
└── uwsgi_temp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 临时目录</code></pre>
<h3 style="" id="heading-11">Nginx配置文件nginx.conf有哪些属性模块?</h3>
<pre><code>worker_processes  1； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # worker进程的数量
events { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 事件区块开始
 &nbsp;  worker_connections  1024； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 每个worker进程支持的最大连接数
} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 事件区块结束
http { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # HTTP区块开始
 &nbsp;  include &nbsp; &nbsp; &nbsp; mime.types； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # Nginx支持的媒体类型库文件
 &nbsp;  default_type  application/octet-stream； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 默认的媒体类型
 &nbsp;  sendfile &nbsp; &nbsp; &nbsp;  on； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 开启高效传输模式
 &nbsp;  keepalive_timeout  65； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 连接超时
 &nbsp;  server { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 第一个Server区块开始，表示一个独立的虚拟主机站点
 &nbsp; &nbsp; &nbsp;  listen &nbsp; &nbsp; &nbsp; 80； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 提供服务的端口，默认80
 &nbsp; &nbsp; &nbsp;  server_name  localhost； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 提供服务的域名主机名
 &nbsp; &nbsp; &nbsp;  location / { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 第一个location区块开始
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  root &nbsp; html； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 站点的根目录，相当于Nginx的安装目录
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  index  index.html index.htm； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 默认的首页文件，多个用空格分开
 &nbsp; &nbsp; &nbsp;  } &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 第一个location区块结果
 &nbsp; &nbsp; &nbsp;  error_page &nbsp; 500502503504  /50x.html； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 出现对应的http状态码时，使用50x.html回应客户
 &nbsp; &nbsp; &nbsp;  location = /50x.html { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # location区块开始，访问50x.html
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  root &nbsp; html； &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # 指定对应的站点目录为html
 &nbsp; &nbsp; &nbsp;  }</code></pre>
<h3 style="" id="heading-12">cookie和session区别？</h3>
<p style=""><strong>共同：</strong></p>
<p style="">存放用户信息。存放的形式：key-value格式 变量和变量内容键值对。</p>
<p style=""><strong>区别：</strong></p>
<p style="">cookie</p>
<ol>
 <li>
  <p style="">存放在客户端浏览器</p>
 </li>
 <li>
  <p style="">每个域名对应一个cookie，不能跨跃域名访问其他cookie</p>
 </li>
 <li>
  <p style="">用户可以查看或修改cookie</p>
 </li>
 <li>
  <p style="">http响应报文里面给你浏览器设置</p>
 </li>
 <li>
  <p style="">钥匙（用于打开浏览器上锁头）</p>
 </li>
</ol>
<p style="">session:</p>
<ol>
 <li>
  <p style="">存放在服务器（文件，数据库，redis）</p>
 </li>
 <li>
  <p style="">存放敏感信息</p>
 </li>
 <li>
  <p style="">锁头</p>
 </li>
</ol>
<h3 style="" id="heading-13"><strong>为什么 Nginx 不使用多线程？</strong></h3>
<p style="">Apache: 创建多个进程或线程，而每个进程或线程都会为其分配 cpu 和内存（线程要比进程小的多，所以 worker 支持比 perfork 高的并发），并发过大会榨干服务器资源。</p>
<p style="">Nginx: 采用单线程来异步非阻塞处理请求（管理员可以配置 Nginx 主进程的工作进程的数量）(epoll)，不会为每个请求分配 cpu 和内存资源，节省了大量资源，同时也减少了大量的 CPU 的上下文切换。所以才使得 Nginx 支持更高的并发。</p>
<h3 style="" id="heading-14"><strong>nginx和apache的区别</strong></h3>
<p style="">轻量级，同样起web服务，比apache占用更少的内存和资源。</p>
<p style="">抗并发，nginx处理请求是异步非阻塞的，而apache则是阻塞性的，在高并发下nginx能保持低资源，低消耗高性能。</p>
<p style="">高度模块化的设计，编写模块相对简单。</p>
<p style="">最核心的区别在于apache是同步多进程模型，一个连接对应一个进程，nginx是异步的，多个连接可以对应一个进程。</p>
<table>
 <tbody>
  <tr>
   <th colspan="1" rowspan="1">
    <p style="">Nginx</p>
   </th>
   <th colspan="1" rowspan="1">
    <p style="">Apache</p>
   </th>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">- nginx是一个基于事件的web服务器</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">apache是一个基于流程的服务器</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">所有请求都由一个线程处理</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">单个线程处理单个请求</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">nginx避免子进程的概念</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">apache是基于子进程的</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">nginx类似于速度</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">apache类似于功率</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">nginx在内存消耗和连接方面比较好</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">apache在内存消耗和连接上没有提高</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">nginx在负载均衡方面表现较好</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">当流量到达进程极限时，apache将拒绝新的连接。</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">对于php来说，nginx可能更可取，因为它支持php</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">apache支持php，python，perl和其他语言使用插件，当应用程序基于python或ruby时，它非常有用。</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">nginx不支持IBMI和openvms一样的os</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">apache支持更多的os</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">nginx只具有核心功能</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">apache提供了比nginx更多的功能</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">nginx的性能和可伸缩性不依赖于硬件</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">apache依赖于cpu和内存等硬件组件。</p>
   </td>
  </tr>
 </tbody>
</table>
<h3 style="" id="heading-15"><strong>什么是动态资源、静态资源分离？</strong></h3>
<p style="">动态资源、静态资源分离，是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来，动静资源做好了拆分以后我们就可以根据静态资源的特点将其做缓存操作，这就是网站静态化处理的核心思路。</p>
<p style="">动态资源、静态资源分离简单的概括是：动态文件与静态文件的分离。</p>
<h3 style="" id="heading-16"><strong>为什么要做动、静分离？</strong></h3>
<p style="">在我们的软件开发中，有些请求是需要后台处理的（如：.jsp,.do 等等），有些请求是不需要经过后台处理的（如：css、html、jpg、js 等等文件），这些不需要经过后台处理的文件称为静态文件，否则动态文件。</p>
<p style="">因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗？当然这是可以的，但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候，我们应该使用这种动静分离的策略去解决动、静分离将网站静态资源（HTML，JavaScript，CSS，img等文件）与后台应用分开部署，提高用户访问静态代码的速度，降低对后台应用访问</p>
<p style="">这里我们将静态资源放到 Nginx 中，动态资源转发到 Tomcat 服务器中去。</p>
<p style="">当然，因为现在七牛、阿里云等 CDN 服务已经很成熟，主流的做法，是把静态资源缓存到 CDN 服务中，从而提升访问速度。</p>
<p style="">相比本地的 Nginx 来说，CDN 服务器由于在国内有更多的节点，可以实现用户的就近访问。并且，CDN 服务可以提供更大的带宽，不像我们自己的应用服务，提供的带宽是有限的。</p>
<h3 style="" id="heading-17"><strong>什么叫 CDN 服务？</strong></h3>
<p style="">CDN ，即内容分发网络。</p>
<p style="">其目的是，通过在现有的 Internet中 增加一层新的网络架构，将网站的内容发布到最接近用户的网络边缘，使用户可就近取得所需的内容，提高用户访问网站的速度。</p>
<p style="">一般来说，因为现在 CDN 服务比较大众，所以基本所有公司都会使用 CDN 服务。</p>
<h3 style="" id="heading-18"><strong>Nginx怎么做的动静分离？</strong></h3>
<p style="">只需要指定路径对应的目录。location/可以使用正则表达式匹配。并指定对应的硬盘中的目录。如下：（操作都是在Linux上）</p>
<pre><code> &nbsp; &nbsp; &nbsp; &nbsp;location /image/ {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;root &nbsp; /usr/local/static/;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;autoindex on;
 &nbsp; &nbsp; &nbsp;  }</code></pre>
<p style="">步骤：</p>
<pre><code># 创建目录
mkdir /usr/local/static/image
 
# 进入目录
cd  /usr/local/static/image
 
# 上传照片
photo.jpg
 
# 重启nginx
sudo nginx -s reload</code></pre>
<p style="">打开浏览器 输入 server_name/image/1.jpg 就可以访问该静态图片了</p>
<h3 style="" id="heading-19"><strong>Nginx负载均衡的算法怎么实现的?策略有哪些?</strong></h3>
<p style="">为了避免服务器崩溃，大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群，当用户访问时，先访问到一个转发服务器，再由转发服务器将访问分发到压力更小的服务器。</p>
<p style="">Nginx负载均衡实现的策略有以下五种：</p>
<p style=""><strong>1 .轮询(默认)</strong> 每个请求按时间顺序逐一分配到不同的后端服务器，如果后端某个服务器宕机，能自动剔除故障系统。</p>
<pre><code>upstream backserver { 
 server 192.168.0.12; 
 server 192.168.0.13; 
} </code></pre>
<p style=""><strong>2. 权重 weight</strong> weight的值越大，分配到的访问概率越高，主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值，达到合理有效的地利用主机资源。</p>
<pre><code># 权重越高，在被访问的概率越大，如上例，分别是20%，80%。
upstream backserver { 
 server 192.168.0.12 weight=2; 
 server 192.168.0.13 weight=8; 
} </code></pre>
<p style=""><strong>3. ip_hash( IP绑定)</strong> 每个请求按访问IP的哈希结果分配，使来自同一个IP的访客固定访问一台后端服务器，并且可以有效解决动态网页存在的session共享问题</p>
<pre><code>upstream backserver { 
 ip_hash; 
 server 192.168.0.12:88; 
 server 192.168.0.13:80; 
} </code></pre>
<p style=""><strong>4. fair(第三方插件)</strong> 必须安装upstream_fair模块。</p>
<p style="">对比 weight、ip_hash更加智能的负载均衡算法，fair算法可以根据页面大小和加载时间长短智能地进行负载均衡，响应时间短的优先分配。</p>
<pre><code># 哪个服务器的响应速度快，就将请求分配到那个服务器上。
upstream backserver { 
 server server1; 
 server server2; 
 fair; 
} </code></pre>
<p style=""><strong>5.url_hash(第三方插件)</strong> 必须安装Nginx的hash软件包</p>
<p style="">按访问url的hash结果来分配请求，使每个url定向到同一个后端服务器，可以进一步提高后端缓存服务器的效率。</p>
<pre><code>upstream backserver { 
 server squid1:3128; 
 server squid2:3128; 
 hash $request_uri; 
 hash_method crc32; 
} </code></pre>
<h3 style="" id="heading-20"><strong>如何用Nginx解决前端跨域问题？</strong></h3>
<p style="">使用Nginx转发请求。把跨域的接口写成调本域的接口，然后将这些接口转发到真正的请求地址。</p>
<h3 style="" id="heading-21"><strong>Nginx虚拟主机怎么配置?</strong></h3>
<p style="">1、基于域名的虚拟主机，通过域名来区分虚拟主机——应用：外部网站</p>
<p style="">2、基于端口的虚拟主机，通过端口来区分虚拟主机——应用：公司内部网站，外部网站的管理后台</p>
<p style="">3、基于ip的虚拟主机。</p>
<h3 style="" id="heading-22"><strong>基于虚拟主机配置域名</strong></h3>
<p style="">需要建立/data/www /data/bbs目录，windows本地hosts添加虚拟机ip地址对应的域名解析；对应域名网站目录下新增index.html文件；</p>
<pre><code> &nbsp; &nbsp;# 当客户端访问www.xkzs.icu,监听端口号为80,直接跳转到data/www目录下文件
 &nbsp; &nbsp;server {
 &nbsp; &nbsp; &nbsp; &nbsp;listen &nbsp; &nbsp; &nbsp; 80;
 &nbsp; &nbsp; &nbsp; &nbsp;server_name &nbsp;www.xkzs.icu;
 &nbsp; &nbsp; &nbsp; &nbsp;location / {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;root &nbsp; data/www;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index &nbsp;index.html index.htm;
 &nbsp; &nbsp; &nbsp;  }
 &nbsp;  }
 
 &nbsp; &nbsp;# 当客户端访问www.xkzs.icu,监听端口号为80,直接跳转到data/bbs目录下文件
 &nbsp; &nbsp; server {
 &nbsp; &nbsp; &nbsp; &nbsp;listen &nbsp; &nbsp; &nbsp; 80;
 &nbsp; &nbsp; &nbsp; &nbsp;server_name &nbsp;www.xkzs.com;
 &nbsp; &nbsp; &nbsp; &nbsp;location / {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;root &nbsp; data/bbs;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index &nbsp;index.html index.htm;
 &nbsp; &nbsp; &nbsp;  }
 &nbsp;  }</code></pre>
<h3 style="" id="heading-23"><strong>基于端口的虚拟主机</strong></h3>
<p style="">使用端口来区分，浏览器使用域名或ip地址:端口号 访问</p>
<pre><code> &nbsp; &nbsp;# 当客户端访问www.xkzs.icu,监听端口号为8080,直接跳转到data/www目录下文件
 &nbsp; &nbsp; server {
 &nbsp; &nbsp; &nbsp; &nbsp;listen &nbsp; &nbsp; &nbsp; 8080;
 &nbsp; &nbsp; &nbsp; &nbsp;server_name &nbsp;8080.xkzs.com;
 &nbsp; &nbsp; &nbsp; &nbsp;location / {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;root &nbsp; data/www;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index &nbsp;index.html index.htm;
 &nbsp; &nbsp; &nbsp;  }
 &nbsp;  }
 &nbsp; &nbsp;
 &nbsp; &nbsp;# 当客户端访问www.xkzs.icu,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080
 &nbsp; &nbsp;server {
 &nbsp; &nbsp; &nbsp; &nbsp;listen &nbsp; &nbsp; &nbsp; 80;
 &nbsp; &nbsp; &nbsp; &nbsp;server_name &nbsp;www.xkzs.icu;
 &nbsp; &nbsp; &nbsp; &nbsp;location / {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_pass http://127.0.0.1:8080;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index &nbsp;index.html index.htm;
 &nbsp; &nbsp; &nbsp;  }
 &nbsp;  }</code></pre>
<h3 style="" id="heading-24"><strong>location的作用是什么？</strong></h3>
<p style="">location指令的作用是根据用户请求的URI来执行不同的应用，也就是根据用户请求的网站URL进行匹配，匹配成功即进行相关的操作。 location的语法能说出来吗？ 注意：~ 代表自己输入的英文字母</p>
<table>
 <tbody>
  <tr>
   <th colspan="1" rowspan="1">
    <p style="">匹配符</p>
   </th>
   <th colspan="1" rowspan="1">
    <p style="">匹配规则</p>
   </th>
   <th colspan="1" rowspan="1">
    <p style="">优先级</p>
   </th>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">=</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">精确匹配</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">1</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">^~</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">以某个字符串开头</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">2</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">~</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">区分大小写的正则匹配</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">3</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">~*</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">不区分大小写的正则匹配</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">4</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">!~</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">区分大小写不匹配的正则</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">5</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">!~*</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">不区分大小写不匹配的正则</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">6</p>
   </td>
  </tr>
  <tr>
   <td colspan="1" rowspan="1">
    <p style="">/</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">通用匹配，任何请求都会匹配到</p>
   </td>
   <td colspan="1" rowspan="1">
    <p style="">7</p>
   </td>
  </tr>
 </tbody>
</table>
<h3 style="" id="heading-25"><strong>Location正则案例</strong></h3>
<pre><code> &nbsp; &nbsp;# 优先级1,精确匹配，根路径
 &nbsp;  location =/ {
 &nbsp; &nbsp; &nbsp;  return 400;
 &nbsp;  }
 
 &nbsp; &nbsp;# 优先级2,以某个字符串开头,以av开头的，优先匹配这里，区分大小写
 &nbsp;  location ^~ /av {
 &nbsp; &nbsp; &nbsp; root /data/av/;
 &nbsp;  }
 
 &nbsp; &nbsp;# 优先级3，区分大小写的正则匹配，匹配/media*****路径
 &nbsp;  location ~ /media {
 &nbsp; &nbsp; &nbsp; &nbsp;  alias /data/static/;
 &nbsp;  }
 
 &nbsp; &nbsp;# 优先级4 ，不区分大小写的正则匹配，所有的****.jpg|gif|png 都走这里
 &nbsp;  location ~* .*\.(jpg|gif|png|js|css)$ {
 &nbsp; &nbsp; &nbsp; root  /data/av/;
 &nbsp;  }
 
 &nbsp; &nbsp;# 优先7，通用匹配
 &nbsp;  location / {
 &nbsp; &nbsp; &nbsp;  return 403;
 &nbsp;  }</code></pre>
<h3 style="" id="heading-26"><strong>限流怎么做的？</strong></h3>
<p style="">Nginx限流就是限制用户请求速度，防止服务器受不了</p>
<p style="">限流有3种</p>
<ol>
 <li>
  <p style="">正常限制访问频率（正常流量）</p>
 </li>
 <li>
  <p style="">突发限制访问频率（突发流量）</p>
 </li>
 <li>
  <p style="">限制并发连接数</p>
 </li>
</ol>
<p style=""><strong>Nginx的限流都是基于漏桶流算法</strong></p>
<p style="">实现三种限流算法</p>
<p style=""><strong>1、正常限制访问频率（正常流量）</strong>：</p>
<p style="">限制一个用户发送的请求，我Nginx多久接收一个请求。</p>
<p style="">Nginx中使用ngx_http_limit_req_module模块来限制的访问频率，限制的原理实质是基于漏桶算法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个IP的请求处理频率。</p>
<pre><code> &nbsp; &nbsp;# 定义限流维度，一个用户一分钟一个请求进来，多余的全部漏掉
 &nbsp;  limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
 
 &nbsp; &nbsp;# 绑定限流维度
 &nbsp;  server{
 &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp;  location/seckill.html{
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  limit_req zone=zone; &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  proxy_pass http://lj_seckill;
 &nbsp; &nbsp; &nbsp;  }
 
 &nbsp;  }</code></pre>
<p style="">1r/s代表1秒一个请求，1r/m一分钟接收一个请求， 如果Nginx这时还有别人的请求没有处理完，Nginx就会拒绝处理该用户请求。</p>
<p style=""><strong>2、突发限制访问频率（突发流量）：</strong></p>
<p style="">限制一个用户发送的请求，我Nginx多久接收一个。</p>
<p style="">上面的配置一定程度可以限制访问频率，但是也存在着一个问题：如果突发流量超出请求被拒绝处理，无法处理活动时候的突发流量，这时候应该如何进一步处理呢？Nginx提供burst参数结合nodelay参数可以解决流量突发的问题，可以设置能处理的超过设置的请求数外能额外处理的请求数。我们可以将之前的例子添加burst参数以及nodelay参数：</p>
<pre><code> &nbsp; &nbsp;# 定义限流维度，一个用户一分钟一个请求进来，多余的全部漏掉
 &nbsp;  limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
 
 &nbsp; &nbsp;# 绑定限流维度
 &nbsp;  server{
 &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp;  location/seckill.html{
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  limit_req zone=zone burst=5 nodelay;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  proxy_pass http://lj_seckill;
 &nbsp; &nbsp; &nbsp;  }
 
 &nbsp;  }</code></pre>
<p style="">为什么就多了一个 burst=5 nodelay; 呢，多了这个可以代表Nginx对于一个用户的请求会立即处理前五个，多余的就慢慢来落，没有其他用户的请求我就处理你的，有其他的请求的话我Nginx就漏掉不接受你的请求</p>
<p style=""><strong>3、 限制并发连接数</strong> Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能，可以使用limit_conn_zone指令以及limit_conn执行进行配置。接下来我们可以通过一个简单的例子来看下：</p>
<pre><code> &nbsp;  http {
 &nbsp; &nbsp; &nbsp;  limit_conn_zone $binary_remote_addr zone=myip:10m;
 &nbsp; &nbsp; &nbsp;  limit_conn_zone $server_name zone=myServerName:10m;
 &nbsp;  }
 
 &nbsp;  server {
 &nbsp; &nbsp; &nbsp;  location / {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  limit_conn myip 10;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  limit_conn myServerName 100;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  rewrite / http://www.lijie.net permanent;
 &nbsp; &nbsp; &nbsp;  }
 &nbsp;  }</code></pre>
<p style="">上面配置了单个IP同时并发连接数最多只能10个连接，并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然，只有当请求的header被服务器处理后，虚拟服务器的连接数才会计数。刚才有提到过Nginx是基于漏桶算法原理实现的，实际上限流一般都是基于漏桶算法和令牌桶算法实现的。</p>
<h3 style="" id="heading-27"><strong>漏桶流算法和令牌桶算法知道？</strong></h3>
<p style=""><strong>漏桶算法</strong> 漏桶算法思路很简单，我们把水比作是请求，漏桶比作是系统处理能力极限，水先进入到漏桶里，漏桶里的水按一定速率流出，当流出的速率小于流入的速率时，由于漏桶容量有限，后续进入的水直接溢出（拒绝请求），以此实现限流。</p>
<p style="text-align: center; "><img loading="lazy" src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F09%2F26%2Fef64fbbc0c143a6c81948e6a786841eb-0.webp&amp;size=m" alt="springboot + aop + Lua分布式限流的最佳实践" style="display: inline-block"></p>
<p style=""><strong>令牌桶算法</strong> 令牌桶算法的原理也比较简单，我们可以理解成医院的挂号看病，只有拿到号以后才可以进行诊病。</p>
<p style="">系统会维护一个令牌（token）桶，以一个恒定的速度往桶里放入令牌（token），这时如果有请求进来想要被处理，则需要先从桶里获取一个令牌（token），当桶里没有令牌（token）可取时，则该请求将被拒绝服务。令牌桶算法通过控制桶的容量、发放令牌的速率，来达到对请求的限制。</p>
<p style="text-align: center; "><img loading="lazy" src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F09%2F26%2F3d5dad37ba1a193b3352ca838cf158e8-0.webp&amp;size=m" alt="springboot + aop + Lua分布式限流的最佳实践" style="display: inline-block"></p>
<h3 style="" id="heading-28"><strong>Nginx配置高可用性怎么配置？</strong></h3>
<p style="">当上游服务器(真实访问服务器)，一旦出现故障或者是没有及时相应的话，应该直接轮训到下一台服务器，保证服务器的高可用</p>
<p style="">Nginx配置代码：</p>
<pre><code>server {
 &nbsp; &nbsp; &nbsp; &nbsp;listen &nbsp; &nbsp; &nbsp; 80;
 &nbsp; &nbsp; &nbsp; &nbsp;server_name &nbsp;www.xkzs.icu;
 &nbsp; &nbsp; &nbsp; &nbsp;location / {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;### 指定上游服务器负载均衡服务器
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;proxy_pass http://backServer;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;proxy_connect_timeout 1s;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;###nginx发送给上游服务器(真实访问的服务器)超时时间
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;proxy_send_timeout 1s;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;### nginx接受上游服务器(真实访问的服务器)超时时间
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;proxy_read_timeout 1s;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index &nbsp;index.html index.htm;
 &nbsp; &nbsp; &nbsp;  }
 &nbsp;  }</code></pre>
<h3 style="" id="heading-29"><strong>Nginx怎么判断别IP不可访问？</strong></h3>
<pre><code> &nbsp; &nbsp; &nbsp;# 如果访问的ip地址为192.168.9.115,则返回403
 &nbsp; &nbsp; if  ($remote_addr = 192.168.9.115) { &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; return 403; &nbsp;
 &nbsp; &nbsp; } &nbsp;</code></pre>
<h3 style="" id="heading-30"></h3>
<h3 style="" id="heading-31">在nginx中，如何使用未定义的服务器名称来阻止处理请求？</h3>
<p style="">只需将请求删除的服务器就可以定义为：</p>
<p style="">服务器名被保留一个空字符串，他在没有主机头字段的情况下匹配请求，而一个特殊的nginx的非标准代码被返回，从而终止连接。</p>
<h3 style="" id="heading-32"><strong>怎么限制浏览器访问？</strong></h3>
<pre><code> &nbsp; &nbsp;## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500
 &nbsp; &nbsp; if ($http_user_agent ~ Chrome) { &nbsp; 
 &nbsp; &nbsp; &nbsp; &nbsp;return 500; &nbsp;
 &nbsp;  }</code></pre>
<h3 style="" id="heading-33"><strong>Rewrite全局变量是什么？</strong></h3>
<pre><code>$remote_addr &nbsp; &nbsp; &nbsp; &nbsp;//获取客户端ip
$binary_remote_addr //客户端ip（二进制)
$remote_port &nbsp; &nbsp; &nbsp; &nbsp;//客户端port，如：50472
$remote_user &nbsp; &nbsp; &nbsp; &nbsp;//已经经过Auth Basic Module验证的用户名
$host &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //请求主机头字段，否则为服务器名称，如:blog.sakmon.com
$request &nbsp; &nbsp; &nbsp; &nbsp;//用户请求信息，如：GET ?a=1&amp;b=2 HTTP/1.1
$request_filename &nbsp; //当前请求的文件的路径名，由root或alias和URI request组合而成，如：/2013/81.html
$status &nbsp; &nbsp; &nbsp; &nbsp; //请求的响应状态码,如:200
$body_bytes_sent &nbsp; &nbsp; &nbsp; &nbsp;// 响应时送出的body字节数数量。即使连接中断，这个数据也是精确的,如：40
$content_length &nbsp; &nbsp; &nbsp; &nbsp;// 等于请求行的“Content_Length”的值
$content_type &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 等于请求行的“Content_Type”的值
$http_referer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 引用地址
$http_user_agent &nbsp; &nbsp; &nbsp;// 客户端agent信息,如：Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
$args &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//与$query_string相同 等于当中URL的参数(GET)，如a=1&amp;b=2
$document_uri &nbsp; &nbsp; &nbsp; &nbsp;//与$uri相同  这个变量指当前的请求URI，不包括任何参数(见$args) 如:/2013/81.html
$document_root &nbsp; &nbsp; &nbsp; //针对当前请求的根路径设置值
$hostname &nbsp; &nbsp; &nbsp; &nbsp;//如：centos53.localdomain
$http_cookie &nbsp; &nbsp; &nbsp; &nbsp;//客户端cookie信息
$cookie_COOKIE &nbsp; &nbsp; &nbsp;//cookie COOKIE变量的值
$is_args &nbsp; &nbsp;//如果有$args参数，这个变量等于”?”，否则等于”"，空值，如?
$limit_rate //这个变量可以限制连接速率，0表示不限速
$query_string &nbsp; &nbsp; &nbsp; // 与$args相同 等于当中URL的参数(GET)，如a=1&amp;b=2
$request_body &nbsp; &nbsp; &nbsp;// 记录POST过来的数据信息
$request_body_file &nbsp;//客户端请求主体信息的临时文件名
$request_method &nbsp; &nbsp; &nbsp; //客户端请求的动作，通常为GET或POST,如：GET
$request_uri &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//包含请求参数的原始URI，不包含主机名，如：/2013/81.html?a=1&amp;b=2
$scheme &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//HTTP方法（如http，https）,如：http
$uri &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//这个变量指当前的请求URI，不包括任何参数(见$args) 如:/2013/81.html
$request_completion //如果请求结束，设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时，为空(Empty)，如：OK
$server_protocol &nbsp; &nbsp;//请求使用的协议，通常是HTTP/1.0或HTTP/1.1，如：HTTP/1.1
$server_addr &nbsp; &nbsp; &nbsp; &nbsp;//服务器IP地址，在完成一次系统调用后可以确定这个值
$server_name &nbsp; &nbsp; &nbsp; &nbsp;//服务器名称，如：blog.sakmon.com
$server_port &nbsp; &nbsp; &nbsp; &nbsp;//请求到达服务器的端口号,如：80</code></pre>
<h3 style="" id="heading-34">Nginx 如何实现后端服务的健康检查？</h3>
<p style=""><strong>方式一</strong>，利用 nginx 自带模块 ngx_http_proxy_module 和 ngx_http_upstream_module 对后端节点做健康检查。</p>
<p style=""><strong>方式二(推荐)</strong>，利用 nginx_upstream_check_module 模块对后端节点做健康检查。</p>
<h3 style="" id="heading-35"><strong>Nginx 如何开启压缩？</strong></h3>
<p style="">开启nginx gzip压缩后，网页、css、js等静态资源的大小会大大的减少，从而可以节约大量的带宽，提高传输效率，给用户快的体验。虽然会消耗cpu资源，但是为了给用户更好的体验是值得的。</p>
<p style=""><strong>开启的配置如下：</strong></p>
<p style="">将以上配置放到nginx.conf的http{ … }节点中。</p>
<pre><code>http {
 &nbsp;# 开启gzip
  gzip on;
 
 &nbsp;# 启用gzip压缩的最小文件；小于设置值的文件将不会被压缩
  gzip_min_length 1k;
 
 &nbsp;# gzip 压缩级别 1-10 
  gzip_comp_level 2;
 
 &nbsp;# 进行压缩的文件类型。
 
  gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
 
 &nbsp;# 是否在http header中添加Vary: Accept-Encoding，建议开启
  gzip_vary on;
}</code></pre>
<p style="">保存并重启nginx，刷新页面（为了避免缓存，请强制刷新）就能看到效果了。以谷歌浏览器为例，通过F12看请求的响应头部：</p>
<p style="">我们可以先来对比下，如果我们没有开启zip压缩之前，我们的对应的文件大小，如下所示：</p>
<p style="text-align: center; "><img loading="lazy" src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F09%2F26%2F2fe57e4e63d29cf993cd04e2ea532948-0.webp&amp;size=m" alt="img" style="display: inline-block"></p>
<p style="">现在我们开启了gzip进行压缩后的文件的大小，可以看到如下所示：</p>
<p style="text-align: center; "><img loading="lazy" src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F09%2F26%2F137021791eed3574b36cb8fc66b97c92-0.webp&amp;size=m" alt="img" style="display: inline-block"></p>
<p style="">并且我们查看响应头会看到gzip这样的压缩，如下所示</p>
<p style="text-align: center; "><img loading="lazy" src="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic.xkzs.icu%2Fi%2F2023%2F09%2F26%2F74f9014dde0556503cf0e709ab1ec578-0.webp&amp;size=m" alt="img" style="display: inline-block"></p>
<p style=""><strong>gzip压缩前后效果对比：jquery原大小90kb，压缩后只有30kb。</strong></p>
<p style=""><strong>gzip虽然好用，但是以下类型的资源不建议启用。</strong></p>
<p style="">1、图片类型</p>
<p style="">原因：图片如jpg、png本身就会有压缩，所以就算开启gzip后，压缩前和压缩后大小没有多大区别，所以开启了反而会白白的浪费资源。（Tips：可以试试将一张jpg图片压缩为zip，观察大小并没有多大的变化。虽然zip和gzip算法不一样，但是可以看出压缩图片的价值并不大）</p>
<p style="">2、大文件</p>
<p style="">原因：会消耗大量的cpu资源，且不一定有明显的效果。</p>
<h3 style="" id="heading-36"><strong>ngx_http_upstream_module的作用是什么?</strong></h3>
<p style="">ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。</p>
<h3 style="" id="heading-37"><strong>什么是C10K问题?</strong></h3>
<p style="">C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。</p>
<h3 style="" id="heading-38"><strong>Nginx是否支持将请求压缩到上游?</strong></h3>
<p style="">您可以使用Nginx模块gunzip将请求压缩到上游。gunzip模块是一个过滤器，它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应。</p>
<h3 style="" id="heading-39"><strong>如何在Nginx中获得当前的时间?</strong></h3>
<p style="">要获得Nginx的当前时间，必须使用SSI模块、$date_gmt和$date_local的变量。</p>
<p style="">Proxy_set_header THE-TIME $date_gmt;</p>
<h3 style="" id="heading-40"><strong>用Nginx服务器解释-s的目的是什么?</strong></h3>
<p style="">用于运行Nginx -s参数的可执行文件。</p>
<h3 style="" id="heading-41"><strong>如何在Nginx服务器上添加模块?</strong></h3>
<p style="">在编译过程中，必须选择Nginx模块，因为Nginx不支持模块的运行时间选择。</p>
<h3 style="" id="heading-42"><strong>生产中如何设置worker进程的数量呢</strong>？</h3>
<p style="">在有多个cpu的情况下，可以设置多个worker，worker进程的数量可以设置到和cpu的核心数一样多，如果在单个cpu上起多个worker进程，那么操作系统会在多个worker之间进行调度，这种情况会降低系统性能，如果只有一个cpu，那么只启动一个worker进程就可以了。</p>
<h3 style="" id="heading-43"><strong>nginx状态码</strong></h3>
<p style=""><strong>499</strong>：服务端处理时间过长，客户端主动关闭了连接。</p>
<p style=""><strong>502：</strong> (1).FastCGI进程是否已经启动</p>
<p style="">(2).FastCGI worker进程数是否不够
 <br>
 (3).FastCGI执行时间过长</p>
<ul>
 <li>
  <p style="">fastcgi_connect_timeout 300;</p>
 </li>
 <li>
  <p style="">fastcgi_send_timeout 300;</p>
 </li>
 <li>
  <p style="">fastcgi_read_timeout 300;</p>
 </li>
</ul>
<p style="">(4).FastCGI Buffer不够，nginx和apache一样，有前端缓冲限制，可以调整缓冲参数</p>
<ul>
 <li>
  <p style="">fastcgi_buffer_size 32k;</p>
 </li>
 <li>
  <p style="">fastcgi_buffers 8 32k;</p>
 </li>
</ul>
<p style="">(5). Proxy Buffer不够，如果你用了Proxying，调整 proxy_buffer_size 16k; proxy_buffers 4 16k; (6).php脚本执行时间过长</p>
<p style="">将php-fpm.conf的0s的0s改成一个时间</p>
<h3 style="" id="heading-44">各种报错码</h3>
<p style="">400 （错误请求） 服务器不理解请求的语法。</p>
<p style="">401 （未授权） 请求要求身份验证。 对于需要登录的网页，服务器可能返回此响应。</p>
<p style="">402 该状态码是为了将来可能的需求而预留的。</p>
<p style="">403 （禁止） 服务器拒绝请求。</p>
<p style="">404 （未找到） 服务器找不到请求的网页。</p>
<p style="">405 （方法禁用） 禁用请求中指定的方法。</p>
<p style="">406 （不接受） 无法使用请求的内容特性响应请求的网页。</p>
<p style="">407 （需要代理授权） 此状态代码与 401（未授权）类似，但指定请求者应当授权使用代理。</p>
<p style="">408 （请求超时） 服务器等候请求时发生超时。</p>
<p style="">409 （冲突） 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。</p>
<p style="">410 （已删除） 如果请求的资源已永久删除，服务器就会返回此响应。</p>
<p style="">411 （需要有效长度） 服务器不接受不含有效内容长度标头字段的请求。</p>
<p style="">412 （未满足前提条件） 服务器未满足请求者在请求中设置的其中一个前提条件。</p>
<p style="">413 （请求实体过大） 服务器无法处理请求，因为请求实体过大，超出服务器的处理能力。</p>
<p style="">414 （请求的 URI 过长） 请求的 URI（通常为网址）过长，服务器无法处理。</p>
<p style="">415 （不支持的媒体类型） 请求的格式不受请求页面的支持。</p>
<p style="">416 （请求范围不符合要求） 如果页面无法提供请求的范围，则服务器会返回此状态代码。</p>
<p style="">417 （未满足期望值） 服务器未满足"期望"请求标头字段的要求。</p>
<p style="">500 （服务器内部错误） 服务器遇到错误，无法完成请求。</p>
<p style="">501 （尚未实施） 服务器不具备完成请求的功能。 例如，服务器无法识别请求方法时可能会返回此代码。</p>
<p style="">502 （错误网关） 服务器作为网关或代理，从上游服务器收到无效响应。</p>
<p style="">503 （服务不可用） 服务器目前无法使用（由于超载或停机维护）。 通常，这只是暂时状态。</p>
<p style="">504 （网关超时） 服务器作为网关或代理，但是没有及时从上游服务器收到请求。</p>
<p style="">505 （HTTP 版本不受支持） 服务器不支持请求中所用的 HTTP 协议版本。</p>]]></description><guid isPermaLink="false">/archives/Nginx%E8%AF%A6%E8%A7%A3</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Ff1d9be6a67b381ae690596050fadc82b.webp&amp;size=m" type="image/jpeg" length="219788"/><category>Linux</category><category>Nginx</category><pubDate>Sun, 1 May 2022 19:48:00 GMT</pubDate></item><item><title><![CDATA[Linux VPS一键添加/删除Swap虚拟内存]]></title><link>https://blog.xkzs.cc/archives/LinuxVPS%E4%B8%80%E9%94%AE%E6%B7%BB%E5%8A%A0%2F%E5%88%A0%E9%99%A4Swap%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=Linux%20VPS%E4%B8%80%E9%94%AE%E6%B7%BB%E5%8A%A0%2F%E5%88%A0%E9%99%A4Swap%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98&amp;url=/archives/LinuxVPS%E4%B8%80%E9%94%AE%E6%B7%BB%E5%8A%A0%2F%E5%88%A0%E9%99%A4Swap%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98" width="1" height="1" alt="" style="opacity:0;"><!-- wp:heading -->
<h2>脚本</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p><strong>提示：</strong>脚本不支持<code>OpenVZ</code>架构，安装会自动退出。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>运行命令：</strong>保存为swap.sh sh swap.sh</p>
<!-- /wp:paragraph -->
<!-- wp:code -->
<pre class="wp-block-code"><code>#!/usr/bin/env bash

Green="\033[32m"
Font="\033[0m"
Red="\033[31m" 

#root权限
root_need(){
    if [[ $EUID -ne 0 ]]; then
        echo -e "${Red}Error:This script must be run as root!${Font}"
        exit 1
    fi
}

#检测ovz
ovz_no(){
    if [[ -d "/proc/vz" ]]; then
        echo -e "${Red}Your VPS is based on OpenVZ，not supported!${Font}"
        exit 1
    fi
}

add_swap(){
echo -e "${Green}请输入需要添加的swap，建议为内存的2倍！${Font}"
read -p "请输入swap数值:" swapsize

#检查是否存在swapfile
grep -q "swapfile" /etc/fstab

#如果不存在将为其创建swap
if [ $? -ne 0 ]; then
	echo -e "${Green}swapfile未发现，正在为其创建swapfile${Font}"
	fallocate -l ${swapsize}M /swapfile
	chmod 600 /swapfile
	mkswap /swapfile
	swapon /swapfile
	echo '/swapfile none swap defaults 0 0' &gt;&gt; /etc/fstab
         echo -e "${Green}swap创建成功，并查看信息：${Font}"
         cat /proc/swaps
         cat /proc/meminfo | grep Swap
else
	echo -e "${Red}swapfile已存在，swap设置失败，请先运行脚本删除swap后重新设置！${Font}"
fi
}

del_swap(){
#检查是否存在swapfile
grep -q "swapfile" /etc/fstab

#如果存在就将其移除
if [ $? -eq 0 ]; then
	echo -e "${Green}swapfile已发现，正在将其移除...${Font}"
	sed -i '/swapfile/d' /etc/fstab
	echo "3" &gt; /proc/sys/vm/drop_caches
	swapoff -a
	rm -f /swapfile
    echo -e "${Green}swap已删除！${Font}"
else
	echo -e "${Red}swapfile未发现，swap删除失败！${Font}"
fi
}

#开始菜单
main(){
root_need
ovz_no
clear
echo -e "———————————————————————————————————————"
echo -e "${Green}Linux VPS一键添加/删除swap脚本${Font}"
echo -e "${Green}1、添加swap${Font}"
echo -e "${Green}2、删除swap${Font}"
echo -e "———————————————————————————————————————"
read -p "请输入数字 [1-2]:" num
case "$num" in
    1)
    add_swap
    ;;
    2)
    del_swap
    ;;
    *)
    clear
    echo -e "${Green}请输入正确数字 [1-2]${Font}"
    sleep 2s
    main
    ;;
    esac
}
main</code></pre>
<!-- /wp:code -->
<!-- wp:paragraph -->
<p>然后根据选项进行操作，记得添加<code>swap</code>的时候填写纯数字，默认单位为<code>M</code>。
 <br>
 <a href="https://www.moerats.com/usr/picture/swap_add.png"></a></p>
<!-- /wp:paragraph -->]]></description><guid isPermaLink="false">/archives/LinuxVPS%E4%B8%80%E9%94%AE%E6%B7%BB%E5%8A%A0%2F%E5%88%A0%E9%99%A4Swap%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F7662501871bfb66130bac6093047acc3.webp&amp;size=m" type="image/jpeg" length="316304"/><category>Linux</category><pubDate>Mon, 11 Apr 2022 14:43:00 GMT</pubDate></item><item><title><![CDATA[Docker常用命令]]></title><link>https://blog.xkzs.cc/archives/Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&amp;url=/archives/Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4" width="1" height="1" alt="" style="opacity:0;"><!-- wp:heading {"level":3} -->
<h3>列出所有容器ID</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker ps -aq</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>查看所有运行或者不运行容器</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker ps -a</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>停止所有的container（容器），这样才能够删除其中的images：</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker stop $(docker ps -a -q) 或者 docker stop $(docker ps -aq) </code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>如果想要删除所有container（容器）的话再加一个指令：</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker rm $(docker ps -a -q) 或者 docker rm $(docker ps -aq) </code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>查看当前有些什么images</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker images</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>删除images（镜像），通过image的id来指定删除谁</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker rmi &lt;image id&gt;</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>想要删除untagged images，也就是那些id为的image的话可以用</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker rmi $(docker images | grep "^&lt;none&gt;" | awk "{print $3}")</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>要删除全部image（镜像）的话</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker rmi $(docker images -q)</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>强制删除全部image的话</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker rmi -f $(docker images -q)</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>从容器到宿主机复制</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker cp tomcat：/webapps/js/text.js /home/admin
docker  cp 容器名:  容器路径 宿主机路径</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>从宿主机到容器复制</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker cp /home/admin/text.js tomcat：/webapps/js
docker cp 宿主路径中文件      容器名  容器路径</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>删除所有停止的容器</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker container prune</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>删除所有不使用的镜像</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker image prune --force --all或者docker image prune -f -a</code></pre>
<!-- /wp:code -->
<!-- wp:heading {"level":3} -->
<h3>停止、启动、杀死、重启一个容器</h3>
<!-- /wp:heading -->
<!-- wp:code -->
<pre class="wp-block-code"><code>docker stop Name或者ID  
docker start Name或者ID  
docker kill Name或者ID  
docker restart name或者ID</code></pre>
<!-- /wp:code -->]]></description><guid isPermaLink="false">/archives/Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fd27cadb982d68b9dbace6ac2cde27d11.webp&amp;size=m" type="image/jpeg" length="152482"/><category>Linux</category><category>Docker</category><pubDate>Mon, 11 Apr 2022 14:38:00 GMT</pubDate></item><item><title><![CDATA[Markdown学习]]></title><link>https://blog.xkzs.cc/archives/Markdown%E5%AD%A6%E4%B9%A0</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=Markdown%E5%AD%A6%E4%B9%A0&amp;url=/archives/Markdown%E5%AD%A6%E4%B9%A0" width="1" height="1" alt="" style="opacity:0;"><!-- wp:html -->
<!-- wp:code -->
<pre class="wp-block-code"><code><code>#  Markdown学习

#	 Markdown 标题

#  一级

##  二级

###  三级

####  四级

#####  五级

######  六级

#	 Markdown 段落

*斜体文本*

_斜体文本_

**粗体文本**

__粗体文本__

***粗斜体文本***

___粗斜体文本___

---

~~删除线~~

&lt;u&gt;下划线&lt;/u&gt;

常见[^注释]。

[^注释]: 你看到的就是?

#  Markdown 列表

######	 无序列表

*+-

###### 有序列表

.

######  列表嵌套

1. 第一项

   - 第一个

   - 第二个

2. 第二项

   - 第一个
   - 第二个

3. 第三项

   + 第一个
   + 第二个

#  Markdown 区块

&gt; 区块引用

&gt; &gt; 第一层

&gt; &gt; 第二层

&gt; 最外层
&gt;
&gt; &gt; 第一层
&gt; &gt;
&gt; &gt; &gt; 第二层

&gt; 区块中使用列表
&gt;
&gt; 1. 第一项
&gt;    * 第一项
&gt; 2. 第二项
&gt;    * 第一项

&gt; 列表中使用区块
&gt;
&gt; * 第一项
&gt;
&gt; * &gt; learn
&gt;   &gt;
&gt;   &gt; Never give up!
&gt;
&gt; * 第二项

#  Markdown 代码

`Print()` 函数

```&lt;?php&gt;
echo 'Hello World!'
```

````javascript
```
````

#  Markdown 链接

[链接名称](链接地址)

[星空blog](https://blog.xkzs.icu/)

&lt;https://blog.xkzs.icu/&gt;

######  高级链接

这个链接用1作为网址变量[Google][google]

[google]: https://google.com/

#  Markdown 图片

![alt 属性文本]()

```
&lt;img src="图片路径" width="50%"&gt;
```

#  Markdown 表格

```
|  表头   | 表头  |
|  ----  | ----  |
| 单元格  | 单元格 |
| 单元格  | 单元格 |
|:-			 | :-:   | -:|
```

|  表头  |  表头  |
| :----: | :----: |
| 单元格 | 单元格 |

|      |      |      |
| :--- | :--: | ---: |

# 	Markdown 高级技巧

###### 目前支持的 HTML 元素有：`&lt;kbd&gt; &lt;b&gt; &lt;i&gt; &lt;em&gt; &lt;sup&gt; &lt;sub&gt; &lt;br&gt;`等

````html
使用 &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;Del&lt;/kbd&gt; 重启电脑
````

使用 &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;Del&lt;/kbd&gt; 重启电脑

###### 	转义 \

**文本加粗**

\*\*正常显示星号\*\\*

######	 Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号：

```html
\   反斜线
`   反引号
*   星号
_   下划线
{}  花括号
[]  方括号
()  小括号
#   井字号
+   加号
-   减号
.   英文句点
!   感叹号
```

######  公式

$$
\begin{Bmatrix}
   a &amp; b \\
   c &amp; d
\end{Bmatrix}
$$

$$
\begin{CD}
   A @&gt;a&gt;&gt; B \\
@VbVV @AAcA \\
   C @= D
\end{CD}
$$

######  画流程图、时序图(顺序图)、甘特图

1. **横向流程图源码格式：**

```mermaid
graph LR
A[方形] --&gt;B(圆角)
    B --&gt; C{条件a}
    C --&gt;|a=1| D[结果1]
    C --&gt;|a=2| E[结果2]
    F[横向流程图]
```

2. **竖向流程图源码格式：**

```mermaid
graph TD
A[方形] --&gt; B(圆角)
    B --&gt; C{条件a}
    C --&gt; |a=1| D[结果1]
    C --&gt; |a=2| E[结果2]
    F[竖向流程图]
```

3. **标准流程图源码格式：**

~~~flow
```flow
st=&gt;start: 开始框
op=&gt;operation: 处理框
cond=&gt;condition: 判断框(是或否?)
sub1=&gt;subroutine: 子流程
io=&gt;inputoutput: 输入输出框
e=&gt;end: 结束框
st-&gt;op-&gt;cond
cond(yes)-&gt;io-&gt;e
cond(no)-&gt;sub1(right)-&gt;op
```
~~~

4. **标准流程图源码格式（横向）：**

~~~flow
```flow
st=&gt;start: 开始框
op=&gt;operation: 处理框
cond=&gt;condition: 判断框(是或否?)
sub1=&gt;subroutine: 子流程
io=&gt;inputoutput: 输入输出框
e=&gt;end: 结束框
st(right)-&gt;op(right)-&gt;cond
cond(yes)-&gt;io(bottom)-&gt;e
cond(no)-&gt;sub1(right)-&gt;op
```
~~~

5. **UML时序图源码样例：**

```sequence
对象A-&gt;对象B: 对象B你好吗?（请求）
Note right of 对象B: 对象B的描述
Note left of 对象A: 对象A的描述(提示)
对象B--&gt;对象A: 我很好(响应)
对象A-&gt;对象B: 你真的好吗？
```

6. **UML时序图源码复杂样例：**

```sequence
Title: 标题：复杂使用
对象A-&gt;对象B: 对象B你好吗?（请求）
Note right of 对象B: 对象B的描述
Note left of 对象A: 对象A的描述(提示)
对象B--&gt;对象A: 我很好(响应)
对象B-&gt;小三: 你好吗
小三--&gt;&gt;对象A: 对象B找我了
对象A-&gt;对象B: 你真的好吗？
Note over 小三,对象B: 我们是朋友
participant C
Note right of C: 没人陪我玩
```

7. **UML标准时序图样例：**

```mermaid
%% 时序图例子,-&gt; 直线，--&gt;虚线，-&gt;&gt;实线箭头
  sequenceDiagram
    participant 张三
    participant 李四
    张三-&gt;王五: 王五你好吗？
    loop 健康检查
        王五-&gt;王五: 与疾病战斗
    end
    Note right of 王五: 合理 食物 &lt;br/&gt;看医生...
    李四--&gt;&gt;张三: 很好!
    王五-&gt;李四: 你怎么样?
    李四--&gt;王五: 很好!
```

8. **甘特图样例：**

```mermaid
%% 语法示例
        gantt
        dateFormat  YYYY-MM-DD
        title 软件开发甘特图
        section 设计
        需求                      :done,    des1, 2014-01-06,2014-01-08
        原型                      :active,  des2, 2014-01-09, 3d
        UI设计                     :         des3, after des2, 5d
    未来任务                     :         des4, after des3, 5d
        section 开发
        学习准备理解需求                      :crit, done, 2014-01-06,24h
        设计框架                             :crit, done, after des2, 2d
        开发                                 :crit, active, 3d
        未来任务                              :crit, 5d
        耍                                   :2d
        section 测试
        功能测试                              :active, a1, after des3, 3d
        压力测试                               :after a1  , 20h
        测试报告                               : 48h
```

</code></code></pre>
<!-- /wp:code -->
<!-- /wp:html -->]]></description><guid isPermaLink="false">/archives/Markdown%E5%AD%A6%E4%B9%A0</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F0b270c650863d652411b8d004c0bd17b.webp&amp;size=m" type="image/jpeg" length="268456"/><category>Markdown</category><category>Linux</category><pubDate>Fri, 25 Feb 2022 20:55:00 GMT</pubDate></item><item><title><![CDATA[全球网络实时地图]]></title><link>https://blog.xkzs.cc/archives/%E5%85%A8%E7%90%83%E7%BD%91%E7%BB%9C%E5%AE%9E%E6%97%B6%E5%9C%B0%E5%9B%BE</link><description><![CDATA[<img src="https://blog.xkzs.cc/plugins/feed/assets/telemetry.gif?title=%E5%85%A8%E7%90%83%E7%BD%91%E7%BB%9C%E5%AE%9E%E6%97%B6%E5%9C%B0%E5%9B%BE&amp;url=/archives/%E5%85%A8%E7%90%83%E7%BD%91%E7%BB%9C%E5%AE%9E%E6%97%B6%E5%9C%B0%E5%9B%BE" width="1" height="1" alt="" style="opacity:0;"><!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->
<!-- wp:html -->
<div>
 <iframe width="640" height="640" src="https://cybermap.kaspersky.com/cn/widget/dynamic/dark" frameborder="0"></iframe>
</div>
<!-- /wp:html -->
<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></description><guid isPermaLink="false">/archives/%E5%85%A8%E7%90%83%E7%BD%91%E7%BB%9C%E5%AE%9E%E6%97%B6%E5%9C%B0%E5%9B%BE</guid><dc:creator>Pluto</dc:creator><enclosure url="https://blog.xkzs.cc/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F4e77aaee4918d38a2bc907b22610d511.webp&amp;size=m" type="image/jpeg" length="61774"/><category>默认分类</category><pubDate>Fri, 25 Feb 2022 20:41:45 GMT</pubDate></item></channel></rss>