Site updated: 2022-11-08 14:48:03

This commit is contained in:
qinglong committed 2022-11-08 14:48:04 +08:00
1 parent 4270198fa4
commit ac5d1c1319
106 files changed
+213 -2926

No files matched your search

+12 -12
View File
@@ -11,7 +11,7 @@
"url": "https://blog.jingxiyuan.cn/2022/11/08/Nginx%E9%85%8D%E7%BD%AE-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/",
"title": "Nginx配置-反向代理",
"date_published": "2022-11-08T02:05:00.000Z",
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<ul>\n<li>所有配置方法和介绍均来至于网络搜索汇总,主要用于方便后期巩固学习。</li>\n</ul>\n<h4 id=\"何为反向代理\"><a class=\"anchor\" href=\"#何为反向代理\">#</a> 何为反向代理</h4>\n<ul>\n<li>在介绍反向代理之前,先来了解一下正向代理。</li>\n</ul>\n<p>__正向代理:__如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/08/991a203be1ec82b36e1f326376617d40.png\" alt=\"991a203be1ec82b36e1f326376617d40.png\" /><br />\n__反向代理:__看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/08/1c87e386a0ce624a3949bda443cf346d.png\" alt=\"1c87e386a0ce624a3949bda443cf346d.png\" /></p>\n<blockquote>\n<p>正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果是在服务器用,用户无感知,就是反向代理。</p>\n</blockquote>\n<h4 id=\"nginx配置文件\"><a class=\"anchor\" href=\"#nginx配置文件\">#</a> Nginx 配置文件</h4>\n<ul>\n<li>\n<p>在学习 Nginx 之前,要熟知它的配置文件,毕竟,下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。</p>\n</li>\n<li>\n<p>Nginx 默认的配置文件是在安装目录下的 conf 目录下,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。完整的配置文件,可以看一下文章最后。修改过 nginx.conf 配置文件,记得要重启 Nginx 服务(☆☆☆☆☆)</p>\n</li>\n<li>\n<p>配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):</p>\n</li>\n</ul>\n<figure class=\"highlight html\"><figcaption data-lang=\"HTML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre># 主进程叫master,负责管理子进程,子进程叫worker</pre></td></tr><tr><td data-num=\"2\"></td><td><pre># worker_processes配置项表示开启几个业务进程,一般和cpu核数有关</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>worker_processes 1;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>events &#123;</pre></td></tr><tr><td data-num=\"6\"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num=\"7\"></td><td><pre>&#125;</pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>http &#123;</pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\t# include表示可以引入其他文件,此处表示引入http mime类型</pre></td></tr><tr><td data-num=\"11\"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num=\"12\"></td><td><pre> default_type application/octet-stream;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num=\"15\"></td><td><pre></pre></td></tr><tr><td data-num=\"16\"></td><td><pre>\t# 虚拟主机,可以配置多个</pre></td></tr><tr><td data-num=\"17\"></td><td><pre> server &#123;</pre></td></tr><tr><td data-num=\"18\"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num=\"19\"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num=\"20\"></td><td><pre></pre></td></tr><tr><td data-num=\"21\"></td><td><pre> location / &#123;</pre></td></tr><tr><td data-num=\"22\"></td><td><pre> \t# 路径匹配之后,哪个目录下去匹配相应的网页,html是相对路径</pre></td></tr><tr><td data-num=\"23\"></td><td><pre> root html;</pre></td></tr><tr><td data-num=\"24\"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num=\"25\"></td><td><pre> &#125;</pre></td></tr><tr><td data-num=\"26\"></td><td><pre></pre></td></tr><tr><td data-num=\"27\"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num=\"28\"></td><td><pre> location = /50x.html &#123;</pre></td></tr><tr><td data-nuLine truncated
"content_html": "<h4 id=\"引言\"><a class=\"anchor\" href=\"#引言\">#</a> 引言</h4>\n<ul>\n<li>所有配置方法和介绍均来至于网络搜索汇总,主要用于方便后期巩固学习。</li>\n</ul>\n<h4 id=\"何为反向代理\"><a class=\"anchor\" href=\"#何为反向代理\">#</a> 何为反向代理</h4>\n<ul>\n<li>在介绍反向代理之前,先来了解一下正向代理。</li>\n</ul>\n<p>__正向代理:__如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/08/991a203be1ec82b36e1f326376617d40.png\" alt=\"991a203be1ec82b36e1f326376617d40.png\" /><br />\n__反向代理:__看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/08/1c87e386a0ce624a3949bda443cf346d.png\" alt=\"1c87e386a0ce624a3949bda443cf346d.png\" /></p>\n<blockquote>\n<p>正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果是在服务器用,用户无感知,就是反向代理。</p>\n</blockquote>\n<h4 id=\"nginx配置文件\"><a class=\"anchor\" href=\"#nginx配置文件\">#</a> Nginx 配置文件</h4>\n<ul>\n<li>\n<p>在学习 Nginx 之前,要熟知它的配置文件,毕竟,下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。</p>\n</li>\n<li>\n<p>Nginx 默认的配置文件是在安装目录下的 conf 目录下,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。完整的配置文件,可以看一下文章最后。修改过 nginx.conf 配置文件,记得要重启 Nginx 服务(☆☆☆☆☆)</p>\n</li>\n<li>\n<p>配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):</p>\n</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\"># 主进程叫 master,负责管理子进程,子进程叫 worker</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token comment\"># worker_processes 配置项表示开启几个业务进程,一般和 cpu 核数有关</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre>worker_processes 1;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>events <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>http <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\t<span class=\"token comment\"># include 表示可以引入其他文件,此处表示引入 http mime 类型</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num=\"12\"></td><td><pre> default_type application/octet<span class=\"token punctuation\">-</span>stream;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num=\"15\"></td><td><pre></pre></td></tr><tr><td data-num=\"16\"></td><td><pre>\t<span class=\"token comment\"># 虚拟主机,可以配置多个</span></pre></td></tr><tr><td data-num=\"17\"></td><td><pre> server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num=\"19\"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num=\"20\"></td><td><pre></pre></td></tr><tr><td data-num=\"21\"></td><td><pre> location / <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"22\"></td><td><pre> \t<span class=\"token comment\"># 路径匹配之后,哪个目录下去匹配相应的网页,html 是相对路径</span></pre></td></tr><tr><td data-num=\"23\"></td><td><pre> root hLine truncated
"tags": [
"Linux",
"服务",
@@ -25,7 +25,7 @@
"url": "https://blog.jingxiyuan.cn/2022/11/04/%E8%AE%B0%E4%B8%80%E6%AC%A1Vue%E9%A1%B9%E7%9B%AE%E7%9A%84%E9%83%A8%E7%BD%B2/",
"title": "记一次Vue项目的部署",
"date_published": "2022-11-04T07:21:00.000Z",
"content_html": "<h4 id=\"描述\"><a class=\"anchor\" href=\"#描述\">#</a> 描述</h4>\n<ul>\n<li>今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。</li>\n</ul>\n<h4 id=\"过程\"><a class=\"anchor\" href=\"#过程\">#</a> 过程</h4>\n<ul>\n<li>卸载旧的 nodejs(此命令会卸载掉相关依赖包)</li>\n</ul>\n<pre><code class=\"language-bash\">sudo apt autoremove --purge nodejs\n</code></pre>\n<ul>\n<li>安装 NodeJS</li>\n</ul>\n<pre><code class=\"language-bash\">curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - &amp;&amp; sudo apt-get install -y nodejs\n</code></pre>\n<ul>\n<li>安装 yarn</li>\n</ul>\n<pre><code class=\"language-bash\">curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg &gt;/dev/null\n\necho &quot;deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main&quot; | sudo tee /etc/apt/sources.list.d/yarn.list\n\nsudo apt-get update &amp;&amp; sudo apt-get install yarn\n</code></pre>\n<ul>\n<li>初始化 (到项目根目录执行)</li>\n</ul>\n<pre><code class=\"language-bash\">yarn install\n</code></pre>\n<ul>\n<li>编译(到项目根目录执行,完成后会生成 dist 目录)</li>\n</ul>\n<pre><code class=\"language-bash\">yarn build\n</code></pre>\n<ul>\n<li>安装 nginx</li>\n</ul>\n<pre><code class=\"language-bash\">apt install nginx\n</code></pre>\n<ul>\n<li>配置 nginx (编译 /etc/nginx/sites-available/default)</li>\n</ul>\n<pre><code class=\"language-yaml\">server &#123;\n listen 80 default_server;\n listen [::]:80 default_server;\n\n # SSL configuration\n #\n # listen 443 ssl default_server;\n # listen [::]:443 ssl default_server;\n #\n # Note: You should disable gzip for SSL traffic.\n # See: https://bugs.debian.org/773332\n #\n # Read up on ssl_ciphers to ensure a secure configuration.\n # See: https://bugs.debian.org/765782\n #\n # Self signed certs generated by the ssl-cert package\n # Don't use them in a production server!\n #\n # include snippets/snakeoil.conf;\n\n root /var/www/html;\n\n # Add index.php to the list if you are using PHP\n index index.html index.htm index.nginx-debian.html;\n\n server_name _;\n\n location /api &#123;\n proxy_pass http://localhost:8080;\n &#125;\n\n location / &#123;\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n #try_files $uri $uri/ =404;\n alias /opt/codes/dayu-tools-arbitrage-web/dist/;\n try_files $uri $uri/ @router;\n index index.html index.htm;\n &#125;\n\n location @router &#123;\n rewrite ^.*$ /index.html last;\n        &#125;\n}\n\n</code></pre>\n<h4 id=\"其它\"><a class=\"anchor\" href=\"#其它\">#</a> 其它</h4>\n<ul>\n<li>重新编译前需要先删除 dist 目录</li>\n</ul>\n<pre><code class=\"language-bash\">rm dist -fr\n\nyarn build\n</code></pre>\n",
"content_html": "<h4 id=\"描述\"><a class=\"anchor\" href=\"#描述\">#</a> 描述</h4>\n<ul>\n<li>今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。</li>\n</ul>\n<h4 id=\"过程\"><a class=\"anchor\" href=\"#过程\">#</a> 过程</h4>\n<ul>\n<li>卸载旧的 nodejs(此命令会卸载掉相关依赖包)</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">sudo</span> <span class=\"token function\">apt</span> autoremove <span class=\"token parameter variable\">--purge</span> nodejs</pre></td></tr></table></figure><ul>\n<li>安装 NodeJS</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">curl</span> <span class=\"token parameter variable\">-fsSL</span> https://deb.nodesource.com/setup_16.x <span class=\"token operator\">|</span> <span class=\"token function\">sudo</span> <span class=\"token parameter variable\">-E</span> <span class=\"token function\">bash</span> - <span class=\"token operator\">&amp;&amp;</span> <span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> <span class=\"token parameter variable\">-y</span> nodejs</pre></td></tr></table></figure><ul>\n<li>安装 yarn</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">curl</span> <span class=\"token parameter variable\">-sL</span> https://dl.yarnpkg.com/debian/pubkey.gpg <span class=\"token operator\">|</span> gpg <span class=\"token parameter variable\">--dearmor</span> <span class=\"token operator\">|</span> <span class=\"token function\">sudo</span> <span class=\"token function\">tee</span> /usr/share/keyrings/yarnkey.gpg <span class=\"token operator\">></span>/dev/null</pre></td></tr><tr><td data-num=\"2\"></td><td><pre></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token builtin class-name\">echo</span> <span class=\"token string\">\"deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main\"</span> <span class=\"token operator\">|</span> <span class=\"token function\">sudo</span> <span class=\"token function\">tee</span> /etc/apt/sources.list.d/yarn.list</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> update <span class=\"token operator\">&amp;&amp;</span> <span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> <span class=\"token function\">yarn</span></pre></td></tr></table></figure><ul>\n<li>初始化 (到项目根目录执行)</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">yarn</span> <span class=\"token function\">install</span></pre></td></tr></table></figure><ul>\n<li>编译(到项目根目录执行,完成后会生成 dist 目录)</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">yarn</span> build</pre></td></tr></table></figure><ul>\n<li>安装 nginx</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">apt</span> <span class=\"token function\">install</span> nginx</pre></td></tr></table></figure><ul>\n<li>配置 nginx (编译 /etc/nginx/sites-available/default)</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre> listen 80 default_server;</pre></td></tr><tr><td data-num=\"3\"></td><td><pre> listen <span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>80 default_server;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> <span class=\"token comment\"># SSL configuration</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre> <span class=\"token comment\">#</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> <span class=\"token comment\"># listen 443 ssl default_server;</Line truncated
"tags": [
"Linux",
"项目部署",
@@ -51,7 +51,7 @@
"url": "https://blog.jingxiyuan.cn/2022/11/02/2-dev-null%E5%92%8C-dev-null-2-1%E5%92%8C2-1-dev-null%E7%9A%84%E5%8C%BA%E5%88%AB/",
"title": "2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别",
"date_published": "2022-11-02T08:29:00.000Z",
"content_html": "<h4 id=\"区别\"><a class=\"anchor\" href=\"#区别\">#</a> 区别:</h4>\n<pre><code class=\"language-bash\">2&gt;/dev/null\n</code></pre>\n<p>意思就是把错误输出到 “黑洞”</p>\n<pre><code class=\"language-bash\">&gt;/dev/null 2&gt;&amp;1\n</code></pre>\n<p>默认情况是 1,也就是等同于 1&gt;/dev/null 2&gt;&amp;1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞”</p>\n<pre><code class=\"language-bash\">2&gt;&amp;1 &gt;/dev/null\n</code></pre>\n<p>意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕</p>\n<h4 id=\"解释\"><a class=\"anchor\" href=\"#解释\">#</a> 解释:</h4>\n<ol>\n<li>\n<p>文件描述符<br />\n Linux 系统预留三个文件描述符:0、1 和 2,他们的意义如下所示:<br />\n0—— 标准输入(stdin)<br />\n略...<br />\n1—— 标准输出(stdout)<br />\n在当前目录下,有且只有一个文件名称为 a.txt 的文件,这时我们运行这个命令【ls a.txt】, 就会获得一个标准输出 stdout 的输出结果:a.txt<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen629761046.jpg\" alt=\"\" /><br />\n2—— 标准错误(stderr)<br />\n在当前目录下,有且只有一个文件名称为 a.txt 的文件,我们运行命令【ls b.txt】,我们就会获得一个标准错误 stderr 的输出结果 “ls:无法访问 b.txt:没有这样的文件或目录”。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen629793578.jpg\" alt=\"\" /></p>\n</li>\n<li>\n<p>重定向<br />\n重定向的符号有两个:&gt; 或 &gt;&gt;,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举例如下:</p>\n</li>\n</ol>\n<ul>\n<li>\n<p>重定向标准输出 stdout<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen630033531.jpg\" alt=\"\" /><br />\n 如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将 a.txt 打印到屏幕。在紧接的 cat 操作后,可以发现本来应该被输出的内容被记录到 stdout.txt 中。</p>\n</li>\n<li>\n<p>重定向标准错误 stderr<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen630256640.jpg\" alt=\"\" /><br />\n 如上图所示,文件描述符 2,标准错误的重定向也是同样的原理被记录在了文件 stderr.txt 这个文件里面了。</p>\n</li>\n<li>\n<p>可以将 stderr 单独定向到一个文件,stdout 重定向到另一个文件</p>\n</li>\n</ul>\n<pre><code class=\"language-bash\">ls b.txt 2&gt; stderr.txt 1&gt;stdout.txt\n</code></pre>\n<ul>\n<li>也可以将 stderr 和 stdout 重定向到同一个文件</li>\n</ul>\n<pre><code class=\"language-bash\">ls b.txt &gt; output.txt 2&gt;&amp;1\n</code></pre>\n<ul>\n<li>或采用下面的方法,可以少写几个字,能达到同样的效果</li>\n</ul>\n<pre><code class=\"language-bash\">ls b.txt &amp;&gt; output.txt\nls b.txt &gt;&amp; output.txt #两个表达式效果一样的\n</code></pre>\n<ol start=\"3\">\n<li>Linux 特殊文件<br />\n /dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null 这个设备通常也被称为位桶(bit bucket)或黑洞。<br />\n所以,2&gt;/dev/null 的意思就是将标准错误 stderr 删掉。</li>\n</ol>\n",
"content_html": "<h4 id=\"区别\"><a class=\"anchor\" href=\"#区别\">#</a> 区别:</h4>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span>/dev/null</pre></td></tr></table></figure><p>意思就是把错误输出到 “黑洞”</p>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token operator\">></span>/dev/null <span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span><span class=\"token file-descriptor important\">&amp;1</span></pre></td></tr></table></figure><p>默认情况是 1,也就是等同于 1&gt;/dev/null 2&gt;&amp;1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞”</p>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span><span class=\"token file-descriptor important\">&amp;1</span> <span class=\"token operator\">></span>/dev/null</pre></td></tr></table></figure><p>意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕</p>\n<h4 id=\"解释\"><a class=\"anchor\" href=\"#解释\">#</a> 解释:</h4>\n<ol>\n<li>\n<p>文件描述符<br />\n Linux 系统预留三个文件描述符:0、1 和 2,他们的意义如下所示:<br />\n0—— 标准输入(stdin)<br />\n略...<br />\n1—— 标准输出(stdout)<br />\n在当前目录下,有且只有一个文件名称为 a.txt 的文件,这时我们运行这个命令【ls a.txt】, 就会获得一个标准输出 stdout 的输出结果:a.txt<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen629761046.jpg\" alt=\"\" /><br />\n2—— 标准错误(stderr)<br />\n在当前目录下,有且只有一个文件名称为 a.txt 的文件,我们运行命令【ls b.txt】,我们就会获得一个标准错误 stderr 的输出结果 “ls:无法访问 b.txt:没有这样的文件或目录”。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen629793578.jpg\" alt=\"\" /></p>\n</li>\n<li>\n<p>重定向<br />\n重定向的符号有两个:&gt; 或 &gt;&gt;,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举例如下:</p>\n</li>\n</ol>\n<ul>\n<li>\n<p>重定向标准输出 stdout<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen630033531.jpg\" alt=\"\" /><br />\n 如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将 a.txt 打印到屏幕。在紧接的 cat 操作后,可以发现本来应该被输出的内容被记录到 stdout.txt 中。</p>\n</li>\n<li>\n<p>重定向标准错误 stderr<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/11/01/newscreen630256640.jpg\" alt=\"\" /><br />\n 如上图所示,文件描述符 2,标准错误的重定向也是同样的原理被记录在了文件 stderr.txt 这个文件里面了。</p>\n</li>\n<li>\n<p>可以将 stderr 单独定向到一个文件,stdout 重定向到另一个文件</p>\n</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">ls</span> b.txt <span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span> stderr.txt <span class=\"token operator\"><span class=\"token file-descriptor important\">1</span>></span>stdout.txt</pre></td></tr></table></figure><ul>\n<li>也可以将 stderr 和 stdout 重定向到同一个文件</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">ls</span> b.txt <span class=\"token operator\">></span> output.txt <span class=\"token operator\"><span class=\"token file-descriptor important\">2</span>></span><span class=\"token file-descriptor important\">&amp;1</span></pre></td></tr></table></figure><ul>\n<li>或采用下面的方法,可以少写几个字,能达到同样的效果</li>\n</ul>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">ls</span> b.txt <span class=\"token operator\">&amp;></span> output.txt</pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token function\">ls</span> b.txt <span class=\"token operator\">>&amp;</span> output.txt <span class=\"token coLine truncated
"tags": [
"Linux",
"Shell",
@@ -90,7 +90,7 @@
"url": "https://blog.jingxiyuan.cn/2022/10/27/%E6%9E%81%E7%A9%BA%E9%97%B4web%E7%AB%AFhttps%E7%9B%B4%E8%BF%9Enginx%E9%85%8D%E7%BD%AE/",
"title": "极空间web端https直连nginx配置",
"date_published": "2022-10-27T05:34:00.000Z",
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>ip 直连一般都映射了 5055, 但是直接访问 5055 极空间只提供了 http 协议,如果希望使用 https 协议则必须使用其它端口进行访问。以下方案采用 nginx 反向代理实现,端口使用 10000 举例。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/27/2022-10-27-14-39-25.jpg\" alt=\"\" /></li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ol>\n<li>需要先把 10000 端口在路由器上做好映射。</li>\n<li>证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度)</li>\n<li>http 跳转 https 配置</li>\n</ol>\n<pre><code class=\"language-yaml\">server &#123;\n\t\tif ($scheme = http) &#123;\n\t\t\trewrite ^(.*)$ https://$host$1 permanent;\n\t\t&#125;\n&#125;\n</code></pre>\n<ol start=\"4\">\n<li>web 端口监听配置</li>\n</ol>\n<pre><code class=\"language-yaml\">#极空间-web\nserver &#123;\n\tlisten 10000 ssl http2; #ipv4\n\tlisten [::]:10000 ssl http2; #ipv6\n\tserver_name xxx.xxx.com; #填写自己的域名,主域名或者子域名\n\n\t#include /etc/nginx/conf.d/ssl/ssl_common.conf;\n\tssl_certificate_key /etc/nginx/conf.d/ssl/xxx.key; #加密证书\n\tssl_certificate /etc/nginx/conf.d/ssl/xxx.pem; #加密证书\n\tssl_session_timeout 1d;\n\tssl_session_cache shared:MozSSL:10m;\n\tssl_session_tickets off;\n\tssl_protocols TLSv1.2 TLSv1.3;\n\tssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;\n\tssl_prefer_server_ciphers on;\n\n #开启OCSP stapling\n\tssl_stapling on;\n\tssl_stapling_verify on;\n\n\tclient_max_body_size 128M;\n\n\tadd_header Strict-Transport-Security &quot;max-age=31536000; includeSubdomains; preload&quot;;\n\n\tproxy_send_timeout 180s; #设置发送超时时间\n proxy_read_timeout 180s; #设置读取超时时间\n\n\t# Prevent Information leaks\n\tproxy_hide_header X-Powered-By;\n\tproxy_hide_header Server;\n\tproxy_hide_header X-AspNetMvc-Version;\n\tproxy_hide_header X-AspNet-Version;\n\n\t# http security headers\n\tadd_header X-Content-Type-Options nosniff;\n\tadd_header Pragma no-cache;\n\tadd_header Cache-Control no-store;\n\tadd_header X-XSS-Protection &quot;1; mode=block&quot;;\n\tadd_header Referrer-Policy origin-when-cross-origin;\n\tadd_header X-Permitted-Cross-Domain-Policies none;\n add_header X-Frame-Options SAMEORIGIN; #允许同域嵌套\n\n\t# Add Security cookie flags\n\tproxy_cookie_path ~(.*) &quot;$1; SameSite=strict; secure; httponly&quot;;\n\n\t# Path to the root of your installation\n\tlocation / &#123;\n\t\tproxy_intercept_errors on;\n\t\tproxy_max_temp_file_size 0;\n\t\tproxy_set_header Host $host;\n\t\tproxy_set_header X-Real-IP $remote_addr;\n\t\tproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\t\tproxy_set_header X-Forwarded-Proto $scheme;\n \n\t\tproxy_pass http://极空间内网ip:5055; #这里设置你自己要跳转的局域网应用;\n\t\tproxy_redirect http://域名:5055/home https://域名:10000/home; #极空间在登陆后会跳转到http协议的5055端口,所以要在此替换为https协议的10000端口\n\t&#125;\n\n\terror_page 500 502 503 504 /500.html;\n\terror_page 400 404 /500.html;\n\tlocation = /500.html &#123;\n\t\troot /usr/share/nginx/html/; #错误html\n\t&#125;\n&#125;\n</code></pre>\n<h4 id=\"问题\"><a class=\"anchor\" href=\"#问题\">#</a> 问题</h4>\n<ul>\n<li>需要开启允许嵌套否则登陆后所有应用都是拒绝访问</li>\n<li>需要配置 proxy_redirect 替换响应 url,否则会跳转到默认 http 协议的 5055 端口</li>\n<li>如果配置 proxy_redirect 后无效可能需要清除浏览器缓存(F12 - 网络 - 右键点击 url 区域 - 清除浏览器缓存)</li>\n</ul>\n",
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>ip 直连一般都映射了 5055, 但是直接访问 5055 极空间只提供了 http 协议,如果希望使用 https 协议则必须使用其它端口进行访问。以下方案采用 nginx 反向代理实现,端口使用 10000 举例。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/27/2022-10-27-14-39-25.jpg\" alt=\"\" /></li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ol>\n<li>需要先把 10000 端口在路由器上做好映射。</li>\n<li>证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度)</li>\n<li>http 跳转 https 配置</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\t\tif ($scheme = http) <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\t\t\trewrite ^(.<span class=\"token important\">*)$</span> https<span class=\"token punctuation\">:</span>//$host$1 permanent;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>\t\t<span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr></table></figure><ol start=\"4\">\n<li>web 端口监听配置</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\">#极空间 - web</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\tlisten 10000 ssl http2; <span class=\"token comment\">#ipv4</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre>\tlisten <span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>10000 ssl http2; <span class=\"token comment\">#ipv6</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>\tserver_name xxx.xxx.com; <span class=\"token comment\">#填写自己的域名,主域名或者子域名</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>\t<span class=\"token comment\">#include /etc/nginx/conf.d/ssl/ssl_common.conf;</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre>\tssl_certificate_key /etc/nginx/conf.d/ssl/xxx.key; <span class=\"token comment\">#加密证书</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>\tssl_certificate /etc/nginx/conf.d/ssl/xxx.pem; <span class=\"token comment\">#加密证书</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\tssl_session_timeout 1d;</pre></td></tr><tr><td data-num=\"11\"></td><td><pre>\tssl_session_cache shared<span class=\"token punctuation\">:</span>MozSSL<span class=\"token punctuation\">:</span>10m;</pre></td></tr><tr><td data-num=\"12\"></td><td><pre>\tssl_session_tickets off;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre>\tssl_protocols TLSv1.2 TLSv1.3;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre>\tssl_ciphers ECDHE<span class=\"token punctuation\">-</span>ECDSA<span class=\"token punctuation\">-</span>AES128<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA256<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>RSA<span class=\"token punctuation\">-</span>AES128<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA256<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>ECDSA<span class=\"token punctuation\">-</span>AES256<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA384<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>RSA<span class=\"token punctuation\">-</span>AES256<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA384<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>ECDSA<span class=\"token punctuation\">-</span>CHACHA20<span class=\"token punctuation\">-</span>POLY1305<span class=\"token punctuation\">:</span>ECDHE<span class=\"token punctuation\">-</span>RSA<span class=\"token punctuation\">-</span>CHACHA20<span class=\"token punctuation\">-</span>POLY1305<span class=\"token punctuation\">:</span>DHE<span class=\"token punctuation\">-</span>RSA<span class=\"token punctuation\">-</span>AES128<span class=\"token punctuation\">-</span>GCM<span class=\"token punctuation\">-</span>SHA256<span class=\"token punctuation\">:</span>DHE<span class=\"tokLine truncated
"tags": [
"极空间",
"nginx",
@@ -104,7 +104,7 @@
"url": "https://blog.jingxiyuan.cn/2022/10/22/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
"title": "极空间Docker版青龙面板安装与配置",
"date_published": "2022-10-22T02:44:00.000Z",
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>青龙面板是一个支持 python3、javascript、shell、typescript 的定时任务管理面板。它支持在线管理脚本、环境变量、配置文件,支持在线查看日志及支持多种方式的消息通知。</li>\n</ul>\n<h4 id=\"安装\"><a class=\"anchor\" href=\"#安装\">#</a> 安装</h4>\n<ul>\n<li>本文使用的是<span class=\"exturl\" data-url=\"aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL3doeW91ci9xaW5nbG9uZw==\"> whyour/qinglong</span> 的镜像。</li>\n<li>路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/24/2022-10-24-19-29-06.jpg\" alt=\"\" /></li>\n</ul>\n<pre><code class=\"language-yaml\">#青龙面板装载路径\n/ql/data\n#博客装载路径(如果你不部署hexo博客可以不用配置)\n/root/.ssh  #ssh证书文件(如果你不用把hexo推送到git上可以不用配置)\n/blog     #hexo博客编译目录\n/blog/nginx_blog #nginx上放置博客的目录(例如:/Docker/nginx/html/blog)\n</code></pre>\n<ul>\n<li>端口<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/22/2022-10-22-11-02-195ea093b249c53244.jpg\" alt=\"\" /><br />\n <code>4000端口是hexo-admin使用的,如果你不用可以不配置</code></li>\n<li>环境<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/22/2022-10-22-11-02-19a0822966d88a012e.jpg\" alt=\"\" /></li>\n<li>登录<br />\n地址:<span class=\"exturl\" data-url=\"aHR0cDovL3huLS1JUC1odThkeTcwZTRtNWE6NTcwMA==\">http:// 极空间 IP:5700</span><br />\n 默认账号:admin<br />\n 默认密码:admin</li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>我主要用青龙面板跑京东的脚本,所以也只介绍相关的配置方法</li>\n<li>定时任务 (我使用的是 KingRan/KR 的集合库,以下是拉取命令)<br />\n <code>ql repo https://github.com/KingRan/KR.git &quot;jd_|jx_|jdCookie&quot; &quot;activity|backUp|wskey&quot; &quot;^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR&quot;</code></li>\n<li>定时规则(我是每 3 小时拉取一次,不要拉取太频繁否则可能被封)<br />\n <code>0 */3 * * *</code></li>\n<li>环境变量</li>\n</ul>\n<pre><code class=\"language-yaml\">名称:JD_COOKIE\n值:web京东登陆后按F12在网络tab页中的请求内查找cookie,然后复制pt_key=到pt_pin=等\n</code></pre>\n<ul>\n<li>配置文件 (主要修改和添加以下配置)</li>\n</ul>\n<pre><code class=\"language-yaml\">repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可\nRepoFileExtensions=&quot;js py ts&quot;\n钉钉(消息推送)\nexport DD_BOT_TOKEN=\nexport DD_BOT_SECRET=\n##开卡\nexport guaopencard_All=&quot;true&quot;\nexport guaopencard_addSku_All=&quot;true&quot;\nexport guaopencardRun_All=&quot;true&quot;\nexport guaopencard_draw=&quot;true&quot;\nexport JD_TRY=&quot;true&quot;\nexport exjxbeans=&quot;true&quot;\nexport DY_OPENALL=&quot;true&quot;\n#抽奖\nexport opencard_draw=3\n#开启脚本依赖文件缺失修复\nexport ec_fix_dep=&quot;true&quot; \n#开启脚本依赖文件更新\nexport ec_re_dep=&quot;true&quot; \n#清空购物车\nexport JD_CART_REMOVE=&quot;true&quot;\nexport JD_CART=&quot;true&quot;\n#去掉多余的双十一红包脚本\nexport FLCODE=''\n#加购物车抽奖\nexport RUN_CAR=true\n#停用小额免密支付\nexport JD_PAY_CONTRACT=true\n</code></pre>\n<ul>\n<li>依赖管理</li>\n</ul>\n<pre><code class=\"language-yaml\">#nodejs依赖\ncrypto-js\t\nprettytable\t\ndotenv\t\njsdom\t\ndate-fns\t\ntough-cookie\t\ntslib\t\nws@7.4.3\t\nts-md5\t\njsdom -g\t\njieba\t\nfs\t\nform-data\t\njson5\t\nglobal-agent\t\npng-js\t\n@types/node\t\nrequire\t\ntypescript\t\njs-base64\t\naxios\n#pythone依赖\nrequests\t\ncanvas\t\nping3\t\njieba\t\naiohttp\t\nPyExecJS\n#Linux依赖\nbizCode\nbizMsg\nlxml\n</code></pre>\n<h4 id=\"其它\"><a class=\"anchor\" href=\"#其它\">#</a> 其它</h4>\n<pre><code class=\"language-bash\">#配置国内源\npip config --global set global.index-url https://mirrors.aliyun.com/pypi/simple/\npip config --global set install.trusted-host https://mirrors.aliyun.com\n\n#升级pip\npip install --upgrade pip\n\n#更新青龙\nql update\n\n#已知要安装的依赖(不安装部分脚本任务会失败)\npnpm install ds\n\n#一键安装所有依赖(基于Faker一键脚本安装的青龙\n可通过执行/ql/data/scripts下的QLDependency.sh脚本安装,如脚本已经更新则通过下面命令执行\ncurl -fsSL https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh | sh\n\n#一般出现这种错误:(缺依赖)\nError: Cannot find module 'xx'\n执行pnpm inLine truncated
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>青龙面板是一个支持 python3、javascript、shell、typescript 的定时任务管理面板。它支持在线管理脚本、环境变量、配置文件,支持在线查看日志及支持多种方式的消息通知。</li>\n</ul>\n<h4 id=\"安装\"><a class=\"anchor\" href=\"#安装\">#</a> 安装</h4>\n<ul>\n<li>本文使用的是<span class=\"exturl\" data-url=\"aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL3doeW91ci9xaW5nbG9uZw==\"> whyour/qinglong</span> 的镜像。</li>\n<li>路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/24/2022-10-24-19-29-06.jpg\" alt=\"\" /></li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token comment\">#青龙面板装载路径</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>/ql/data</pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token comment\">#博客装载路径(如果你不部署 hexo 博客可以不用配置)</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre>/root/.ssh <span class=\"token comment\">#ssh 证书文件(如果你不用把 hexo 推送到 git 上可以不用配置)</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>/blog <span class=\"token comment\">#hexo 博客编译目录</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre>/blog/nginx_blog <span class=\"token comment\">#nginx 上放置博客的目录(例如:/Docker/nginx/html/blog)</span></pre></td></tr></table></figure><ul>\n<li>端口<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/22/2022-10-22-11-02-195ea093b249c53244.jpg\" alt=\"\" /><br />\n <code>4000端口是hexo-admin使用的,如果你不用可以不配置</code></li>\n<li>环境<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/22/2022-10-22-11-02-19a0822966d88a012e.jpg\" alt=\"\" /></li>\n<li>登录<br />\n地址:<span class=\"exturl\" data-url=\"aHR0cDovL3huLS1JUC1odThkeTcwZTRtNWE6NTcwMA==\">http:// 极空间 IP:5700</span><br />\n 默认账号:admin<br />\n 默认密码:admin</li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>我主要用青龙面板跑京东的脚本,所以也只介绍相关的配置方法</li>\n<li>定时任务 (我使用的是 KingRan/KR 的集合库,以下是拉取命令)<br />\n <code>ql repo https://github.com/KingRan/KR.git &quot;jd_|jx_|jdCookie&quot; &quot;activity|backUp|wskey&quot; &quot;^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR&quot;</code></li>\n<li>定时规则(我是每 3 小时拉取一次,不要拉取太频繁否则可能被封)<br />\n <code>0 */3 * * *</code></li>\n<li>环境变量</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>名称:JD_COOKIE</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>值:web京东登陆后按F12在网络tab页中的请求内查找cookie,然后复制pt_key=到pt_pin=等</pre></td></tr></table></figure><ul>\n<li>配置文件 (主要修改和添加以下配置)</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>RepoFileExtensions=\"js py ts\"</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>钉钉(消息推送)</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>export DD_BOT_TOKEN=</pre></td></tr><tr><td data-num=\"5\"></td><td><pre>export DD_BOT_SECRET=</pre></td></tr><tr><td data-num=\"6\"></td><td><pre><span class=\"token comment\">## 开卡</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>export guaopencard_All=\"true\"</pre></td></tr><tr><td data-num=\"8\"></td><td><pre>export guaopencard_addSku_All=\"true\"</pre></td></tr><tr><td data-num=\"9\"></td><td><pre>export guaopencardRun_All=\"true\"</pre></td></tr><tr><td data-num=\"10\"></td><td><pre>export guaopencard_draw=\"true\"</pre></td></tr><tr><td data-num=\"11\"></td><td><pre>export JD_TRY=\"true\"</pre></td></tr><tr><td data-num=\"12\"></td><td><pre>export exjxbeans=\"true\"</pre></td></tr><tr><td data-num=\"13\"></td><td><pre>export DY_OPENALL=\"true\"</pre></td></tr><tr><td data-num=\"14\"></td><td><pre><span class=\"token comment\">#抽奖</span></pre></td></tr><tr><td data-num=\"15\"></td><td><pre>export opencard_draw=3</pre></td></tr><tr><td data-num=\"16\"></td><td><pre><span class=\"token comment\">#开启脚本依赖文件缺失修复</span></pre></td></tr><tr><td data-num=\"17\"></td><td><pre>export ec_fix_dep=Line truncated
"tags": [
"极空间",
"Docker",
@@ -118,7 +118,7 @@
"url": "https://blog.jingxiyuan.cn/2022/10/21/Hexo-Theme-Shoka-Valine%E8%AF%84%E8%AE%BA%E9%85%8D%E7%BD%AE/",
"title": "Hexo + Theme.Shoka + Valine评论配置",
"date_published": "2022-10-21T03:48:00.000Z",
"content_html": "<ul>\n<li>valine 评论需要 LeanCloud 支持</li>\n</ul>\n<h4 id=\"leancloud注册\"><a class=\"anchor\" href=\"#leancloud注册\">#</a> LeanCloud 注册</h4>\n<ol>\n<li>到<span class=\"exturl\" data-url=\"aHR0cHM6Ly93d3cubGVhbmNsb3VkLmNu\"> LeanCloud</span> 网站完成注册。</li>\n<li>创建应用。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32.jpg\" alt=\"\" /></li>\n<li>名称随便取,方案看自己选择。开发版免费但是有限制,商业版收费无限制。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32516c410640de936a.jpg\" alt=\"\" /></li>\n<li>点击配置按钮进行配置。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32267554cf6f62d3eb.jpg\" alt=\"\" /></li>\n<li>点击设置 - 应用凭证可获取 App ID 和 App Key<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-328c330a6fdd48d2c3.jpg\" alt=\"\" /></li>\n<li>点击设置 - 安全中心根据自己的需求配置<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32204f14d87e95b59e.jpg\" alt=\"\" /></li>\n</ol>\n<h4 id=\"修改themeshoka配置\"><a class=\"anchor\" href=\"#修改themeshoka配置\">#</a> 修改 Theme.Shoka 配置</h4>\n<pre><code class=\"language-yaml\">valine:\n  appId: 粘贴5中获取的App ID #Your_appId\n appKey: 粘贴5中获取的App Key #Your_appkey\n placeholder: ヽ(○´∀`)ノ♪欢迎畅所欲言 # Comment box placeholder\n avatar: mp #默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro\n pageSize: 10 # Pagination size\n lang: zh-CN\n visitor: true # Article reading statistic 这个要设置为false,以免与 leancloud_visitors 突冲 \n NoRecordIP: false # Whether to record the commenter IP\n serverURLs: # When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)\n powerMode: true\n tagMeta:\n visitor: 新朋友\n master: 博主\n friend: 小伙伴\n investor: 金主粑粑\n tagColor:\n master: &quot;var(--color-orange)&quot;\n friend: &quot;var(--color-aqua)&quot;\n investor: &quot;var(--color-pink)&quot;\n tagMember:\n master:\n # - hash of master@email.com\n # - hash of master2@email.com\n friend:\n # - hash of friend@email.com\n # - hash of friend2@email.com\n investor:\n # - hash of investor1@email.com\n</code></pre>\n",
"content_html": "<ul>\n<li>valine 评论需要 LeanCloud 支持</li>\n</ul>\n<h4 id=\"leancloud注册\"><a class=\"anchor\" href=\"#leancloud注册\">#</a> LeanCloud 注册</h4>\n<ol>\n<li>到<span class=\"exturl\" data-url=\"aHR0cHM6Ly93d3cubGVhbmNsb3VkLmNu\"> LeanCloud</span> 网站完成注册。</li>\n<li>创建应用。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32.jpg\" alt=\"\" /></li>\n<li>名称随便取,方案看自己选择。开发版免费但是有限制,商业版收费无限制。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32516c410640de936a.jpg\" alt=\"\" /></li>\n<li>点击配置按钮进行配置。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32267554cf6f62d3eb.jpg\" alt=\"\" /></li>\n<li>点击设置 - 应用凭证可获取 App ID 和 App Key<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-328c330a6fdd48d2c3.jpg\" alt=\"\" /></li>\n<li>点击设置 - 安全中心根据自己的需求配置<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32204f14d87e95b59e.jpg\" alt=\"\" /></li>\n</ol>\n<h4 id=\"修改themeshoka配置\"><a class=\"anchor\" href=\"#修改themeshoka配置\">#</a> 修改 Theme.Shoka 配置</h4>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token key atrule\">valine</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre> appId<span class=\"token punctuation\">:</span> 粘贴5中获取的App ID <span class=\"token comment\">#Your_appId</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> <span class=\"token key atrule\">appKey</span><span class=\"token punctuation\">:</span> 粘贴5中获取的App Key <span class=\"token comment\">#Your_appkey</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre> <span class=\"token key atrule\">placeholder</span><span class=\"token punctuation\">:</span> ヽ(○´∀`)ノ♪欢迎畅所欲言 <span class=\"token comment\"># Comment box placeholder</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre> <span class=\"token key atrule\">avatar</span><span class=\"token punctuation\">:</span> mp <span class=\"token comment\">#默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre> <span class=\"token key atrule\">pageSize</span><span class=\"token punctuation\">:</span> <span class=\"token number\">10</span> <span class=\"token comment\"># Pagination size</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre> <span class=\"token key atrule\">lang</span><span class=\"token punctuation\">:</span> zh<span class=\"token punctuation\">-</span>CN</pre></td></tr><tr><td data-num=\"8\"></td><td><pre> <span class=\"token key atrule\">visitor</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span> <span class=\"token comment\"># Article reading statistic 这个要设置为 false,以免与 leancloud_visitors 突冲 </span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre> <span class=\"token key atrule\">NoRecordIP</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">false</span> <span class=\"token comment\"># Whether to record the commenter IP</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre> <span class=\"token key atrule\">serverURLs</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre> <span class=\"token key atrule\">powerMode</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre> <span class=\"token key atrule\">tagMeta</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre> <span class=\"token key atrule\">visitor</span><span class=\"token punctuation\">:</span> 新朋友</pre></td></tr><tr><td data-num=\"14\"></td><td><pre> <span class=\"token key atrule\">master</span><span class=\"token punctuation\">:</span> 博主</pre></td></tr><tr><td data-num=\"15\"></td><td><pre> <span class=\"token key atrule\">friend</span><span class=\"token punctuation\">:</span> 小伙伴</pre></td></tr><tr><td data-num=\"16\"></td><td><pre> <span class=\"token key atrule\">investor</span><span class=\"token punctuation\">:</span> 金主粑粑</pre></td></tr><tr><td data-num=\"17\"></td><td><pre> <span class=\"token key atrule\">tagColor</span><span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre> <sLine truncated
"tags": [
"极空间",
"Docker",
@@ -135,7 +135,7 @@
"url": "https://blog.jingxiyuan.cn/2022/10/21/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88mariadb%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
"title": "极空间Docker版mariadb安装与配置",
"date_published": "2022-10-21T01:06:00.000Z",
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>mariadb 属于 mysql 的一个分支,完全兼容 mysql,使用方式和 mysql 无区别。</li>\n</ul>\n<h4 id=\"安装\"><a class=\"anchor\" href=\"#安装\">#</a> 安装</h4>\n<ul>\n<li>本文介绍安装的镜像为 linuxserver_mariadb 的 10.5.13-r0-ls45,原则上使用最新版即可</li>\n<li>配置文件映射<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-09-20-56.jpg\" alt=\"\" /></li>\n<li>端口<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-09-21-49.jpg\" alt=\"\" /></li>\n<li>环境(MYSQL_ROOT_PASSWORD 为数据库 root 用户密码)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-09-22-43.jpg\" alt=\"\" /></li>\n<li>到此已经可以在内网使用了,连接方法同 mysql 一致</li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>此处配置为 nginx 反向代理,配置完成后可在外网连接访问</li>\n</ul>\n<pre><code class=\"language-yaml\">stream &#123;\n\t\n\t#极空间-docker-mariadb\n\tupstream mariadb &#123;\n\t\thash $remote_addr consistent;\n\t\tserver mariadb的ip:端口;\n\t&#125;\n\n\tserver &#123;\n\t\tlisten 监听端口;\n\n\t\tproxy_connect_timeout 30s;\n\t\tproxy_timeout 300s;\n\t\tproxy_pass mariadb;\n\t&#125;\n \n&#125;\n</code></pre>\n",
"content_html": "<h4 id=\"介绍\"><a class=\"anchor\" href=\"#介绍\">#</a> 介绍</h4>\n<ul>\n<li>mariadb 属于 mysql 的一个分支,完全兼容 mysql,使用方式和 mysql 无区别。</li>\n</ul>\n<h4 id=\"安装\"><a class=\"anchor\" href=\"#安装\">#</a> 安装</h4>\n<ul>\n<li>本文介绍安装的镜像为 linuxserver_mariadb 的 10.5.13-r0-ls45,原则上使用最新版即可</li>\n<li>配置文件映射<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-09-20-56.jpg\" alt=\"\" /></li>\n<li>端口<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-09-21-49.jpg\" alt=\"\" /></li>\n<li>环境(MYSQL_ROOT_PASSWORD 为数据库 root 用户密码)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-09-22-43.jpg\" alt=\"\" /></li>\n<li>到此已经可以在内网使用了,连接方法同 mysql 一致</li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>此处配置为 nginx 反向代理,配置完成后可在外网连接访问</li>\n</ul>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>stream <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\t</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\t<span class=\"token comment\">#极空间 - docker-mariadb</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre>\tupstream mariadb <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre>\t\thash $remote_addr consistent;</pre></td></tr><tr><td data-num=\"6\"></td><td><pre>\t\tserver mariadb的ip<span class=\"token punctuation\">:</span>端口;</pre></td></tr><tr><td data-num=\"7\"></td><td><pre>\t<span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>\tserver <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\t\tlisten 监听端口;</pre></td></tr><tr><td data-num=\"11\"></td><td><pre></pre></td></tr><tr><td data-num=\"12\"></td><td><pre>\t\tproxy_connect_timeout 30s;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre>\t\tproxy_timeout 300s;</pre></td></tr><tr><td data-num=\"14\"></td><td><pre>\t\tproxy_pass mariadb;</pre></td></tr><tr><td data-num=\"15\"></td><td><pre>\t<span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"16\"></td><td><pre> </pre></td></tr><tr><td data-num=\"17\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr></table></figure>",
"tags": [
"极空间",
"Docker",
@@ -150,7 +150,7 @@
"url": "https://blog.jingxiyuan.cn/2022/10/20/%E6%9E%81%E7%A9%BA%E9%97%B4Docker%E7%89%88Wordpress%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
"title": "极空间Docker版Wordpress安装与配置",
"date_published": "2022-10-20T00:56:00.000Z",
"content_html": "<h4 id=\"安装\"><a class=\"anchor\" href=\"#安装\">#</a> 安装</h4>\n<ul>\n<li>下载最新版 wordpress 镜像,如极空间无法下载,可到<span class=\"exturl\" data-url=\"aHR0cHM6Ly9wdWxsaW1hZ2UucGFzc2VybWEuY29tLw==\"> passerma 网站</span>下载。</li>\n<li>需要先在 mysql 中创建给 wordpress 使用的库。</li>\n<li>文件路径映射(目前极空间不能映射到高速盘,否则无法启动)。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/20/2022-10-20-08-58-31.png\" alt=\"\" /></li>\n<li>端口映射。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/20/2022-10-20-08-58-56.png\" alt=\"\" /></li>\n<li>通过映射的端口访问安装界面(一定要通过最终访问的页面进行安装,否则修改配置比较麻烦。如最终是域名访问,就先把域名解析代理等先配置好,再通过域名访问安装)。</li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。</li>\n</ul>\n<pre><code class=\"language-php\">if((!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) &#123;\n $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];\n $_SERVER['HTTPS'] = 'on';\n&#125;\n</code></pre>\n<ul>\n<li>后台安装插件时如果跳转到 ftp 配置,则需要在 wp-config.php 中加入以下代码,并到 wp-content 目录下创建 tmp 目录,最后还需要给 tmp 目录赋予读写权限。</li>\n</ul>\n<pre><code class=\"language-php\">define('WP_TEMP_DIR', ABSPATH.'wp-content/tmp');\ndefine('FS_METHOD', 'direct');\ndefine('FS_CHMOD_DIR', 0777);\ndefine('FS_CHMOD_FILE', 0777);\n</code></pre>\n<ul>\n<li>目录和文件所有者、组会自动变为 root,目前我是通过访问页面时通过命令修正。暂时未发现问题,如果不行则只能通过定时任务来定时修正了。需要在 wp-config.php 中加入以下代码。</li>\n</ul>\n<pre><code class=\"language-php\">chown('/var/www/html', 'www-data');\nchgrp('/var/www/html', 'www-data');\nchmod('/var/www/html/wp-content/plugins', 0777);\nchmod('/var/www/html/wp-content/themes', 0777);\nchmod('/var/www/html/wp-content/tmp', 0777);\n</code></pre>\n<ul>\n<li>隐藏后台访问需要在 wp-login.php 中加入以下代码,key、value 和 https://www.xxx.com/ 需要修改为自己的。修改后只能通过 https://www.xxx.com/wp-login.php?key=value 访问,其它访问需要登录的页面都会跳转到配置的 https://www.xxx.com/ 地址。</li>\n</ul>\n<pre><code class=\"language-php\">if($_GET['key'] != 'value') &#123;\n\theader('Location: https://www.xxx.com/');\n&#125;\n</code></pre>\n",
"content_html": "<h4 id=\"安装\"><a class=\"anchor\" href=\"#安装\">#</a> 安装</h4>\n<ul>\n<li>下载最新版 wordpress 镜像,如极空间无法下载,可到<span class=\"exturl\" data-url=\"aHR0cHM6Ly9wdWxsaW1hZ2UucGFzc2VybWEuY29tLw==\"> passerma 网站</span>下载。</li>\n<li>需要先在 mysql 中创建给 wordpress 使用的库。</li>\n<li>文件路径映射(目前极空间不能映射到高速盘,否则无法启动)。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/20/2022-10-20-08-58-31.png\" alt=\"\" /></li>\n<li>端口映射。<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/20/2022-10-20-08-58-56.png\" alt=\"\" /></li>\n<li>通过映射的端口访问安装界面(一定要通过最终访问的页面进行安装,否则修改配置比较麻烦。如最终是域名访问,就先把域名解析代理等先配置好,再通过域名访问安装)。</li>\n</ul>\n<h4 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h4>\n<ul>\n<li>如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。</li>\n</ul>\n<figure class=\"highlight php\"><figcaption data-lang=\"PHP\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTP_X_FORWARDED_HOST'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTP_X_FORWARDED_FOR'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span> <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTP_HOST'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTP_X_FORWARDED_HOST'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre> <span class=\"token variable\">$_SERVER</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'HTTPS'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'on'</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr></table></figure><ul>\n<li>后台安装插件时如果跳转到 ftp 配置,则需要在 wp-config.php 中加入以下代码,并到 wp-content 目录下创建 tmp 目录,最后还需要给 tmp 目录赋予读写权限。</li>\n</ul>\n<figure class=\"highlight php\"><figcaption data-lang=\"PHP\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">define</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'WP_TEMP_DIR'</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">ABSPATH</span><span class=\"token operator\">.</span><span class=\"token string single-quoted-string\">'wp-content/tmp'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token function\">define</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'FS_METHOD'</span><span class=\"token punctuation\">,</span> <span class=\"token string single-quoted-string\">'direct'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token function\">define</span><span class=\"token punctuation\">(</span><span class=\"token string single-quoted-string\">'FS_CHMOD_DIR'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0777</span><span class=\"token punctuation\">)</Line truncated
"tags": [
"极空间",
"Docker",
@@ -176,7 +176,7 @@
"url": "https://blog.jingxiyuan.cn/2022/10/18/%E6%90%AD%E5%BB%BAnagios%E7%9B%91%E6%8E%A7/",
"title": "搭建nagios监控",
"date_published": "2022-10-18T01:39:00.000Z",
"content_html": "<h4 id=\"监控端服务安装与配置\"><a class=\"anchor\" href=\"#监控端服务安装与配置\">#</a> 监控端服务安装与配置</h4>\n<ol>\n<li>nagios 需要安装主程序 core 和 nrpe(nagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见<span class=\"exturl\" data-url=\"aHR0cHM6Ly9zdXBwb3J0Lm5hZ2lvcy5jb20va2Iv\">官网</span></li>\n<li>nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处</li>\n<li>etc/objects/commands.cfg 用于保存 nagios 默认监控命令</li>\n<li>etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/18/image.png\" alt=\"\" /></li>\n<li>etc/objects/hosts 目录下配置需要被监控的主机信息<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/18/image2.png\" alt=\"\" /></li>\n<li>etc/objects/servers 目录下配置需要在被监控主机上执行的监控命令(第 4 项中的命令)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/18/image3.png\" alt=\"\" /></li>\n</ol>\n<h4 id=\"被监控端服务安装与配置\"><a class=\"anchor\" href=\"#被监控端服务安装与配置\">#</a> 被监控端服务安装与配置</h4>\n<ol>\n<li>被监控端需要安装 nrpe</li>\n<li>被监控端需要把监控端的命令写入到 nrpe 的配置文件中</li>\n<li>被监控端需要把命令执行脚本放入 libexec 目录中</li>\n<li>被监控端自动安装脚本(可借鉴)</li>\n</ol>\n<pre><code class=\"language-bash\">1、请先修改脚本中的服务端IP。\n2、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令,弹出选择窗口后选择no。\n3、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录,目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。\n\n#!/bin/bash\n#服务端ip\nSERVER_IP=10.10.10.121\n#安装目录\nINSTALL_HOME=`pwd`\n#安装ubuntu版本\nINSTALL_UBUNTU()\n&#123;\n\tsudo apt-get update\n\tsudo apt-get install -y autoconf automake gcc libc6 libmcrypt-dev make libssl-dev wget openssl\n\t\n\tcd /tmp\n\t#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz\n\tcp $INSTALL_HOME/Ubuntu/nrpe.tar.gz ./\n\ttar xzf nrpe.tar.gz\n\n\tcd /tmp/nrpe-nrpe-4.0.3/\n\tsudo ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/\n\tsudo make all\n\n\tsudo make install-groups-users\n\n\tsudo make install\n\n\tsudo make install-config\n\n\tsudo sh -c &quot;echo &gt;&gt; /etc/services&quot;\n\tsudo sh -c &quot;sudo echo '# Nagios services' &gt;&gt; /etc/services&quot;\n\tsudo sh -c &quot;sudo echo 'nrpe 5666/tcp' &gt;&gt; /etc/services&quot;\n\t\n\t#判断系统是高版本还是低版本\n\tVERSION=`lsb_release -r --short`\n\tIS_LOW_VERSION=`echo &quot;$VERSION &lt; 15&quot; | bc`\n\n\tif [ $IS_LOW_VERSION = 1 ]; then\n\t\t#低版本\n\t\tsudo make install-init\n\telse\n\t\t#高版本\n\t\tsudo make install-init\n\t\tsudo systemctl enable nrpe.service\n\tfi\n\t\n\tsudo mkdir -p /etc/ufw/applications.d\n\tsudo sh -c &quot;echo '[NRPE]' &gt; /etc/ufw/applications.d/nagios&quot;\n\tsudo sh -c &quot;echo 'title=Nagios Remote Plugin Executor' &gt;&gt; /etc/ufw/applications.d/nagios&quot;\n\tsudo sh -c &quot;echo 'description=Allows remote execution of Nagios plugins' &gt;&gt; /etc/ufw/applications.d/nagios&quot;\n\tsudo sh -c &quot;echo 'ports=5666/tcp' &gt;&gt; /etc/ufw/applications.d/nagios&quot;\n\tsudo ufw allow NRPE\n\tsudo ufw reload\n\t\n\tsudo sh -c &quot;sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg&quot;\n\t\n\tcd $INSTALL_HOME\n\tsudo cp ./sh/* /usr/local/nagios/libexec/\n\tsudo chmod +xr /usr/local/nagios/libexec/*\n\t\n\tsudo sh -c &quot;echo 'command[check_ping]=/usr/local/nagios/libexec/check_ping -H 127.0.0.1 -w 3000.0,80% -c 5000.0,100% -p 5' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \\$ARG1\\$' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tNETWORK_INDEX=1\n\tfor NETWORK_NAME in `cat /proc/nLine truncated
"content_html": "<h4 id=\"监控端服务安装与配置\"><a class=\"anchor\" href=\"#监控端服务安装与配置\">#</a> 监控端服务安装与配置</h4>\n<ol>\n<li>nagios 需要安装主程序 core 和 nrpe(nagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见<span class=\"exturl\" data-url=\"aHR0cHM6Ly9zdXBwb3J0Lm5hZ2lvcy5jb20va2Iv\">官网</span></li>\n<li>nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处</li>\n<li>etc/objects/commands.cfg 用于保存 nagios 默认监控命令</li>\n<li>etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/18/image.png\" alt=\"\" /></li>\n<li>etc/objects/hosts 目录下配置需要被监控的主机信息<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/18/image2.png\" alt=\"\" /></li>\n<li>etc/objects/servers 目录下配置需要在被监控主机上执行的监控命令(第 4 项中的命令)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/18/image3.png\" alt=\"\" /></li>\n</ol>\n<h4 id=\"被监控端服务安装与配置\"><a class=\"anchor\" href=\"#被监控端服务安装与配置\">#</a> 被监控端服务安装与配置</h4>\n<ol>\n<li>被监控端需要安装 nrpe</li>\n<li>被监控端需要把监控端的命令写入到 nrpe 的配置文件中</li>\n<li>被监控端需要把命令执行脚本放入 libexec 目录中</li>\n<li>被监控端自动安装脚本(可借鉴)</li>\n</ol>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token number\">1</span>、请先修改脚本中的服务端IP。</pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token number\">2</span>、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令,弹出选择窗口后选择no。</pre></td></tr><tr><td data-num=\"3\"></td><td><pre><span class=\"token number\">3</span>、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录,目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。</pre></td></tr><tr><td data-num=\"4\"></td><td><pre></pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token comment\">#!/bin/bash</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre><span class=\"token comment\">#服务端 ip</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre><span class=\"token assign-left variable\">SERVER_IP</span><span class=\"token operator\">=</span><span class=\"token number\">10.10</span>.10.121</pre></td></tr><tr><td data-num=\"8\"></td><td><pre><span class=\"token comment\">#安装目录</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre><span class=\"token assign-left variable\">INSTALL_HOME</span><span class=\"token operator\">=</span><span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token builtin class-name\">pwd</span><span class=\"token variable\">`</span></span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre><span class=\"token comment\">#安装 ubuntu 版本</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre><span class=\"token function-name function\">INSTALL_UBUNTU</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre><span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre>\t<span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> update</pre></td></tr><tr><td data-num=\"14\"></td><td><pre>\t<span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> <span class=\"token parameter variable\">-y</span> autoconf automake gcc libc6 libmcrypt-dev <span class=\"token function\">make</span> libssl-dev <span class=\"token function\">wget</span> openssl</pre></td></tr><tr><td data-num=\"15\"></td><td><pre>\t</pre></td></tr><tr><td data-num=\"16\"></td><td><pre>\t<span class=\"token builtin class-name\">cd</span> /tmp</pre></td></tr><tr><td data-num=\"17\"></td><td><pre>\t<span class=\"token comment\">#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz</span></pre></td></tr><tr><td data-num=\"18\"></td><td><pre>\t<span class=\"token function\">cp</span> <span class=\"token variable\">$INSTALL_HOME</span>/Ubuntu/nrpe.tar.gz ./</pre></td></tr><tr><td data-num=\"19\"></td><td><pre>\t<span class=\"token function\">tar</span> xzf nrpe.tar.gz</pre></td></tr><tr><td data-num=\"20\"></td><td><pre></pre></td></tr><tr><td data-num=\"21\"></td><td><pre>\t<span class=\"token builtin class-name\">cd</span> /tmp/nrpLine truncated
"tags": [
"Linux",
"服务",
@@ -189,7 +189,7 @@
"url": "https://blog.jingxiyuan.cn/2022/10/17/redis%E4%B8%BB%E4%BB%8E%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/",
"title": "redis主从基础配置",
"date_published": "2022-10-17T06:07:00.000Z",
"content_html": "<h4 id=\"主服务\"><a class=\"anchor\" href=\"#主服务\">#</a> 主服务</h4>\n<ol>\n<li>基础配置</li>\n</ol>\n<pre><code class=\"language-yaml\">port 6379\nrequirepass 123456(密码,建议不设置)\nvm-enabled no (虚拟内存,内存够的情况下可以不使用)\nmaxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)\nbind 127.0.0.1 (注释掉,否则不能外部连接)\nrdbchecksum no(持久化数据检查)\nlist-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)\nlist-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)\n</code></pre>\n<pre><code class=\"language-bash\">sysctl vm.overcommit_memory=1 (立即生效)\n修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)\n</code></pre>\n<ol start=\"2\">\n<li>禁用透明大页(影响性能)</li>\n</ol>\n<pre><code class=\"language-bash\">需要sudo su 切换到root身份(sudo 没用)\necho never &gt; /sys/kernel/mm/transparent_hugepage/enabled\n修改/etc/init.d/redis-server,加入/bin/echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled\n</code></pre>\n<ol start=\"3\">\n<li>修复 TCP 警告</li>\n</ol>\n<pre><code class=\"language-bash\">sysctl net.core.somaxconn=1024(立即生效)\n修改/etc/sysctl.conf添加net.core.somaxconn=1024\n</code></pre>\n<ol start=\"4\">\n<li>客户端缓冲区限制</li>\n</ol>\n<pre><code class=\"language-yaml\">客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。\n可以三种不同客户端的方式进行设置:\nnormal -&gt; 正常客户端\nslave -&gt; slave 和 MONITOR 客户端\npubsub -&gt; 至少订阅了一个 pubsub channel 或 pattern 的客户端\n语法 :\nclient-output-buffer-limit &lt;class&gt;&lt;hard limit&gt; &lt;soft limit&gt; &lt;soft seconds&gt;\n一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。\n例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,\n只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。\n把硬限制和软限制都设置为 0 来禁用该特性\nclient-output-buffer-limit normal 0 0 0\nclient-output-buffer-limit slave 5gb 512mb 60\nclient-output-buffer-limit pubsub 32mb 8mb 60\n</code></pre>\n<ol start=\"5\">\n<li>持久化配置</li>\n</ol>\n<pre><code class=\"language-yaml\">---关闭RDB持久化---\nsave &quot;&quot;\n默认配置如下:\nsave 900 1 #900秒内有1次更新就持久化\nsave 300 10 #300秒内有10次更新就持久化\nsave 60 10000 #60秒内有10000次更新就持久化\n---关闭RDB持久化---\n主从同步支持两种策略,即disk和socket方式。\n新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。\n一个RDB文件从master端传到slave端,分为两种情况:\n1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;\n2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。\nrepl-diskless-sync no 默认不使用diskless同步方式\nrepl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒\nrepl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒\nrepl-timeout 3600 设置超时时间\nrepl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。\nrepl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。\nbacklog设置的越Line truncated
"content_html": "<h4 id=\"主服务\"><a class=\"anchor\" href=\"#主服务\">#</a> 主服务</h4>\n<ol>\n<li>基础配置</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>port 6379</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>requirepass 123456(密码,建议不设置)</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>vm<span class=\"token punctuation\">-</span>enabled no (虚拟内存,内存够的情况下可以不使用)</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)</pre></td></tr><tr><td data-num=\"5\"></td><td><pre>bind 127.0.0.1 (注释掉,否则不能外部连接)</pre></td></tr><tr><td data-num=\"6\"></td><td><pre>rdbchecksum no(持久化数据检查)</pre></td></tr><tr><td data-num=\"7\"></td><td><pre>list<span class=\"token punctuation\">-</span>max<span class=\"token punctuation\">-</span>ziplist<span class=\"token punctuation\">-</span>size 1024(ziplist的最大容量,正数为自己指定的大小。负数<span class=\"token punctuation\">-</span>1到<span class=\"token punctuation\">-</span>5为对应的值4到64Kb)</pre></td></tr><tr><td data-num=\"8\"></td><td><pre>list<span class=\"token punctuation\">-</span>compress<span class=\"token punctuation\">-</span>depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)</pre></td></tr></table></figure><figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">sysctl</span> <span class=\"token assign-left variable\">vm.overcommit_memory</span><span class=\"token operator\">=</span><span class=\"token number\">1</span> (立即生效)</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>修改/etc/sysctl.conf添加vm.overcommit_memory<span class=\"token operator\">=</span><span class=\"token number\">1</span>(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)</pre></td></tr></table></figure><ol start=\"2\">\n<li>禁用透明大页(影响性能)</li>\n</ol>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>需要sudo <span class=\"token function\">su</span> 切换到root身份(sudo 没用)</pre></td></tr><tr><td data-num=\"2\"></td><td><pre><span class=\"token builtin class-name\">echo</span> never <span class=\"token operator\">></span> /sys/kernel/mm/transparent_hugepage/enabled</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>修改/etc/init.d/redis-server,加入/bin/echo never <span class=\"token operator\">></span> /sys/kernel/mm/transparent_hugepage/enabled</pre></td></tr></table></figure><ol start=\"3\">\n<li>修复 TCP 警告</li>\n</ol>\n<figure class=\"highlight bash\"><figcaption data-lang=\"bash\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre><span class=\"token function\">sysctl</span> <span class=\"token assign-left variable\">net.core.somaxconn</span><span class=\"token operator\">=</span><span class=\"token number\">1024</span>(立即生效)</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>修改/etc/sysctl.conf添加net.core.somaxconn<span class=\"token operator\">=</span><span class=\"token number\">1024</span></pre></td></tr></table></figure><ol start=\"4\">\n<li>客户端缓冲区限制</li>\n</ol>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。</pre></td></tr><tr><td data-num=\"2\"></td><td><pre>可以三种不同客户端的方式进行设置:</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>normal <span class=\"token punctuation\">-</span><span class=\"token punctuation\">></span> 正常客户端</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>slave <span class=\"token punctuation\">-</span><span class=\"token punctuation\">></span> slave 和 MONITOR 客户端</pre></td></tr><tr><td data-num=\"5\"></td><td><pre>pubsub <span class=\"token punctuation\">-</span><span class=\"token punctuation\">></span> 至少订阅了一个 pubsub channel 或 pattern 的客户端</pre></td></tr><tr><td data-num=\"6\"></td><td><pre><span class=\"token key atrule\">语法</span> <span class=\"token punctuation\">:</span></pre></td></tr><tr><td data-numLine truncated
"tags": [
"Linux",
"服务",
@@ -201,7 +201,7 @@
"url": "https://blog.jingxiyuan.cn/2022/10/14/nginx%E5%85%81%E8%AE%B8%E8%B7%A8%E5%9F%9F%E8%8E%B7%E5%8F%96cookies%E6%96%B9%E6%B3%95/",
"title": "nginx允许跨域获取cookie的方法",
"date_published": "2022-10-14T09:13:00.000Z",
"content_html": "<h4 id=\"使用场景\"><a class=\"anchor\" href=\"#使用场景\">#</a> 使用场景</h4>\n<p>  在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:</p>\n<pre><code class=\"language-yaml\">server &#123;\n\tlisten port ssl http2;\n\tserver_name xxx.com;\n\tssl_certificate_key /xxx.key;\n\tssl_certificate /xxx.pem;\n\tproxy_cookie_path ~(.*) &quot;$1; SameSite=None; secure; httponly&quot;;\n\n\tlocation / &#123;\n\t\t#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)\n\t\tadd_header X-Frame-Options ALLOWALL; #允许被所有域名镶套\n\t\tproxy_pass http://xxx;\n\t&#125;\n&#125;\n</code></pre>\n",
"content_html": "<h4 id=\"使用场景\"><a class=\"anchor\" href=\"#使用场景\">#</a> 使用场景</h4>\n<p>  在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:</p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\tlisten port ssl http2;</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\tserver_name xxx.com;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>\tssl_certificate_key /xxx.key;</pre></td></tr><tr><td data-num=\"5\"></td><td><pre>\tssl_certificate /xxx.pem;</pre></td></tr><tr><td data-num=\"6\"></td><td><pre>\tproxy_cookie_path ~(.<span class=\"token important\">*)</span> \"$1; SameSite=None; secure; httponly\";</pre></td></tr><tr><td data-num=\"7\"></td><td><pre></pre></td></tr><tr><td data-num=\"8\"></td><td><pre>\tlocation / <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"9\"></td><td><pre>\t\t<span class=\"token comment\">#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)</span></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\t\tadd_header X<span class=\"token punctuation\">-</span>Frame<span class=\"token punctuation\">-</span>Options ALLOWALL; <span class=\"token comment\">#允许被所有域名镶套</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre>\t\tproxy_pass http<span class=\"token punctuation\">:</span>//xxx;</pre></td></tr><tr><td data-num=\"12\"></td><td><pre>\t<span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"13\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr></table></figure>",
"tags": [
"Linux",
"服务",
@@ -269,7 +269,7 @@
"url": "https://blog.jingxiyuan.cn/2022/09/27/nginx%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E9%85%8D%E7%BD%AE/",
"title": "nginx负载均衡配置",
"date_published": "2022-09-27T06:45:00.000Z",
"content_html": "<h2 id=\"nginx负载均衡配置\"><a class=\"anchor\" href=\"#nginx负载均衡配置\">#</a> nginx 负载均衡配置</h2>\n<ol>\n<li>轮询(默认)</li>\n</ol>\n<p>  <em>每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。</em></p>\n<pre><code class=\"language-yaml\">upstream my_server &#123;\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n&#125;\n\nserver &#123;\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / &#123;\n\t\tproxy_pass http://my_server;\n\t&#125;\n\t\n&#125;\n</code></pre>\n<ol start=\"2\">\n<li>weight 权重策略</li>\n</ol>\n<p>  <em>weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。</em></p>\n<pre><code class=\"language-yaml\">upstream my_server &#123;\n\tserver 192.168.0.2:8080 weight=1;\n\tserver 192.168.0.3:8080 weight=2;\n&#125;\n\nserver &#123;\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / &#123;\n\t\tproxy_pass http://my_server;\n\t&#125;\n\t\n&#125;\n</code></pre>\n<ol start=\"3\">\n<li>ip_hash</li>\n</ol>\n<p>  <em>每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。</em></p>\n<pre><code class=\"language-yaml\">upstream my_server &#123;\n\tip_hash;\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n&#125;\n\nserver &#123;\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / &#123;\n\t\tproxy_pass http://my_server;\n\t&#125;\n\t\n&#125;\n</code></pre>\n<ol start=\"4\">\n<li>fair (第三方)</li>\n</ol>\n<p>  <em>按后端服务器的响应时间来分配请求,响应时间短的优先分配。</em></p>\n<pre><code class=\"language-yaml\">upstream my_server &#123;\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n\tfair;\n&#125;\n\nserver &#123;\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / &#123;\n\t\tproxy_pass http://my_server;\n\t&#125;\n\t\n&#125;\n</code></pre>\n<ol start=\"5\">\n<li>动静分离</li>\n</ol>\n<p>  <em>把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。</em></p>\n",
"content_html": "<h2 id=\"nginx负载均衡配置\"><a class=\"anchor\" href=\"#nginx负载均衡配置\">#</a> nginx 负载均衡配置</h2>\n<ol>\n<li>轮询(默认)</li>\n</ol>\n<p>  <em>每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。</em></p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>upstream my_server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\tserver 192.168.0.2<span class=\"token punctuation\">:</span>8080;</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\tserver 192.168.0.3<span class=\"token punctuation\">:</span>8080;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre></pre></td></tr><tr><td data-num=\"6\"></td><td><pre>server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>\tlisten 80;</pre></td></tr><tr><td data-num=\"8\"></td><td><pre>\tserver_name 192.168.0.1;</pre></td></tr><tr><td data-num=\"9\"></td><td><pre></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\t<span class=\"token comment\"># Path to the root of your installation</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre>\tlocation / <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre>\t\tproxy_pass http<span class=\"token punctuation\">:</span>//my_server;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre>\t<span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"14\"></td><td><pre>\t</pre></td></tr><tr><td data-num=\"15\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr></table></figure><ol start=\"2\">\n<li>weight 权重策略</li>\n</ol>\n<p>  <em>weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。</em></p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>upstream my_server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\tserver 192.168.0.2<span class=\"token punctuation\">:</span>8080 weight=1;</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\tserver 192.168.0.3<span class=\"token punctuation\">:</span>8080 weight=2;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"5\"></td><td><pre></pre></td></tr><tr><td data-num=\"6\"></td><td><pre>server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>\tlisten 80;</pre></td></tr><tr><td data-num=\"8\"></td><td><pre>\tserver_name 192.168.0.1;</pre></td></tr><tr><td data-num=\"9\"></td><td><pre></pre></td></tr><tr><td data-num=\"10\"></td><td><pre>\t<span class=\"token comment\"># Path to the root of your installation</span></pre></td></tr><tr><td data-num=\"11\"></td><td><pre>\tlocation / <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre>\t\tproxy_pass http<span class=\"token punctuation\">:</span>//my_server;</pre></td></tr><tr><td data-num=\"13\"></td><td><pre>\t<span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"14\"></td><td><pre>\t</pre></td></tr><tr><td data-num=\"15\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr></table></figure><ol start=\"3\">\n<li>ip_hash</li>\n</ol>\n<p>  <em>每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。</em></p>\n<figure class=\"highlight yaml\"><figcaption data-lang=\"YAML\"></figcaption><table><tr><td data-num=\"1\"></td><td><pre>upstream my_server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"2\"></td><td><pre>\tip_hash;</pre></td></tr><tr><td data-num=\"3\"></td><td><pre>\tserver 192.168.0.2<span class=\"token punctuation\">:</span>8080;</pre></td></tr><tr><td data-num=\"4\"></td><td><pre>\tserver 192.168.0.3<span class=\"token punctuation\">:</span>8080;</pre></td></tr><tr><td data-num=\"5\"></td><td><pre><span class=\"token punctuation\">&#125;</span></pre></td></tr><tr><td data-num=\"6\"></td><td><pre></pre></td></tr><tr><td data-num=\"7\"></td><td><pre>server <span class=\"token punctuation\">&#123;</span></pre></td></tr><tr><td data-num=\"8\"></td><td><pre>\tlisten 80;</pre></td></tr><tr><td data-num=\"9\"></td><td><pre>\tserver_name 192.168.0.1;</pre></td></tr><tr><td data-num=\"10\"></td><td><pre></pre></td></tr><tr><td data-num=\"11\"></td><td><pre>\t<span class=\"token comment\"># Path to the root of your installation</span>Line truncated
"tags": [
"Linux",
"服务",