From ac5d1c131949d94ff1955861c42a30137ec06c6f Mon Sep 17 00:00:00 2001 From: qinglong Date: Tue, 8 Nov 2022 14:48:04 +0800 Subject: [PATCH] Site updated: 2022-11-08 14:48:03 --- 2022/09/14/Hexo安装摸索/index.html | 16 +- .../index.html | 2 +- .../index.html | 16 +- .../index.html | 2 +- 2022/09/22/protobuf生成js文件/index.html | 2 +- .../index.html | 9 +- .../index.html | 2 +- 2022/09/27/nginx负载均衡配置/index.html | 64 +- 2022/09/28/深深的挫败和无助感/index.html | 2 +- 2022/10/06/Nginx配置iframe访问/index.html | 2 +- 2022/10/11/svn库转git库/index.html | 2 +- .../使用picgo上传图片到chevereto/index.html | 2 +- .../nginx允许跨域获取cookies方法/index.html | 15 +- 2022/10/17/redis主从基础配置记录/index.html | 78 +- 2022/10/18/搭建nagios监控/index.html | 220 +--- 2022/10/19/长了一岁/index.html | 2 +- .../index.html | 18 +- .../index.html | 31 +- .../index.html | 19 +- .../index.html | 98 +- .../极空间web端https直连nginx配置/index.html | 71 +- .../index.html | 2 +- 2022/11/01/360独立版小工具/index.html | 2 +- .../index.html | 9 +- 2022/11/03/上班了/index.html | 2 +- 2022/11/04/记一次Vue项目的部署/index.html | 60 +- 2022/11/08/Nginx配置-反向代理/index.html | 201 +--- 404.html | 2 +- about/me.html | 2 +- archives/2022/09/index.html | 2 +- archives/2022/10/index.html | 2 +- archives/2022/10/page/2/index.html | 2 +- archives/2022/11/index.html | 2 +- archives/2022/index.html | 2 +- archives/2022/page/2/index.html | 2 +- archives/2022/page/3/index.html | 2 +- archives/index.html | 2 +- atom.xml | 1007 +---------------- categories/Linux/Shell/index.html | 2 +- categories/Linux/index.html | 2 +- categories/Linux/服务/Nginx/index.html | 2 +- categories/Linux/服务/index.html | 2 +- categories/Linux/项目部署/index.html | 2 +- categories/Windows/index.html | 2 +- categories/Windows/工具/index.html | 2 +- categories/index.html | 2 +- categories/极空间/Docker/Hexo/index.html | 2 +- categories/极空间/Docker/index.html | 2 +- categories/极空间/index.html | 2 +- categories/生活/index.html | 2 +- categories/生活/心得体会/index.html | 2 +- categories/生活/心情/index.html | 2 +- feed.json | 24 +- index.html | 2 +- page/2/index.html | 2 +- page/3/index.html | 2 +- rss.xml | 1007 +---------------- tags/2-1/index.html | 2 +- tags/360小工具/index.html | 2 +- tags/Hexo-admin/index.html | 2 +- tags/Hexo/index.html | 2 +- tags/NodeJS/index.html | 2 +- tags/PicGo/index.html | 2 +- tags/Shell/index.html | 2 +- tags/Shoka/index.html | 2 +- tags/Valine/index.html | 2 +- tags/Windows10/index.html | 2 +- tags/Windows11/index.html | 2 +- tags/Wordpress/index.html | 2 +- tags/algolia/index.html | 2 +- tags/chevereto/index.html | 2 +- tags/cookie/index.html | 2 +- tags/docker/index.html | 2 +- tags/git/index.html | 2 +- tags/https/index.html | 2 +- tags/iframe/index.html | 2 +- tags/index.html | 2 +- tags/js/index.html | 2 +- tags/mariadb/index.html | 2 +- tags/mysql/index.html | 2 +- tags/nagios/index.html | 2 +- tags/netty/index.html | 2 +- tags/nginx/index.html | 2 +- tags/protobuf/index.html | 2 +- tags/redis/index.html | 2 +- tags/socketIO/index.html | 2 +- tags/svn/index.html | 2 +- tags/vue/index.html | 2 +- tags/web/index.html | 2 +- tags/yarn/index.html | 2 +- tags/博客/index.html | 2 +- tags/反向代理/index.html | 2 +- tags/图床/index.html | 2 +- tags/图片上传/index.html | 2 +- tags/定时任务/index.html | 2 +- tags/心情/index.html | 2 +- tags/搜索/index.html | 2 +- tags/服务监控/index.html | 2 +- tags/极空间/index.html | 2 +- tags/背景音乐/index.html | 2 +- tags/自动更新/index.html | 2 +- tags/评论/index.html | 2 +- tags/负载均衡/index.html | 2 +- tags/踩坑/index.html | 2 +- tags/郁闷/index.html | 2 +- tags/青龙面板/index.html | 2 +- 106 files changed, 213 insertions(+), 2926 deletions(-) diff --git a/2022/09/14/Hexo安装摸索/index.html b/2022/09/14/Hexo安装摸索/index.html index 275cc23c7..6d344af06 100644 --- a/2022/09/14/Hexo安装摸索/index.html +++ b/2022/09/14/Hexo安装摸索/index.html @@ -1,15 +1 @@ -Hexo 安装摸索 - Hexo - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# hexo 博客安装

  1. 安装 nodejs

  2. 安装 git

  3. 安装 hexo(windows 需进入 git bash)

    npm install -g hexo-cli

  4. 初始化博客目录

    hexo init blog

  5. 进入博客目录

    cd blog

  6. 初始化 hexo 到博客目录

    npm install

# shoka 主题安装

  1. 下载主题

    git clone https://github.com/amehime/hexo-theme-shoka.git ./themes/shoka

  2. 卸载 hexo-renderer-marked 以及别的 markdown 文件渲染器

    npm un hexo-renderer-marked --save

  3. 安装(md 文件渲染器,压缩 css/js/html)

    npm i hexo-renderer-multi-markdown-it --save

  4. 安装(给生成的 css 文件们添加浏览器前缀)

    npm i hexo-autoprefixer --save

  5. 安装(站内搜索功能)

    npm i hexo-algoliasearch --save

  6. 安装(文章或站点字数及阅读时间统计)

    npm i hexo-symbols-count-time --save

  7. 安装(生成 Feed 文件)

    npm i hexo-feed --save

# Hexo 部分常用命令

  • 清除静态文件

    hexo clean

  • 生成静态文件

    hexo g

  • 安装 git 推送插件

    npm install hexo-deployer-git --save

  • 推送静态文件到 git

    hexo d

# 安装 hexo-admin(编写博客插件)

admin:
-username: username
-password_hash: xxxxxx
-secret: 'my super secret phrase' #用单引号包裹
-deployCommand: 'hexo_publish.sh' #windows用hexo_publish.bat,linux用hexo_publish.sh
-

# hexo_publish.sh

#!/bin/bash
-
-hexo clean
-hexo g
-hexo d
-

# hexo_publish.bat

@echo off
-cd D:\blog
-d:
-@cmd /c "hexo clean&& hexo g&&hexo d&&echo success"
-
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +Hexo 安装摸索 - Hexo - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# hexo 博客安装

  1. 安装 nodejs

  2. 安装 git

  3. 安装 hexo(windows 需进入 git bash)

    npm install -g hexo-cli

  4. 初始化博客目录

    hexo init blog

  5. 进入博客目录

    cd blog

  6. 初始化 hexo 到博客目录

    npm install

# shoka 主题安装

  1. 下载主题

    git clone https://github.com/amehime/hexo-theme-shoka.git ./themes/shoka

  2. 卸载 hexo-renderer-marked 以及别的 markdown 文件渲染器

    npm un hexo-renderer-marked --save

  3. 安装(md 文件渲染器,压缩 css/js/html)

    npm i hexo-renderer-multi-markdown-it --save

  4. 安装(给生成的 css 文件们添加浏览器前缀)

    npm i hexo-autoprefixer --save

  5. 安装(站内搜索功能)

    npm i hexo-algoliasearch --save

  6. 安装(文章或站点字数及阅读时间统计)

    npm i hexo-symbols-count-time --save

  7. 安装(生成 Feed 文件)

    npm i hexo-feed --save

# Hexo 部分常用命令

  • 清除静态文件

    hexo clean

  • 生成静态文件

    hexo g

  • 安装 git 推送插件

    npm install hexo-deployer-git --save

  • 推送静态文件到 git

    hexo d

# 安装 hexo-admin(编写博客插件)

admin:
username: username
password_hash: xxxxxx
secret: 'my super secret phrase' #用单引号包裹
deployCommand: 'hexo_publish.sh' #windows 用 hexo_publish.bat,linux 用 hexo_publish.sh

# hexo_publish.sh

#!/bin/bash
hexo clean
hexo g
hexo d

# hexo_publish.bat

@echo off
cd D:\blog
d:
@cmd /c "hexo clean&& hexo g&&hexo d&&echo success"
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/09/16/极空间chevereto图床docker版安装/index.html b/2022/09/16/极空间chevereto图床docker版安装/index.html index 24fa9a821..1a314ea47 100644 --- a/2022/09/16/极空间chevereto图床docker版安装/index.html +++ b/2022/09/16/极空间chevereto图床docker版安装/index.html @@ -1 +1 @@ -极空间 chevereto 图床 docker 版安装 - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 安装准备

  1. 需要先安装好 mysql 数据库

  2. 选择版本,1.5 版以前支持中文,之后被维护的团队删除只支持英文

  3. 本文介绍使用的是 linuxserver_chevereto 的镜像

  4. 需要预先创建好给 chevereto 使用的库、账户、密码

  • 经过测试,使用 surenkid_chevereto 的镜像可以完美支持多国语言,配置同 linuxserver_chevereto 一样


# 容器配置

  1. 映射路径(不要放在高速盘,否则会有权限问题)
    6150d69d9a170d96e66ca69420f8c4e8.png

  2. 端口
    08eafb3b30a7eb9b0c0be26ea7a1502a.png

  3. 环境(puid 和 pgid 使用 1000,不要使用 0,否则会报错)
    01567ca9f31f87f832276be35cc4554b.png

# 初始化配置

  1. 使用 http:// 极空间 ip:81 (端口号使用上面配置的,我配置的是 81) 进行 web 访问(数据库配置)
    0.png

  2. 管理员配置(注意 website 配置选择个人,除非需要提供给其它人注册)
    1.png
    2.png

  3. 默认上传大小是 2M,可通过修改 php.ini 配置提升(路径 /etc/php7/php.ini 查找 upload_max_filesize 和 post_max_size 进行修改)。之后用管理员登录通过页面 http://xxx/dashboard/settings/image-upload 修改。
    upload_max_filesize = 256M
    post_max_size = 256M
    max_execution_time = 300
    max_input_time = 300
    memory_limit = 1024M

# 安装完成

  1. 作为图片管理和链接分享服务完全够用。图片链接 url 支持的也很全面。
    2022-09-16-14-52-29.png
    2022-09-16-14-54-58.png
    2022-09-16-14-56-13.png
\ No newline at end of file +极空间 chevereto 图床 docker 版安装 - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 安装准备

  1. 需要先安装好 mysql 数据库

  2. 选择版本,1.5 版以前支持中文,之后被维护的团队删除只支持英文

  3. 本文介绍使用的是 linuxserver_chevereto 的镜像

  4. 需要预先创建好给 chevereto 使用的库、账户、密码

  • 经过测试,使用 surenkid_chevereto 的镜像可以完美支持多国语言,配置同 linuxserver_chevereto 一样


# 容器配置

  1. 映射路径(不要放在高速盘,否则会有权限问题)
    6150d69d9a170d96e66ca69420f8c4e8.png

  2. 端口
    08eafb3b30a7eb9b0c0be26ea7a1502a.png

  3. 环境(puid 和 pgid 使用 1000,不要使用 0,否则会报错)
    01567ca9f31f87f832276be35cc4554b.png

# 初始化配置

  1. 使用 http:// 极空间 ip:81 (端口号使用上面配置的,我配置的是 81) 进行 web 访问(数据库配置)
    0.png

  2. 管理员配置(注意 website 配置选择个人,除非需要提供给其它人注册)
    1.png
    2.png

  3. 默认上传大小是 2M,可通过修改 php.ini 配置提升(路径 /etc/php7/php.ini 查找 upload_max_filesize 和 post_max_size 进行修改)。之后用管理员登录通过页面 http://xxx/dashboard/settings/image-upload 修改。
    upload_max_filesize = 256M
    post_max_size = 256M
    max_execution_time = 300
    max_input_time = 300
    memory_limit = 1024M

# 安装完成

  1. 作为图片管理和链接分享服务完全够用。图片链接 url 支持的也很全面。
    2022-09-16-14-52-29.png
    2022-09-16-14-54-58.png
    2022-09-16-14-56-13.png
\ No newline at end of file diff --git a/2022/09/17/Hexo-Theme-Shoka-algolia搜索踩坑/index.html b/2022/09/17/Hexo-Theme-Shoka-algolia搜索踩坑/index.html index 437cc15f9..0960b1471 100644 --- a/2022/09/17/Hexo-Theme-Shoka-algolia搜索踩坑/index.html +++ b/2022/09/17/Hexo-Theme-Shoka-algolia搜索踩坑/index.html @@ -1,15 +1 @@ -Hexo + Theme.Shoka + algolia 搜索踩坑 - Hexo - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# Hexo + Theme.Shoka 安装

安装介绍

# algolia 注册

  1. algolia 不支持国内邮箱注册,而 google 和 github 由于国内被墙也没法使用。所以只能先注册 netlify 然后通过 netlify 注册 algolia。

  2. 登录 algolia 后创建一个 index,名字随意记住既可。

    2022-09-17-23-32-20.png

  3. 点击右上角红点,弹出窗口点 settings 按钮。

    2022-09-17-23-35-04.png

  4. 点击 API KEYS,获取 appId 和 adminApiKey 填入 hexo 的_config.yml 中 apiKey 暂时不填。

algolia:
-  appId: #Your appId
-  apiKey: #Your apiKey
-  adminApiKey: #Your adminApiKey
-  chunkSize: 5000
-  indexName: blog #"shoka"
-  fields:
-    - title #必须配置
-    - path #必须配置
-    - categories #推荐配置
-    - content:strip:truncate,0,2000
-    - gallery
-    - photos
-    - tags
-
  1. 点击 All Api Keys - New Api key 创建一个 api key,Indices 选先前让记住的 index,ACL 选下面图片中的选项。

    2022-09-17-23-47-50.png

  2. 把第 5 步中新建的 api key 填入到第 4 步中的配置中,到此已经完成了百分之九十,只需要重新编译发布即可。不过编译步骤多了一步,在 hexo g 后需要再执行 hexo algolia,至此搜索功能就大功告成了。

\ No newline at end of file +Hexo + Theme.Shoka + algolia 搜索踩坑 - Hexo - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# Hexo + Theme.Shoka 安装

安装介绍

# algolia 注册

  1. algolia 不支持国内邮箱注册,而 google 和 github 由于国内被墙也没法使用。所以只能先注册 netlify 然后通过 netlify 注册 algolia。

  2. 登录 algolia 后创建一个 index,名字随意记住既可。

    2022-09-17-23-32-20.png

  3. 点击右上角红点,弹出窗口点 settings 按钮。

    2022-09-17-23-35-04.png

  4. 点击 API KEYS,获取 appId 和 adminApiKey 填入 hexo 的_config.yml 中 apiKey 暂时不填。

algolia:
  appId: #Your appId
  apiKey: #Your apiKey
  adminApiKey: #Your adminApiKey
  chunkSize: 5000
  indexName: blog #"shoka"
  fields:
    - title #必须配置
    - path #必须配置
    - categories #推荐配置
    - content:strip:truncate,0,2000
    - gallery
    - photos
    - tags
  1. 点击 All Api Keys - New Api key 创建一个 api key,Indices 选先前让记住的 index,ACL 选下面图片中的选项。

    2022-09-17-23-47-50.png

  2. 把第 5 步中新建的 api key 填入到第 4 步中的配置中,到此已经完成了百分之九十,只需要重新编译发布即可。不过编译步骤多了一步,在 hexo g 后需要再执行 hexo algolia,至此搜索功能就大功告成了。

\ No newline at end of file diff --git a/2022/09/21/记一次netty-socket-io服务端连接不上的问题/index.html b/2022/09/21/记一次netty-socket-io服务端连接不上的问题/index.html index cc636274e..74b558f8f 100644 --- a/2022/09/21/记一次netty-socket-io服务端连接不上的问题/index.html +++ b/2022/09/21/记一次netty-socket-io服务端连接不上的问题/index.html @@ -1 +1 @@ -记一次 netty-socketio 服务端连接不上的问题 - 心得体会 - 生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

今天前端开发跟我反馈用 vue 的 socketio 连接不上后台服务,连接无反应无任何报错。所以不清楚是前端代码问题还是后台服务的问题。由于框架为另一同事搭建,我只负责处理后端业务逻辑部分,所以第一时间我也不清楚具体的原因。于是我找了个第三方的 socket 工具尝试连接,果然有问题。但是只是提示连接不上,无明显错误原因。到后台查看发现有提示 Unknown transport for request 错误,最后通过调试发现 netty-socketio 的库中 AuthorizeHandler 类有段处理 transport 的代码只能接受大写的 WEBSOCKET 或者 POLLING,于是我在工具中按要求填上结果还是不行。然后我在网上搜索也未发现有相关问题,只发现有网友提示需要用 socketio 的库,不要自己写 socket 连接。于是我找了 socket.io.js 来连接,结果还是一样。经过大量调试改代码,最后突发奇想,有没有可能跟 netty-socketio 的版本有关系,于是我把版本从 1.7.20 升级到 1.7.21,结果就奇迹般的好了。

# 总结:就好像大力出奇迹,实在找不到原因的时候不妨升级一下版本,说不定问题就解决了呢!O (∩_∩) O
\ No newline at end of file +记一次 netty-socketio 服务端连接不上的问题 - 心得体会 - 生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

今天前端开发跟我反馈用 vue 的 socketio 连接不上后台服务,连接无反应无任何报错。所以不清楚是前端代码问题还是后台服务的问题。由于框架为另一同事搭建,我只负责处理后端业务逻辑部分,所以第一时间我也不清楚具体的原因。于是我找了个第三方的 socket 工具尝试连接,果然有问题。但是只是提示连接不上,无明显错误原因。到后台查看发现有提示 Unknown transport for request 错误,最后通过调试发现 netty-socketio 的库中 AuthorizeHandler 类有段处理 transport 的代码只能接受大写的 WEBSOCKET 或者 POLLING,于是我在工具中按要求填上结果还是不行。然后我在网上搜索也未发现有相关问题,只发现有网友提示需要用 socketio 的库,不要自己写 socket 连接。于是我找了 socket.io.js 来连接,结果还是一样。经过大量调试改代码,最后突发奇想,有没有可能跟 netty-socketio 的版本有关系,于是我把版本从 1.7.20 升级到 1.7.21,结果就奇迹般的好了。

# 总结:就好像大力出奇迹,实在找不到原因的时候不妨升级一下版本,说不定问题就解决了呢!O (∩_∩) O
\ No newline at end of file diff --git a/2022/09/22/protobuf生成js文件/index.html b/2022/09/22/protobuf生成js文件/index.html index 643da3ff6..6bf43a6c4 100644 --- a/2022/09/22/protobuf生成js文件/index.html +++ b/2022/09/22/protobuf生成js文件/index.html @@ -1 +1 @@ -protobuf 生成 js 文件 - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 下载工具

protoc-3.19.5-win64.zip

# 生成 js 文件

  1. 把 xxx.proto 文件拷贝到解压的 protoc-3.19.5-win64\bin 目录下

  2. cmd 到相同的 bin 目录下

  3. 执行 protoc.exe --js_out=import_style=commonjs,binary:. ./xxx.proto 命令,就会在 bin 目录下生成 xxx_pb.js 文件

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +protobuf 生成 js 文件 - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 下载工具

protoc-3.19.5-win64.zip

# 生成 js 文件

  1. 把 xxx.proto 文件拷贝到解压的 protoc-3.19.5-win64\bin 目录下

  2. cmd 到相同的 bin 目录下

  3. 执行 protoc.exe --js_out=import_style=commonjs,binary:. ./xxx.proto 命令,就会在 bin 目录下生成 xxx_pb.js 文件

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/09/23/解决域名ip变动后需要重启nginx的问题/index.html b/2022/09/23/解决域名ip变动后需要重启nginx的问题/index.html index 4b92176be..c68e9393a 100644 --- a/2022/09/23/解决域名ip变动后需要重启nginx的问题/index.html +++ b/2022/09/23/解决域名ip变动后需要重启nginx的问题/index.html @@ -1,8 +1 @@ -解决域名 ip 变动后需要重启 nginx 的问题 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

今天突然发现自己的网站不能访问了。经过一顿排查,发现是家里的外网 ip 变动后 nginx 解析的域名 ip 还是旧 ip 导致的。手动重启 nginx 后恢复正常。但这不是长久之计,如果每次 ip 变动都需要重启一次 nginx,想想都头大。于是查询资料后获得了解决办法,方法如下:

location / {	
-	resolver 114.114.114.114 valid=60s; #自定义缓存有效时间间隔对变量中的域名进行解析
-
-	set $my_server "https://ip:port";
-
-	proxy_pass $my_server;
-}
-
\ No newline at end of file +解决域名 ip 变动后需要重启 nginx 的问题 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

今天突然发现自己的网站不能访问了。经过一顿排查,发现是家里的外网 ip 变动后 nginx 解析的域名 ip 还是旧 ip 导致的。手动重启 nginx 后恢复正常。但这不是长久之计,如果每次 ip 变动都需要重启一次 nginx,想想都头大。于是查询资料后获得了解决办法,方法如下:

location / {	
	resolver 114.114.114.114 valid=60s; #自定义缓存有效时间间隔对变量中的域名进行解析
	set $my_server "https://ip:port";
	proxy_pass $my_server;
}
\ No newline at end of file diff --git a/2022/09/26/解决Hexo-Shoka背景音乐无法播放的问题/index.html b/2022/09/26/解决Hexo-Shoka背景音乐无法播放的问题/index.html index 05e9f6a51..509420600 100644 --- a/2022/09/26/解决Hexo-Shoka背景音乐无法播放的问题/index.html +++ b/2022/09/26/解决Hexo-Shoka背景音乐无法播放的问题/index.html @@ -1 +1 @@ -解决 Hexo+Shoka 背景音乐无法播放的问题 - Hexo - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 https://api.i-meto.com/meting/api 调用出错了。shoka 主题应该是通过这个网站提取音乐地址、图片等信息。通过断点发现网易播放列表还是能正常获取的,只是列表中的具体音乐、图片无法获取了。于是自己用获取的列表信息组装出正确的 url 问题基本解决。只针对网易播放列表,图片只能使用一张固定的。

解决方法如下:

到 themes\shoka\source\js_app 目录下打开 player.js 文件,在最底部 init (config) 下加入 vendorJs ('fancybox');,然后找到 56 行用下面的代码替换即可。

fetch: function(source) {
      var list = []
      return new Promise(function(resolve, reject) {
        source.forEach(function(raw) {
          var meta = utils.parse(raw)
          if(meta[0]) {
            var skey = JSON.stringify(meta)
            var playlist = store.get(skey)
            if(playlist) {
			  // 自己修改 - start
			  var audioInfos = JSON.parse(playlist);
			  var neteaseStartUrl = "https://music.163.com/song/media/outer/url?id=";
			  if (meta[0] == "netease" && audioInfos && audioInfos.length>0 && !audioInfos[0].url.startsWith(neteaseStartUrl)) {// 如果是网易音乐就自己构建 url
				  jQuery.ajax({
					  url: audioInfos[0].url,
					  type: 'get',
					  async: false,
					  timeout: 5000,
					  complete : function(XMLHttpRequest, status){
						  if (XMLHttpRequest.status != 200) {
							  audioInfos.forEach(function(audioInfo) {
								  var id = audioInfo.url.substring(audioInfo.url.indexOf("id=")+3, audioInfo.url.indexOf("&auth="));
								  audioInfo.url = neteaseStartUrl + id;
								  audioInfo.pic = "https://p3.music.126.net/Vji3PQJAZ2C7gS_6X51NFQ==/109951164723650033.jpg?param=200y200";
							  })
						  }
						  list.push.apply(list, audioInfos);
						  resolve(list);
					  }
				  });
			  } else {
				  list.push.apply(list, audioInfos);
				  resolve(list);
			  }
			  // 自己修改 - end
            } else {
              fetch('https://api.i-meto.com/meting/api?server='+meta[0]+'&type='+meta[1]+'&id='+meta[2]+'&r='+ Math.random())
                .then(function(response) {
                  return response.json()
                }).then(function(json) {
                  store.set(skey, JSON.stringify(json))
                  list.push.apply(list, json);
                  resolve(list);
                }).catch(function(ex) {})
            }
          } else {
            list.push(raw);
            resolve(list);
          }
        })
      })
    }
\ No newline at end of file +解决 Hexo+Shoka 背景音乐无法播放的问题 - Hexo - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 https://api.i-meto.com/meting/api 调用出错了。shoka 主题应该是通过这个网站提取音乐地址、图片等信息。通过断点发现网易播放列表还是能正常获取的,只是列表中的具体音乐、图片无法获取了。于是自己用获取的列表信息组装出正确的 url 问题基本解决。只针对网易播放列表,图片只能使用一张固定的。

解决方法如下:

到 themes\shoka\source\js_app 目录下打开 player.js 文件,在最底部 init (config) 下加入 vendorJs ('fancybox');,然后找到 56 行用下面的代码替换即可。

fetch: function(source) {
      var list = []
      return new Promise(function(resolve, reject) {
        source.forEach(function(raw) {
          var meta = utils.parse(raw)
          if(meta[0]) {
            var skey = JSON.stringify(meta)
            var playlist = store.get(skey)
            if(playlist) {
			  // 自己修改 - start
			  var audioInfos = JSON.parse(playlist);
			  var neteaseStartUrl = "https://music.163.com/song/media/outer/url?id=";
			  if (meta[0] == "netease" && audioInfos && audioInfos.length>0 && !audioInfos[0].url.startsWith(neteaseStartUrl)) {// 如果是网易音乐就自己构建 url
				  jQuery.ajax({
					  url: audioInfos[0].url,
					  type: 'get',
					  async: false,
					  timeout: 5000,
					  complete : function(XMLHttpRequest, status){
						  if (XMLHttpRequest.status != 200) {
							  audioInfos.forEach(function(audioInfo) {
								  var id = audioInfo.url.substring(audioInfo.url.indexOf("id=")+3, audioInfo.url.indexOf("&auth="));
								  audioInfo.url = neteaseStartUrl + id;
								  audioInfo.pic = "https://p3.music.126.net/Vji3PQJAZ2C7gS_6X51NFQ==/109951164723650033.jpg?param=200y200";
							  })
						  }
						  list.push.apply(list, audioInfos);
						  resolve(list);
					  }
				  });
			  } else {
				  list.push.apply(list, audioInfos);
				  resolve(list);
			  }
			  // 自己修改 - end
            } else {
              fetch('https://api.i-meto.com/meting/api?server='+meta[0]+'&type='+meta[1]+'&id='+meta[2]+'&r='+ Math.random())
                .then(function(response) {
                  return response.json()
                }).then(function(json) {
                  store.set(skey, JSON.stringify(json))
                  list.push.apply(list, json);
                  resolve(list);
                }).catch(function(ex) {})
            }
          } else {
            list.push(raw);
            resolve(list);
          }
        })
      })
    }
\ No newline at end of file diff --git a/2022/09/27/nginx负载均衡配置/index.html b/2022/09/27/nginx负载均衡配置/index.html index bd2d7d010..a6b8b4bbf 100644 --- a/2022/09/27/nginx负载均衡配置/index.html +++ b/2022/09/27/nginx负载均衡配置/index.html @@ -1,63 +1 @@ -nginx 负载均衡配置 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# nginx 负载均衡配置

  1. 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

upstream my_server {
-	server 192.168.0.2:8080;
-	server 192.168.0.3:8080;
-}
-
-server {
-	listen 80;
-	server_name 192.168.0.1;
-
-	# Path to the root of your installation
-	location / {
-		proxy_pass http://my_server;
-	}
-	
-}
-
  1. weight 权重策略

weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。

upstream my_server {
-	server 192.168.0.2:8080 weight=1;
-	server 192.168.0.3:8080 weight=2;
-}
-
-server {
-	listen 80;
-	server_name 192.168.0.1;
-
-	# Path to the root of your installation
-	location / {
-		proxy_pass http://my_server;
-	}
-	
-}
-
  1. ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

upstream my_server {
-	ip_hash;
-	server 192.168.0.2:8080;
-	server 192.168.0.3:8080;
-}
-
-server {
-	listen 80;
-	server_name 192.168.0.1;
-
-	# Path to the root of your installation
-	location / {
-		proxy_pass http://my_server;
-	}
-	
-}
-
  1. fair (第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream my_server {
-	server 192.168.0.2:8080;
-	server 192.168.0.3:8080;
-	fair;
-}
-
-server {
-	listen 80;
-	server_name 192.168.0.1;
-
-	# Path to the root of your installation
-	location / {
-		proxy_pass http://my_server;
-	}
-	
-}
-
  1. 动静分离

把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +nginx 负载均衡配置 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# nginx 负载均衡配置

  1. 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

upstream my_server {
	server 192.168.0.2:8080;
	server 192.168.0.3:8080;
}
server {
	listen 80;
	server_name 192.168.0.1;
	# Path to the root of your installation
	location / {
		proxy_pass http://my_server;
	}
	
}
  1. weight 权重策略

weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。

upstream my_server {
	server 192.168.0.2:8080 weight=1;
	server 192.168.0.3:8080 weight=2;
}
server {
	listen 80;
	server_name 192.168.0.1;
	# Path to the root of your installation
	location / {
		proxy_pass http://my_server;
	}
	
}
  1. ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

upstream my_server {
	ip_hash;
	server 192.168.0.2:8080;
	server 192.168.0.3:8080;
}
server {
	listen 80;
	server_name 192.168.0.1;
	# Path to the root of your installation
	location / {
		proxy_pass http://my_server;
	}
	
}
  1. fair (第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream my_server {
	server 192.168.0.2:8080;
	server 192.168.0.3:8080;
	fair;
}
server {
	listen 80;
	server_name 192.168.0.1;
	# Path to the root of your installation
	location / {
		proxy_pass http://my_server;
	}
	
}
  1. 动静分离

把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/09/28/深深的挫败和无助感/index.html b/2022/09/28/深深的挫败和无助感/index.html index d8f2797a2..edc0fe1d6 100644 --- a/2022/09/28/深深的挫败和无助感/index.html +++ b/2022/09/28/深深的挫败和无助感/index.html @@ -1 +1 @@ -深深的挫败和无助感 - 心情 - 生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +深深的挫败和无助感 - 心情 - 生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/2022/10/06/Nginx配置iframe访问/index.html b/2022/10/06/Nginx配置iframe访问/index.html index ba8da91c2..957524002 100644 --- a/2022/10/06/Nginx配置iframe访问/index.html +++ b/2022/10/06/Nginx配置iframe访问/index.html @@ -1 +1 @@ -Nginx 配置 iframe 访问 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# X-Frame-Options 响应头配置详解

X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在,或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。
X-Frame-Options 三个参数:

1、 DENY

表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

2、SAMEORIGIN

表示该页面可以在相同域名页面的 frame 中展示。

3、ALLOW-FROM uri

表示该页面可以在指定来源的 frame 中展示。

4、ALLOWALL

表示该页面可以在任何来源的 frame 中展示。

换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。正常情况下我们通常使用 SAMEORIGIN 参数。

# Apache 配置

需要把下面这行添加到'site' 的配置中

Header always append X-Frame-Options SAMEORIGIN

# Nginx 配置

需要添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置项中,个人来讲喜欢配置在‘server’ 中

正常情况下都是使用 SAMEORIGIN 参数,允许同域嵌套
add_header X-Frame-Options SAMEORIGIN;

允许单个域名 iframe 嵌套
add_header X-Frame-Options ALLOW-FROM http://xxx.com/;

允许多个域名 iframe 嵌套,注意这里是用逗号分隔
add_header X-Frame-Options "ALLOW-FROM http://xxx.com/,https://xxx.com/";

允许任何域名 iframe 嵌套
add_header X-Frame-Options ALLOWALL;

# Tomcat 配置

在‘conf/web.xml’填加以下配置

<filter>
        <filter-name>httpHeaderSecurity</filter-name>
        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
        <init-param>
            <param-name>antiClickJackingOption</param-name>
            <param-value>SAMEORIGIN</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>
<filter-mapping>
        <filter-name>httpHeaderSecurity</filter-name>
        <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

# IIS 配置

添加下面的配置到 ‘Web.config’文件中

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +Nginx 配置 iframe 访问 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# X-Frame-Options 响应头配置详解

X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在,或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。
X-Frame-Options 三个参数:

1、 DENY

表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

2、SAMEORIGIN

表示该页面可以在相同域名页面的 frame 中展示。

3、ALLOW-FROM uri

表示该页面可以在指定来源的 frame 中展示。

4、ALLOWALL

表示该页面可以在任何来源的 frame 中展示。

换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。正常情况下我们通常使用 SAMEORIGIN 参数。

# Apache 配置

需要把下面这行添加到'site' 的配置中

Header always append X-Frame-Options SAMEORIGIN

# Nginx 配置

需要添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置项中,个人来讲喜欢配置在‘server’ 中

正常情况下都是使用 SAMEORIGIN 参数,允许同域嵌套
add_header X-Frame-Options SAMEORIGIN;

允许单个域名 iframe 嵌套
add_header X-Frame-Options ALLOW-FROM http://xxx.com/;

允许多个域名 iframe 嵌套,注意这里是用逗号分隔
add_header X-Frame-Options "ALLOW-FROM http://xxx.com/,https://xxx.com/";

允许任何域名 iframe 嵌套
add_header X-Frame-Options ALLOWALL;

# Tomcat 配置

在‘conf/web.xml’填加以下配置

<filter>
        <filter-name>httpHeaderSecurity</filter-name>
        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
        <init-param>
            <param-name>antiClickJackingOption</param-name>
            <param-value>SAMEORIGIN</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>
<filter-mapping>
        <filter-name>httpHeaderSecurity</filter-name>
        <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

# IIS 配置

添加下面的配置到 ‘Web.config’文件中

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/10/11/svn库转git库/index.html b/2022/10/11/svn库转git库/index.html index 1779163b9..00b219114 100644 --- a/2022/10/11/svn库转git库/index.html +++ b/2022/10/11/svn库转git库/index.html @@ -1 +1 @@ -svn 库转 git 库 - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 前期准备

首先安装好 svn 和 git 工具。

# svn 转 git

1、 到 svn 项目目录右键选中 gitbash 打开窗口,执行获取用户并映射成 git 样式账号命令如下:
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt

然后会在目录下生成文件 users.txt 样式如:zhansan = 张三 zhansan@xxx.com

2、新建个文件夹,将生成的 users.txt 放入新建的文件夹,然后在新建的文件夹中右键选中 gitbash 弹出窗口后执行下面命令(https://svn_project_url/ 为 svn 库的 url),拉取 svn 代码到本地新建文件夹中。
git svn clone https://svn_project_url/ --no-metadata --no-minimize-url --authors-file=users.txt

  • 期间可能会弹出 svn 的账户密码验证窗口,正确输入即可。

# 推送项目到 git 库

1、在 gitbash 窗口 cd 到 git 项目文件夹中执行以下命令把 git 仓库地址加入到 remote 中(https://git_project_url/ 为 git 库的 url)。
git remote add origin https://git_project_url/

2、push 项目到 git 库中。
git push origin master

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +svn 库转 git 库 - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 前期准备

首先安装好 svn 和 git 工具。

# svn 转 git

1、 到 svn 项目目录右键选中 gitbash 打开窗口,执行获取用户并映射成 git 样式账号命令如下:
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt

然后会在目录下生成文件 users.txt 样式如:zhansan = 张三 zhansan@xxx.com

2、新建个文件夹,将生成的 users.txt 放入新建的文件夹,然后在新建的文件夹中右键选中 gitbash 弹出窗口后执行下面命令(https://svn_project_url/ 为 svn 库的 url),拉取 svn 代码到本地新建文件夹中。
git svn clone https://svn_project_url/ --no-metadata --no-minimize-url --authors-file=users.txt

  • 期间可能会弹出 svn 的账户密码验证窗口,正确输入即可。

# 推送项目到 git 库

1、在 gitbash 窗口 cd 到 git 项目文件夹中执行以下命令把 git 仓库地址加入到 remote 中(https://git_project_url/ 为 git 库的 url)。
git remote add origin https://git_project_url/

2、push 项目到 git 库中。
git push origin master

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/10/12/使用picgo上传图片到chevereto/index.html b/2022/10/12/使用picgo上传图片到chevereto/index.html index e0d5af9c1..b3ab22c36 100644 --- a/2022/10/12/使用picgo上传图片到chevereto/index.html +++ b/2022/10/12/使用picgo上传图片到chevereto/index.html @@ -1 +1 @@ -使用 PicGo 上传图片到 chevereto - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 简介

PicGo 是一款开源的图床管理工具,十分流行。

PicGo 官方指南:PicGo | PicGo

# 配置

  1. 安装插件(需要先安装 NodeJS)

  2. 图床配置
    url 后缀必须用红线圈中的部分,key 在 chevereto 登陆后 api 配置中查找

\ No newline at end of file +使用 PicGo 上传图片到 chevereto - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 简介

PicGo 是一款开源的图床管理工具,十分流行。

PicGo 官方指南:PicGo | PicGo

# 配置

  1. 安装插件(需要先安装 NodeJS)

  2. 图床配置
    url 后缀必须用红线圈中的部分,key 在 chevereto 登陆后 api 配置中查找

\ No newline at end of file diff --git a/2022/10/14/nginx允许跨域获取cookies方法/index.html b/2022/10/14/nginx允许跨域获取cookies方法/index.html index 303d4d202..b59610586 100644 --- a/2022/10/14/nginx允许跨域获取cookies方法/index.html +++ b/2022/10/14/nginx允许跨域获取cookies方法/index.html @@ -1,14 +1 @@ -nginx 允许跨域获取 cookie 的方法 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 使用场景

在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:

server {
-	listen port ssl http2;
-	server_name xxx.com;
-	ssl_certificate_key /xxx.key;
-	ssl_certificate /xxx.pem;
-	proxy_cookie_path ~(.*) "$1; SameSite=None; secure; httponly";
-
-	location / {
-		#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)
-		add_header X-Frame-Options ALLOWALL; #允许被所有域名镶套
-		proxy_pass http://xxx;
-	}
-}
-
\ No newline at end of file +nginx 允许跨域获取 cookie 的方法 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 使用场景

在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:

server {
	listen port ssl http2;
	server_name xxx.com;
	ssl_certificate_key /xxx.key;
	ssl_certificate /xxx.pem;
	proxy_cookie_path ~(.*) "$1; SameSite=None; secure; httponly";
	location / {
		#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)
		add_header X-Frame-Options ALLOWALL; #允许被所有域名镶套
		proxy_pass http://xxx;
	}
}
\ No newline at end of file diff --git a/2022/10/17/redis主从基础配置记录/index.html b/2022/10/17/redis主从基础配置记录/index.html index a97efe8be..0e24b2452 100644 --- a/2022/10/17/redis主从基础配置记录/index.html +++ b/2022/10/17/redis主从基础配置记录/index.html @@ -1,77 +1 @@ -redis 主从基础配置 - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 主服务

  1. 基础配置
port 6379
-requirepass 123456(密码,建议不设置)
-vm-enabled no (虚拟内存,内存够的情况下可以不使用)
-maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)
-bind 127.0.0.1 (注释掉,否则不能外部连接)
-rdbchecksum no(持久化数据检查)
-list-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)
-list-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)
-
sysctl vm.overcommit_memory=1 (立即生效)
-修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)
-
  1. 禁用透明大页(影响性能)
需要sudo su 切换到root身份(sudo 没用)
-echo never > /sys/kernel/mm/transparent_hugepage/enabled
-修改/etc/init.d/redis-server,加入/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled
-
  1. 修复 TCP 警告
sysctl net.core.somaxconn=1024(立即生效)
-修改/etc/sysctl.conf添加net.core.somaxconn=1024
-
  1. 客户端缓冲区限制
客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。
-可以三种不同客户端的方式进行设置:
-normal ->  正常客户端
-slave  -> slave 和 MONITOR 客户端
-pubsub ->  至少订阅了一个 pubsub channel 或 pattern 的客户端
-语法 :
-client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>
-一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。
-例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,
-只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。
-把硬限制和软限制都设置为 0 来禁用该特性
-client-output-buffer-limit normal 0 0 0
-client-output-buffer-limit slave 5gb 512mb 60
-client-output-buffer-limit pubsub 32mb 8mb 60
-
  1. 持久化配置
---关闭RDB持久化---
-save ""
-默认配置如下:
-save 900 1 #900秒内有1次更新就持久化
-save 300 10 #300秒内有10次更新就持久化
-save 60 10000 #60秒内有10000次更新就持久化
----关闭RDB持久化---
-主从同步支持两种策略,即disk和socket方式。
-新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。
-一个RDB文件从master端传到slave端,分为两种情况:
-1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;
-2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。
-repl-diskless-sync no 默认不使用diskless同步方式
-repl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒
-repl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒
-repl-timeout 3600 设置超时时间
-repl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。
-repl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。
-backlog设置的越大,slave可以失连的时间就越长。
-repl-backlog-ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。
-slave-priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。
-min-slaves-to-write 3
-min-slaves-max-lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。
-

# 从服务

基本配置同主服务一致
-slaveof 127.0.0.1 6379(主redis的ip和端口)
-masterauth 123456 (主redis的密码)
-可以通过slaveof no one命令将Slaver升级为Maste
-bgsave (持久化命令,在redis-cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / -name dump.rd查找)
-

# 相关命令

看状态
-sudo /etc/init.d/redis-server status
-看端口
-netstat -nlt|grep 6379
-外部连接
-sudo vim /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉
-重启
-sudo server redis-server restart
-查看内存
-free -m
-批量删除指定key
-redis-cli -n 6 scan 0 match *2020-06-12 count 10000| xargs redis-cli -n 6 del
-大量删除key后快速释放被占用的内存
-memory purge
-

# 问题解决

写入问题
-redis-cli config set stop-writes-on-bgsave-error no
-sudo vim /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no
-修改系统 sudo vim /etc/sysctl.conf加入vm.overcommit_memory=1
-sudo sysctl vm.overcommit_memory=1
-
\ No newline at end of file +redis 主从基础配置 - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 主服务

  1. 基础配置
port 6379
requirepass 123456(密码,建议不设置)
vm-enabled no (虚拟内存,内存够的情况下可以不使用)
maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)
bind 127.0.0.1 (注释掉,否则不能外部连接)
rdbchecksum no(持久化数据检查)
list-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)
list-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)
sysctl vm.overcommit_memory=1 (立即生效)
修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)
  1. 禁用透明大页(影响性能)
需要sudo su 切换到root身份(sudo 没用)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
修改/etc/init.d/redis-server,加入/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled
  1. 修复 TCP 警告
sysctl net.core.somaxconn=1024(立即生效)
修改/etc/sysctl.conf添加net.core.somaxconn=1024
  1. 客户端缓冲区限制
客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。
可以三种不同客户端的方式进行设置:
normal ->  正常客户端
slave  -> slave 和 MONITOR 客户端
pubsub ->  至少订阅了一个 pubsub channel 或 pattern 的客户端
语法 :
client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>
一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。
例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,
只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。
把硬限制和软限制都设置为 0 来禁用该特性
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 5gb 512mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
  1. 持久化配置
---关闭RDB持久化---
save ""
默认配置如下:
save 900 1 #900 秒内有 1 次更新就持久化
save 300 10 #300 秒内有 10 次更新就持久化
save 60 10000 #60 秒内有 10000 次更新就持久化
---关闭RDB持久化---
主从同步支持两种策略,即disk和socket方式。
新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。
一个RDB文件从master端传到slave端,分为两种情况:
1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;
2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。
repl-diskless-sync no 默认不使用diskless同步方式
repl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒
repl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒
repl-timeout 3600 设置超时时间
repl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。
repl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。
backlog设置的越大,slave可以失连的时间就越长。
repl-backlog-ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。
slave-priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。
min-slaves-to-write 3
min-slaves-max-lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。

# 从服务

基本配置同主服务一致
slaveof 127.0.0.1 6379(主redis的ip和端口)
masterauth 123456 (主redis的密码)
可以通过slaveof no one命令将Slaver升级为Maste
bgsave (持久化命令,在redis-cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / -name dump.rd查找)

# 相关命令

看状态
sudo /etc/init.d/redis-server status
看端口
netstat -nlt|grep 6379
外部连接
sudo vim /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉
重启
sudo server redis-server restart
查看内存
free -m
批量删除指定key
redis-cli -n 6 scan 0 match *2020-06-12 count 10000| xargs redis-cli -n 6 del
大量删除key后快速释放被占用的内存
memory purge

# 问题解决

写入问题
redis-cli config set stop-writes-on-bgsave-error no
sudo vim /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no
修改系统 sudo vim /etc/sysctl.conf加入vm.overcommit_memory=1
sudo sysctl vm.overcommit_memory=1
\ No newline at end of file diff --git a/2022/10/18/搭建nagios监控/index.html b/2022/10/18/搭建nagios监控/index.html index 246125356..1d4b8a57e 100644 --- a/2022/10/18/搭建nagios监控/index.html +++ b/2022/10/18/搭建nagios监控/index.html @@ -1,219 +1 @@ -搭建 nagios 监控 - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 监控端服务安装与配置

  1. nagios 需要安装主程序 core 和 nrpe(nagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见官网
  2. nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处
  3. etc/objects/commands.cfg 用于保存 nagios 默认监控命令
  4. etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加)
  5. etc/objects/hosts 目录下配置需要被监控的主机信息
  6. etc/objects/servers 目录下配置需要在被监控主机上执行的监控命令(第 4 项中的命令)

# 被监控端服务安装与配置

  1. 被监控端需要安装 nrpe
  2. 被监控端需要把监控端的命令写入到 nrpe 的配置文件中
  3. 被监控端需要把命令执行脚本放入 libexec 目录中
  4. 被监控端自动安装脚本(可借鉴)
1、请先修改脚本中的服务端IP。
-2、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令,弹出选择窗口后选择no。
-3、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录,目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。
-
-#!/bin/bash
-#服务端ip
-SERVER_IP=10.10.10.121
-#安装目录
-INSTALL_HOME=`pwd`
-#安装ubuntu版本
-INSTALL_UBUNTU()
-{
-	sudo apt-get update
-	sudo apt-get install -y autoconf automake gcc libc6 libmcrypt-dev make libssl-dev wget openssl
-	
-	cd /tmp
-	#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz
-	cp $INSTALL_HOME/Ubuntu/nrpe.tar.gz ./
-	tar xzf nrpe.tar.gz
-
-	cd /tmp/nrpe-nrpe-4.0.3/
-	sudo ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/
-	sudo make all
-
-	sudo make install-groups-users
-
-	sudo make install
-
-	sudo make install-config
-
-	sudo sh -c "echo >> /etc/services"
-	sudo sh -c "sudo echo '# Nagios services' >> /etc/services"
-	sudo sh -c "sudo echo 'nrpe    5666/tcp' >> /etc/services"
-	
-	#判断系统是高版本还是低版本
-	VERSION=`lsb_release -r --short`
-	IS_LOW_VERSION=`echo "$VERSION < 15" | bc`
-
-	if [ $IS_LOW_VERSION = 1 ]; then
-		#低版本
-		sudo make install-init
-	else
-		#高版本
-		sudo make install-init
-		sudo systemctl enable nrpe.service
-	fi
-	
-	sudo mkdir -p /etc/ufw/applications.d
-	sudo sh -c "echo '[NRPE]' > /etc/ufw/applications.d/nagios"
-	sudo sh -c "echo 'title=Nagios Remote Plugin Executor' >> /etc/ufw/applications.d/nagios"
-	sudo sh -c "echo 'description=Allows remote execution of Nagios plugins' >> /etc/ufw/applications.d/nagios"
-	sudo sh -c "echo 'ports=5666/tcp' >> /etc/ufw/applications.d/nagios"
-	sudo ufw allow NRPE
-	sudo ufw reload
-	
-	sudo sh -c "sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"
-	
-	cd $INSTALL_HOME
-	sudo cp ./sh/* /usr/local/nagios/libexec/
-	sudo chmod +xr /usr/local/nagios/libexec/*
-	
-	sudo sh -c "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' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \$ARG1\$' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"
-	NETWORK_INDEX=1
-	for NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\t]*//g' | sed 's/[:]*$//g'`;do
-			if [ $NETWORK_NAME != 'lo' ]; then
-					sudo sh -c "echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg"
-					NETWORK_INDEX=`expr $NETWORK_INDEX + 1 `
-			fi
-	done
-	
-	if [ $IS_LOW_VERSION = 1 ]; then
-		#低版本
-		sudo start nrpe
-	else
-		#高版本
-		sudo systemctl start nrpe.service
-	fi
-}
-
-#安装centos版本
-INSTALL_CENTOS()
-{
-	yum install -y gcc glibc glibc-common openssl openssl-devel perl wget
-
-	cd /tmp
-	#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz
-	cp $INSTALL_HOME/CentOS/nrpe.tar.gz ./
-	tar xzf nrpe.tar.gz
-
-	cd /tmp/nrpe-nrpe-4.0.3/
-	./configure --enable-command-args
-	make all
-
-	make install-groups-users
-
-	make install
-
-	make install-config
-
-	echo >> /etc/services
-	echo '# Nagios services' >> /etc/services
-	echo 'nrpe    5666/tcp' >> /etc/services
-	
-	#判断系统是高版本还是低版本
-	VERSION=`rpm -q centos-release|cut -d- -f3`
-	#安装bc命令
-	yum -y install bc
-	IS_LOW_VERSION=`echo "$VERSION < 7" | bc`
-
-	if [ $IS_LOW_VERSION = 1 ]; then
-		#低版本
-		make install-init
-		
-		iptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
-		service iptables save
-		ip6tables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
-		service ip6tables save
-	else
-		#高版本
-		make install-init
-		systemctl enable nrpe.service
-		
-		firewall-cmd --zone=public --add-port=5666/tcp
-		firewall-cmd --zone=public --add-port=5666/tcp --permanent
-	fi
-	
-	sudo sh -c "sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"
-	
-	cd $INSTALL_HOME
-	sudo cp ./sh/* /usr/local/nagios/libexec/
-	sudo chmod +xr /usr/local/nagios/libexec/*
-	
-	sudo sh -c "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' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \$ARG1\$' >> /usr/local/nagios/etc/nrpe.cfg"
-	sudo sh -c "echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"
-	NETWORK_INDEX=1
-	for NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\t]*//g' | sed 's/[:]*$//g'`;do
-			if [ $NETWORK_NAME != 'lo' ]; then
-					sudo sh -c "echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg"
-					NETWORK_INDEX=`expr $NETWORK_INDEX + 1 `
-			fi
-	done
-	
-	if [ $IS_LOW_VERSION = 1 ]; then
-		#低版本
-		if [ $(echo "$VERSION < 6" | bc) -eq 1 ]; then
-			service nrpe start
-		else
-			start nrpe
-		fi
-	else
-		#高版本
-		systemctl start nrpe.service
-	fi
-}
-
-#安装其它版本
-INSTALL_OTHER()
-{
-	echo "Not supported at the moment."
-}
-
-#根据不同系统安装不同版本
-INSTALL()
-{
-	if grep -Eqii "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then
-		DISTRO='CentOS'
-        PM='yum'
-		INSTALL_CENTOS
-    elif grep -Eqi "Red Hat Enterprise Linux Server" /etc/issue || grep -Eq "Red Hat Enterprise Linux Server" /etc/*-release; then
-        DISTRO='RHEL'
-        PM='yum'
-		INSTALL_OTHER
-    elif grep -Eqi "Aliyun" /etc/issue || grep -Eq "Aliyun" /etc/*-release; then
-        DISTRO='Aliyun'
-        PM='yum'
-		INSTALL_OTHER
-    elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; then
-        DISTRO='Fedora'
-        PM='yum'
-		INSTALL_OTHER
-    elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then
-        DISTRO='Debian'
-        PM='apt'
-		INSTALL_OTHER
-    elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then
-        DISTRO='Ubuntu'
-        PM='apt'
-		INSTALL_UBUNTU
-    elif grep -Eqi "Raspbian" /etc/issue || grep -Eq "Raspbian" /etc/*-release; then
-        DISTRO='Raspbian'
-        PM='apt'
-		INSTALL_OTHER
-    else
-        echo "unknow linux."
-        exit 1
-    fi
-    echo $DISTRO
-}
-
-INSTALL
-
-exit 0
-

# 登录

地址:http:// 服务器 IP/nagios
用户名:nagiosadmin
密码:nagiosadmin

# 常见问题

  1. 监控日志未写入 mysql(可能是 ndoutils 服务不正常导致)。采用以下脚本命令解决
#!/bin/bash
-sudo rm -f /usr/local/nagios/var/ndo2db.pid
-sudo rm -f /usr/local/nagios/var/ndo.sock
-sudo systemctl restart ndo2db.service
-sudo systemctl status ndo2db.service
-
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +搭建 nagios 监控 - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 监控端服务安装与配置

  1. nagios 需要安装主程序 core 和 nrpe(nagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见官网
  2. nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处
  3. etc/objects/commands.cfg 用于保存 nagios 默认监控命令
  4. etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加)
  5. etc/objects/hosts 目录下配置需要被监控的主机信息
  6. etc/objects/servers 目录下配置需要在被监控主机上执行的监控命令(第 4 项中的命令)

# 被监控端服务安装与配置

  1. 被监控端需要安装 nrpe
  2. 被监控端需要把监控端的命令写入到 nrpe 的配置文件中
  3. 被监控端需要把命令执行脚本放入 libexec 目录中
  4. 被监控端自动安装脚本(可借鉴)
1、请先修改脚本中的服务端IP。
2、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令,弹出选择窗口后选择no。
3、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录,目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。
#!/bin/bash
#服务端 ip
SERVER_IP=10.10.10.121
#安装目录
INSTALL_HOME=`pwd`
#安装 ubuntu 版本
INSTALL_UBUNTU()
{
	sudo apt-get update
	sudo apt-get install -y autoconf automake gcc libc6 libmcrypt-dev make libssl-dev wget openssl
	
	cd /tmp
	#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz
	cp $INSTALL_HOME/Ubuntu/nrpe.tar.gz ./
	tar xzf nrpe.tar.gz
	cd /tmp/nrpe-nrpe-4.0.3/
	sudo ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/
	sudo make all
	sudo make install-groups-users
	sudo make install
	sudo make install-config
	sudo sh -c "echo >> /etc/services"
	sudo sh -c "sudo echo '# Nagios services' >> /etc/services"
	sudo sh -c "sudo echo 'nrpe    5666/tcp' >> /etc/services"
	
	#判断系统是高版本还是低版本
	VERSION=`lsb_release -r --short`
	IS_LOW_VERSION=`echo "$VERSION < 15" | bc`
	if [ $IS_LOW_VERSION = 1 ]; then
		#低版本
		sudo make install-init
	else
		#高版本
		sudo make install-init
		sudo systemctl enable nrpe.service
	fi
	
	sudo mkdir -p /etc/ufw/applications.d
	sudo sh -c "echo '[NRPE]' > /etc/ufw/applications.d/nagios"
	sudo sh -c "echo 'title=Nagios Remote Plugin Executor' >> /etc/ufw/applications.d/nagios"
	sudo sh -c "echo 'description=Allows remote execution of Nagios plugins' >> /etc/ufw/applications.d/nagios"
	sudo sh -c "echo 'ports=5666/tcp' >> /etc/ufw/applications.d/nagios"
	sudo ufw allow NRPE
	sudo ufw reload
	
	sudo sh -c "sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"
	
	cd $INSTALL_HOME
	sudo cp ./sh/* /usr/local/nagios/libexec/
	sudo chmod +xr /usr/local/nagios/libexec/*
	
	sudo sh -c "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' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \$ARG1\$' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"
	NETWORK_INDEX=1
	for NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\t]*//g' | sed 's/[:]*$//g'`;do
			if [ $NETWORK_NAME != 'lo' ]; then
					sudo sh -c "echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg"
					NETWORK_INDEX=`expr $NETWORK_INDEX + 1 `
			fi
	done
	
	if [ $IS_LOW_VERSION = 1 ]; then
		#低版本
		sudo start nrpe
	else
		#高版本
		sudo systemctl start nrpe.service
	fi
}
#安装 centos 版本
INSTALL_CENTOS()
{
	yum install -y gcc glibc glibc-common openssl openssl-devel perl wget
	cd /tmp
	#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz
	cp $INSTALL_HOME/CentOS/nrpe.tar.gz ./
	tar xzf nrpe.tar.gz
	cd /tmp/nrpe-nrpe-4.0.3/
	./configure --enable-command-args
	make all
	make install-groups-users
	make install
	make install-config
	echo >> /etc/services
	echo '# Nagios services' >> /etc/services
	echo 'nrpe    5666/tcp' >> /etc/services
	
	#判断系统是高版本还是低版本
	VERSION=`rpm -q centos-release|cut -d- -f3`
	#安装 bc 命令
	yum -y install bc
	IS_LOW_VERSION=`echo "$VERSION < 7" | bc`
	if [ $IS_LOW_VERSION = 1 ]; then
		#低版本
		make install-init
		
		iptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
		service iptables save
		ip6tables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
		service ip6tables save
	else
		#高版本
		make install-init
		systemctl enable nrpe.service
		
		firewall-cmd --zone=public --add-port=5666/tcp
		firewall-cmd --zone=public --add-port=5666/tcp --permanent
	fi
	
	sudo sh -c "sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"
	
	cd $INSTALL_HOME
	sudo cp ./sh/* /usr/local/nagios/libexec/
	sudo chmod +xr /usr/local/nagios/libexec/*
	
	sudo sh -c "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' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \$ARG1\$' >> /usr/local/nagios/etc/nrpe.cfg"
	sudo sh -c "echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"
	NETWORK_INDEX=1
	for NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\t]*//g' | sed 's/[:]*$//g'`;do
			if [ $NETWORK_NAME != 'lo' ]; then
					sudo sh -c "echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg"
					NETWORK_INDEX=`expr $NETWORK_INDEX + 1 `
			fi
	done
	
	if [ $IS_LOW_VERSION = 1 ]; then
		#低版本
		if [ $(echo "$VERSION < 6" | bc) -eq 1 ]; then
			service nrpe start
		else
			start nrpe
		fi
	else
		#高版本
		systemctl start nrpe.service
	fi
}
#安装其它版本
INSTALL_OTHER()
{
	echo "Not supported at the moment."
}
#根据不同系统安装不同版本
INSTALL()
{
	if grep -Eqii "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then
		DISTRO='CentOS'
        PM='yum'
		INSTALL_CENTOS
    elif grep -Eqi "Red Hat Enterprise Linux Server" /etc/issue || grep -Eq "Red Hat Enterprise Linux Server" /etc/*-release; then
        DISTRO='RHEL'
        PM='yum'
		INSTALL_OTHER
    elif grep -Eqi "Aliyun" /etc/issue || grep -Eq "Aliyun" /etc/*-release; then
        DISTRO='Aliyun'
        PM='yum'
		INSTALL_OTHER
    elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; then
        DISTRO='Fedora'
        PM='yum'
		INSTALL_OTHER
    elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then
        DISTRO='Debian'
        PM='apt'
		INSTALL_OTHER
    elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then
        DISTRO='Ubuntu'
        PM='apt'
		INSTALL_UBUNTU
    elif grep -Eqi "Raspbian" /etc/issue || grep -Eq "Raspbian" /etc/*-release; then
        DISTRO='Raspbian'
        PM='apt'
		INSTALL_OTHER
    else
        echo "unknow linux."
        exit 1
    fi
    echo $DISTRO
}
INSTALL
exit 0

# 登录

地址:http:// 服务器 IP/nagios
用户名:nagiosadmin
密码:nagiosadmin

# 常见问题

  1. 监控日志未写入 mysql(可能是 ndoutils 服务不正常导致)。采用以下脚本命令解决
#!/bin/bash
sudo rm -f /usr/local/nagios/var/ndo2db.pid
sudo rm -f /usr/local/nagios/var/ndo.sock
sudo systemctl restart ndo2db.service
sudo systemctl status ndo2db.service
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/10/19/长了一岁/index.html b/2022/10/19/长了一岁/index.html index 28984da5a..4daa91526 100644 --- a/2022/10/19/长了一岁/index.html +++ b/2022/10/19/长了一岁/index.html @@ -1 +1 @@ -又长了一岁 - 心情 - 生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

一年一次的总结时间又到了,这一年前半年平平无奇,后半年惊涛骇浪。中年危机如期而遇,人身的低谷终究还是来了。很沮丧也很无助,但还是要坚强面对。人生起起伏伏,时好时坏,终归还是会好起来的。加油!加油!加油

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +又长了一岁 - 心情 - 生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

一年一次的总结时间又到了,这一年前半年平平无奇,后半年惊涛骇浪。中年危机如期而遇,人身的低谷终究还是来了。很沮丧也很无助,但还是要坚强面对。人生起起伏伏,时好时坏,终归还是会好起来的。加油!加油!加油

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/10/20/极空间Docker版Wordpress安装与配置/index.html b/2022/10/20/极空间Docker版Wordpress安装与配置/index.html index d2b6e05c0..0de0f9f65 100644 --- a/2022/10/20/极空间Docker版Wordpress安装与配置/index.html +++ b/2022/10/20/极空间Docker版Wordpress安装与配置/index.html @@ -1,17 +1 @@ -极空间 Docker 版 Wordpress 安装与配置 - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 安装

  • 下载最新版 wordpress 镜像,如极空间无法下载,可到 passerma 网站下载。
  • 需要先在 mysql 中创建给 wordpress 使用的库。
  • 文件路径映射(目前极空间不能映射到高速盘,否则无法启动)。
  • 端口映射。
  • 通过映射的端口访问安装界面(一定要通过最终访问的页面进行安装,否则修改配置比较麻烦。如最终是域名访问,就先把域名解析代理等先配置好,再通过域名访问安装)。

# 配置

  • 如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。
if((!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) {
-    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
-    $_SERVER['HTTPS'] = 'on';
-}
-
  • 后台安装插件时如果跳转到 ftp 配置,则需要在 wp-config.php 中加入以下代码,并到 wp-content 目录下创建 tmp 目录,最后还需要给 tmp 目录赋予读写权限。
define('WP_TEMP_DIR', ABSPATH.'wp-content/tmp');
-define('FS_METHOD', 'direct');
-define('FS_CHMOD_DIR', 0777);
-define('FS_CHMOD_FILE', 0777);
-
  • 目录和文件所有者、组会自动变为 root,目前我是通过访问页面时通过命令修正。暂时未发现问题,如果不行则只能通过定时任务来定时修正了。需要在 wp-config.php 中加入以下代码。
chown('/var/www/html', 'www-data');
-chgrp('/var/www/html', 'www-data');
-chmod('/var/www/html/wp-content/plugins', 0777);
-chmod('/var/www/html/wp-content/themes', 0777);
-chmod('/var/www/html/wp-content/tmp', 0777);
-
  • 隐藏后台访问需要在 wp-login.php 中加入以下代码,key、value 和 https://www.xxx.com/ 需要修改为自己的。修改后只能通过 https://www.xxx.com/wp-login.php?key=value 访问,其它访问需要登录的页面都会跳转到配置的 https://www.xxx.com/ 地址。
if($_GET['key'] != 'value') {
-	header('Location: https://www.xxx.com/');
-}
-
\ No newline at end of file +极空间 Docker 版 Wordpress 安装与配置 - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 安装

  • 下载最新版 wordpress 镜像,如极空间无法下载,可到 passerma 网站下载。
  • 需要先在 mysql 中创建给 wordpress 使用的库。
  • 文件路径映射(目前极空间不能映射到高速盘,否则无法启动)。
  • 端口映射。
  • 通过映射的端口访问安装界面(一定要通过最终访问的页面进行安装,否则修改配置比较麻烦。如最终是域名访问,就先把域名解析代理等先配置好,再通过域名访问安装)。

# 配置

  • 如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。
if((!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
    $_SERVER['HTTPS'] = 'on';
}
  • 后台安装插件时如果跳转到 ftp 配置,则需要在 wp-config.php 中加入以下代码,并到 wp-content 目录下创建 tmp 目录,最后还需要给 tmp 目录赋予读写权限。
define('WP_TEMP_DIR', ABSPATH.'wp-content/tmp');
define('FS_METHOD', 'direct');
define('FS_CHMOD_DIR', 0777);
define('FS_CHMOD_FILE', 0777);
  • 目录和文件所有者、组会自动变为 root,目前我是通过访问页面时通过命令修正。暂时未发现问题,如果不行则只能通过定时任务来定时修正了。需要在 wp-config.php 中加入以下代码。
chown('/var/www/html', 'www-data');
chgrp('/var/www/html', 'www-data');
chmod('/var/www/html/wp-content/plugins', 0777);
chmod('/var/www/html/wp-content/themes', 0777);
chmod('/var/www/html/wp-content/tmp', 0777);
  • 隐藏后台访问需要在 wp-login.php 中加入以下代码,key、value 和 https://www.xxx.com/ 需要修改为自己的。修改后只能通过 https://www.xxx.com/wp-login.php?key=value 访问,其它访问需要登录的页面都会跳转到配置的 https://www.xxx.com/ 地址。
if($_GET['key'] != 'value') {
	header('Location: https://www.xxx.com/');
}
\ No newline at end of file diff --git a/2022/10/21/Hexo-Theme-Shoka-Valine评论配置/index.html b/2022/10/21/Hexo-Theme-Shoka-Valine评论配置/index.html index 5bdc8f356..ead2f3b97 100644 --- a/2022/10/21/Hexo-Theme-Shoka-Valine评论配置/index.html +++ b/2022/10/21/Hexo-Theme-Shoka-Valine评论配置/index.html @@ -1,30 +1 @@ -Hexo + Theme.Shoka + Valine 评论配置 - Hexo - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
  • valine 评论需要 LeanCloud 支持

# LeanCloud 注册

  1. LeanCloud 网站完成注册。
  2. 创建应用。
  3. 名称随便取,方案看自己选择。开发版免费但是有限制,商业版收费无限制。
  4. 点击配置按钮进行配置。
  5. 点击设置 - 应用凭证可获取 App ID 和 App Key
  6. 点击设置 - 安全中心根据自己的需求配置

# 修改 Theme.Shoka 配置

valine:
-  appId: 粘贴5中获取的App ID #Your_appId
-  appKey: 粘贴5中获取的App Key #Your_appkey
-  placeholder: ヽ(○´∀`)ノ♪欢迎畅所欲言 # Comment box placeholder
-  avatar: mp #默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro
-  pageSize: 10 # Pagination size
-  lang: zh-CN
-  visitor: true # Article reading statistic 这个要设置为false,以免与 leancloud_visitors 突冲 
-  NoRecordIP: false # Whether to record the commenter IP
-  serverURLs: # When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)
-  powerMode: true
-  tagMeta:
-    visitor: 新朋友
-    master: 博主
-    friend: 小伙伴
-    investor: 金主粑粑
-  tagColor:
-    master: "var(--color-orange)"
-    friend: "var(--color-aqua)"
-    investor: "var(--color-pink)"
-  tagMember:
-    master:
-      # - hash of master@email.com
-      # - hash of master2@email.com
-    friend:
-      # - hash of friend@email.com
-      # - hash of friend2@email.com
-    investor:
-      # - hash of investor1@email.com
-
\ No newline at end of file +Hexo + Theme.Shoka + Valine 评论配置 - Hexo - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
  • valine 评论需要 LeanCloud 支持

# LeanCloud 注册

  1. LeanCloud 网站完成注册。
  2. 创建应用。
  3. 名称随便取,方案看自己选择。开发版免费但是有限制,商业版收费无限制。
  4. 点击配置按钮进行配置。
  5. 点击设置 - 应用凭证可获取 App ID 和 App Key
  6. 点击设置 - 安全中心根据自己的需求配置

# 修改 Theme.Shoka 配置

valine:
  appId: 粘贴5中获取的App ID #Your_appId
  appKey: 粘贴5中获取的App Key #Your_appkey
  placeholder: ヽ(○´∀`)ノ♪欢迎畅所欲言 # Comment box placeholder
  avatar: mp #默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro
  pageSize: 10 # Pagination size
  lang: zh-CN
  visitor: true # Article reading statistic 这个要设置为 false,以免与 leancloud_visitors 突冲 
  NoRecordIP: false # Whether to record the commenter IP
  serverURLs: # When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)
  powerMode: true
  tagMeta:
    visitor: 新朋友
    master: 博主
    friend: 小伙伴
    investor: 金主粑粑
  tagColor:
    master: "var(--color-orange)"
    friend: "var(--color-aqua)"
    investor: "var(--color-pink)"
  tagMember:
    master:
      # - hash of master@email.com
      # - hash of master2@email.com
    friend:
      # - hash of friend@email.com
      # - hash of friend2@email.com
    investor:
      # - hash of investor1@email.com
\ No newline at end of file diff --git a/2022/10/21/极空间Docker版mariadb安装与配置/index.html b/2022/10/21/极空间Docker版mariadb安装与配置/index.html index 033f70a08..8069d3798 100644 --- a/2022/10/21/极空间Docker版mariadb安装与配置/index.html +++ b/2022/10/21/极空间Docker版mariadb安装与配置/index.html @@ -1,18 +1 @@ -极空间 Docker 版 mariadb 安装与配置 - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 介绍

  • mariadb 属于 mysql 的一个分支,完全兼容 mysql,使用方式和 mysql 无区别。

# 安装

  • 本文介绍安装的镜像为 linuxserver_mariadb 的 10.5.13-r0-ls45,原则上使用最新版即可
  • 配置文件映射
  • 端口
  • 环境(MYSQL_ROOT_PASSWORD 为数据库 root 用户密码)
  • 到此已经可以在内网使用了,连接方法同 mysql 一致

# 配置

  • 此处配置为 nginx 反向代理,配置完成后可在外网连接访问
stream {
-	
-	#极空间-docker-mariadb
-	upstream mariadb {
-		hash $remote_addr consistent;
-		server mariadb的ip:端口;
-	}
-
-	server {
-		listen 监听端口;
-
-		proxy_connect_timeout 30s;
-		proxy_timeout 300s;
-		proxy_pass mariadb;
-	}
-    
-}
-
\ No newline at end of file +极空间 Docker 版 mariadb 安装与配置 - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 介绍

  • mariadb 属于 mysql 的一个分支,完全兼容 mysql,使用方式和 mysql 无区别。

# 安装

  • 本文介绍安装的镜像为 linuxserver_mariadb 的 10.5.13-r0-ls45,原则上使用最新版即可
  • 配置文件映射
  • 端口
  • 环境(MYSQL_ROOT_PASSWORD 为数据库 root 用户密码)
  • 到此已经可以在内网使用了,连接方法同 mysql 一致

# 配置

  • 此处配置为 nginx 反向代理,配置完成后可在外网连接访问
stream {
	
	#极空间 - docker-mariadb
	upstream mariadb {
		hash $remote_addr consistent;
		server mariadb的ip:端口;
	}
	server {
		listen 监听端口;
		proxy_connect_timeout 30s;
		proxy_timeout 300s;
		proxy_pass mariadb;
	}
    
}
\ No newline at end of file diff --git a/2022/10/22/极空间Docker版青龙面板安装与配置/index.html b/2022/10/22/极空间Docker版青龙面板安装与配置/index.html index 62a34c8e3..4fc9976b7 100644 --- a/2022/10/22/极空间Docker版青龙面板安装与配置/index.html +++ b/2022/10/22/极空间Docker版青龙面板安装与配置/index.html @@ -1,97 +1 @@ -极空间 Docker 版青龙面板安装与配置 - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 介绍

  • 青龙面板是一个支持 python3、javascript、shell、typescript 的定时任务管理面板。它支持在线管理脚本、环境变量、配置文件,支持在线查看日志及支持多种方式的消息通知。

# 安装

  • 本文使用的是 whyour/qinglong 的镜像。
  • 路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。)
#青龙面板装载路径
-/ql/data
-#博客装载路径(如果你不部署hexo博客可以不用配置)
-/root/.ssh  #ssh证书文件(如果你不用把hexo推送到git上可以不用配置)
-/blog      #hexo博客编译目录
-/blog/nginx_blog  #nginx上放置博客的目录(例如:/Docker/nginx/html/blog)
-
  • 端口

    4000端口是hexo-admin使用的,如果你不用可以不配置
  • 环境
  • 登录
    地址:http:// 极空间 IP:5700
    默认账号:admin
    默认密码:admin

# 配置

  • 我主要用青龙面板跑京东的脚本,所以也只介绍相关的配置方法
  • 定时任务 (我使用的是 KingRan/KR 的集合库,以下是拉取命令)
    ql repo https://github.com/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp|wskey" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
  • 定时规则(我是每 3 小时拉取一次,不要拉取太频繁否则可能被封)
    0 */3 * * *
  • 环境变量
名称:JD_COOKIE
-值:web京东登陆后按F12在网络tab页中的请求内查找cookie,然后复制pt_key=到pt_pin=等
-
  • 配置文件 (主要修改和添加以下配置)
repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可
-RepoFileExtensions="js py ts"
-钉钉(消息推送)
-export DD_BOT_TOKEN=
-export DD_BOT_SECRET=
-##开卡
-export guaopencard_All="true"
-export guaopencard_addSku_All="true"
-export guaopencardRun_All="true"
-export guaopencard_draw="true"
-export JD_TRY="true"
-export exjxbeans="true"
-export DY_OPENALL="true"
-#抽奖
-export opencard_draw=3
-#开启脚本依赖文件缺失修复
-export ec_fix_dep="true" 
-#开启脚本依赖文件更新
-export ec_re_dep="true" 
-#清空购物车
-export JD_CART_REMOVE="true"
-export JD_CART="true"
-#去掉多余的双十一红包脚本
-export FLCODE=''
-#加购物车抽奖
-export RUN_CAR=true
-#停用小额免密支付
-export JD_PAY_CONTRACT=true
-
  • 依赖管理
#nodejs依赖
-crypto-js	
-prettytable	
-dotenv	
-jsdom	
-date-fns	
-tough-cookie	
-tslib	
-ws@7.4.3	
-ts-md5	
-jsdom -g	
-jieba	
-fs	
-form-data	
-json5	
-global-agent	
-png-js	
-@types/node	
-require	
-typescript	
-js-base64	
-axios
-#pythone依赖
-requests	
-canvas	
-ping3	
-jieba	
-aiohttp	
-PyExecJS
-#Linux依赖
-bizCode
-bizMsg
-lxml
-

# 其它

#配置国内源
-pip config --global set global.index-url https://mirrors.aliyun.com/pypi/simple/
-pip config --global set install.trusted-host https://mirrors.aliyun.com
-
-#升级pip
-pip install --upgrade pip
-
-#更新青龙
-ql update
-
-#已知要安装的依赖(不安装部分脚本任务会失败)
-pnpm install ds
-
-#一键安装所有依赖(基于Faker一键脚本安装的青龙
-可通过执行/ql/data/scripts下的QLDependency.sh脚本安装,如脚本已经更新则通过下面命令执行
-curl -fsSL https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh | sh
-
-#一般出现这种错误:(缺依赖)
-Error: Cannot find module 'xx'
-执行pnpm install xxx
-
-#一般出现这种错误:(缺文件)
-Error: Cannot find module './xx'
-那就是拉库命令不完整,请检查或复制完整的拉库命
-
-#Python3依赖安装失败修复(基于Faker一键脚本安装的青龙)
-curl -sS https://bootstrap.pypa.io/get-pip.py | python3
-
\ No newline at end of file +极空间 Docker 版青龙面板安装与配置 - Docker - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 介绍

  • 青龙面板是一个支持 python3、javascript、shell、typescript 的定时任务管理面板。它支持在线管理脚本、环境变量、配置文件,支持在线查看日志及支持多种方式的消息通知。

# 安装

  • 本文使用的是 whyour/qinglong 的镜像。
  • 路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。)
#青龙面板装载路径
/ql/data
#博客装载路径(如果你不部署 hexo 博客可以不用配置)
/root/.ssh  #ssh 证书文件(如果你不用把 hexo 推送到 git 上可以不用配置)
/blog      #hexo 博客编译目录
/blog/nginx_blog  #nginx 上放置博客的目录(例如:/Docker/nginx/html/blog)
  • 端口

    4000端口是hexo-admin使用的,如果你不用可以不配置
  • 环境
  • 登录
    地址:http:// 极空间 IP:5700
    默认账号:admin
    默认密码:admin

# 配置

  • 我主要用青龙面板跑京东的脚本,所以也只介绍相关的配置方法
  • 定时任务 (我使用的是 KingRan/KR 的集合库,以下是拉取命令)
    ql repo https://github.com/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp|wskey" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
  • 定时规则(我是每 3 小时拉取一次,不要拉取太频繁否则可能被封)
    0 */3 * * *
  • 环境变量
名称:JD_COOKIE
值:web京东登陆后按F12在网络tab页中的请求内查找cookie,然后复制pt_key=到pt_pin=等
  • 配置文件 (主要修改和添加以下配置)
repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可
RepoFileExtensions="js py ts"
钉钉(消息推送)
export DD_BOT_TOKEN=
export DD_BOT_SECRET=
## 开卡
export guaopencard_All="true"
export guaopencard_addSku_All="true"
export guaopencardRun_All="true"
export guaopencard_draw="true"
export JD_TRY="true"
export exjxbeans="true"
export DY_OPENALL="true"
#抽奖
export opencard_draw=3
#开启脚本依赖文件缺失修复
export ec_fix_dep="true" 
#开启脚本依赖文件更新
export ec_re_dep="true" 
#清空购物车
export JD_CART_REMOVE="true"
export JD_CART="true"
#去掉多余的双十一红包脚本
export FLCODE=''
#加购物车抽奖
export RUN_CAR=true
#停用小额免密支付
export JD_PAY_CONTRACT=true
  • 依赖管理
#nodejs 依赖
crypto-js	
prettytable	
dotenv	
jsdom	
date-fns	
tough-cookie	
tslib	
ws@7.4.3	
ts-md5	
jsdom -g	
jieba	
fs	
form-data	
json5	
global-agent	
png-js	
@types/node	
require	
typescript	
js-base64	
axios
#pythone 依赖
requests	
canvas	
ping3	
jieba	
aiohttp	
PyExecJS
#Linux 依赖
bizCode
bizMsg
lxml

# 其它

#配置国内源
pip config --global set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config --global set install.trusted-host https://mirrors.aliyun.com
#升级 pip
pip install --upgrade pip
#更新青龙
ql update
#已知要安装的依赖(不安装部分脚本任务会失败)
pnpm install ds
#一键安装所有依赖(基于 Faker 一键脚本安装的青龙
可通过执行/ql/data/scripts下的QLDependency.sh脚本安装,如脚本已经更新则通过下面命令执行
curl -fsSL https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh | sh
#一般出现这种错误:(缺依赖)
Error: Cannot find module 'xx'
执行pnpm install xxx
#一般出现这种错误:(缺文件)
Error: Cannot find module './xx'
那就是拉库命令不完整,请检查或复制完整的拉库命
#Python3 依赖安装失败修复(基于 Faker 一键脚本安装的青龙)
curl -sS https://bootstrap.pypa.io/get-pip.py | python3
\ No newline at end of file diff --git a/2022/10/27/极空间web端https直连nginx配置/index.html b/2022/10/27/极空间web端https直连nginx配置/index.html index 7c9248c49..73f488919 100644 --- a/2022/10/27/极空间web端https直连nginx配置/index.html +++ b/2022/10/27/极空间web端https直连nginx配置/index.html @@ -1,70 +1 @@ -极空间 web 端 https 直连 nginx 配置 - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 介绍

  • ip 直连一般都映射了 5055, 但是直接访问 5055 极空间只提供了 http 协议,如果希望使用 https 协议则必须使用其它端口进行访问。以下方案采用 nginx 反向代理实现,端口使用 10000 举例。

# 配置

  1. 需要先把 10000 端口在路由器上做好映射。
  2. 证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度)
  3. http 跳转 https 配置
server {
-		if ($scheme = http) {
-			rewrite ^(.*)$ https://$host$1 permanent;
-		}
-}
-
  1. web 端口监听配置
#极空间-web
-server {
-	listen 10000 ssl http2; #ipv4
-	listen [::]:10000 ssl http2; #ipv6
-	server_name xxx.xxx.com; #填写自己的域名,主域名或者子域名
-
-	#include /etc/nginx/conf.d/ssl/ssl_common.conf;
-	ssl_certificate_key /etc/nginx/conf.d/ssl/xxx.key;  #加密证书
-	ssl_certificate /etc/nginx/conf.d/ssl/xxx.pem;  #加密证书
-	ssl_session_timeout 1d;
-	ssl_session_cache shared:MozSSL:10m;
-	ssl_session_tickets off;
-	ssl_protocols TLSv1.2 TLSv1.3;
-	ssl_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;
-	ssl_prefer_server_ciphers on;
-
-   #开启OCSP stapling
-	ssl_stapling on;
-	ssl_stapling_verify on;
-
-	client_max_body_size 128M;
-
-	add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
-
-	proxy_send_timeout 180s; #设置发送超时时间
-   proxy_read_timeout 180s; #设置读取超时时间
-
-	# Prevent Information leaks
-	proxy_hide_header X-Powered-By;
-	proxy_hide_header Server;
-	proxy_hide_header X-AspNetMvc-Version;
-	proxy_hide_header X-AspNet-Version;
-
-	# http security headers
-	add_header X-Content-Type-Options nosniff;
-	add_header Pragma no-cache;
-	add_header Cache-Control no-store;
-	add_header X-XSS-Protection "1; mode=block";
-	add_header Referrer-Policy origin-when-cross-origin;
-	add_header X-Permitted-Cross-Domain-Policies none;
-   add_header X-Frame-Options SAMEORIGIN; #允许同域嵌套
-
-	# Add Security cookie flags
-	proxy_cookie_path ~(.*) "$1; SameSite=strict; secure; httponly";
-
-	# Path to the root of your installation
-	location / {
-		proxy_intercept_errors on;
-		proxy_max_temp_file_size 0;
-		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;
-  
-		proxy_pass http://极空间内网ip:5055; #这里设置你自己要跳转的局域网应用;
-		proxy_redirect http://域名:5055/home https://域名:10000/home; #极空间在登陆后会跳转到http协议的5055端口,所以要在此替换为https协议的10000端口
-	}
-
-	error_page  500 502 503 504 /500.html;
-	error_page  400 404 /500.html;
-	location = /500.html {
-		root /usr/share/nginx/html/; #错误html
-	}
-}
-

# 问题

  • 需要开启允许嵌套否则登陆后所有应用都是拒绝访问
  • 需要配置 proxy_redirect 替换响应 url,否则会跳转到默认 http 协议的 5055 端口
  • 如果配置 proxy_redirect 后无效可能需要清除浏览器缓存(F12 - 网络 - 右键点击 url 区域 - 清除浏览器缓存)
\ No newline at end of file +极空间 web 端 https 直连 nginx 配置 - 极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 介绍

  • ip 直连一般都映射了 5055, 但是直接访问 5055 极空间只提供了 http 协议,如果希望使用 https 协议则必须使用其它端口进行访问。以下方案采用 nginx 反向代理实现,端口使用 10000 举例。

# 配置

  1. 需要先把 10000 端口在路由器上做好映射。
  2. 证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度)
  3. http 跳转 https 配置
server {
		if ($scheme = http) {
			rewrite ^(.*)$ https://$host$1 permanent;
		}
}
  1. web 端口监听配置
#极空间 - web
server {
	listen 10000 ssl http2; #ipv4
	listen [::]:10000 ssl http2; #ipv6
	server_name xxx.xxx.com; #填写自己的域名,主域名或者子域名
	#include /etc/nginx/conf.d/ssl/ssl_common.conf;
	ssl_certificate_key /etc/nginx/conf.d/ssl/xxx.key;  #加密证书
	ssl_certificate /etc/nginx/conf.d/ssl/xxx.pem;  #加密证书
	ssl_session_timeout 1d;
	ssl_session_cache shared:MozSSL:10m;
	ssl_session_tickets off;
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_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;
	ssl_prefer_server_ciphers on;
   #开启 OCSP stapling
	ssl_stapling on;
	ssl_stapling_verify on;
	client_max_body_size 128M;
	add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
	proxy_send_timeout 180s; #设置发送超时时间
   proxy_read_timeout 180s; #设置读取超时时间
	# Prevent Information leaks
	proxy_hide_header X-Powered-By;
	proxy_hide_header Server;
	proxy_hide_header X-AspNetMvc-Version;
	proxy_hide_header X-AspNet-Version;
	# http security headers
	add_header X-Content-Type-Options nosniff;
	add_header Pragma no-cache;
	add_header Cache-Control no-store;
	add_header X-XSS-Protection "1; mode=block";
	add_header Referrer-Policy origin-when-cross-origin;
	add_header X-Permitted-Cross-Domain-Policies none;
   add_header X-Frame-Options SAMEORIGIN; #允许同域嵌套
	# Add Security cookie flags
	proxy_cookie_path ~(.*) "$1; SameSite=strict; secure; httponly";
	# Path to the root of your installation
	location / {
		proxy_intercept_errors on;
		proxy_max_temp_file_size 0;
		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;
  
		proxy_pass http://极空间内网ip:5055; #这里设置你自己要跳转的局域网应用;
		proxy_redirect http://域名:5055/home https://域名:10000/home; #极空间在登陆后会跳转到 http 协议的 5055 端口,所以要在此替换为 https 协议的 10000 端口
	}
	error_page  500 502 503 504 /500.html;
	error_page  400 404 /500.html;
	location = /500.html {
		root /usr/share/nginx/html/; #错误 html
	}
}

# 问题

  • 需要开启允许嵌套否则登陆后所有应用都是拒绝访问
  • 需要配置 proxy_redirect 替换响应 url,否则会跳转到默认 http 协议的 5055 端口
  • 如果配置 proxy_redirect 后无效可能需要清除浏览器缓存(F12 - 网络 - 右键点击 url 区域 - 清除浏览器缓存)
\ No newline at end of file diff --git a/2022/10/31/一键关闭Windows10-11系统自动更新/index.html b/2022/10/31/一键关闭Windows10-11系统自动更新/index.html index e0600476f..9457d46c0 100644 --- a/2022/10/31/一键关闭Windows10-11系统自动更新/index.html +++ b/2022/10/31/一键关闭Windows10-11系统自动更新/index.html @@ -1 +1 @@ -一键关闭 Windows10/11 系统自动更新 - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 介绍

  • 当你经常需要在家远程到公司进行办公,或者开启了很多临时文件、文档、软件需要等到第二天继续之前的工作时,结果系统自行更新并重启了。是不是会让你非常郁闷。关闭系统自行更新就可以轻松解决此类问题。

# 下载

win10 / win11 / 本地

\ No newline at end of file +一键关闭 Windows10/11 系统自动更新 - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 介绍

  • 当你经常需要在家远程到公司进行办公,或者开启了很多临时文件、文档、软件需要等到第二天继续之前的工作时,结果系统自行更新并重启了。是不是会让你非常郁闷。关闭系统自行更新就可以轻松解决此类问题。

# 下载

win10 / win11 / 本地

\ No newline at end of file diff --git a/2022/11/01/360独立版小工具/index.html b/2022/11/01/360独立版小工具/index.html index 50795f6b0..e730dc121 100644 --- a/2022/11/01/360独立版小工具/index.html +++ b/2022/11/01/360独立版小工具/index.html @@ -1 +1 @@ -360 独立版小工具 - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 360 独立版小工具


360 全家桶众说纷纭但工具箱还是挺实用的,这波小工具可以单独下载使用,有需要的朋友赶紧下载吧!

下载地址

# 部分工具截图



更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +360 独立版小工具 - 工具 - Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 360 独立版小工具


360 全家桶众说纷纭但工具箱还是挺实用的,这波小工具可以单独下载使用,有需要的朋友赶紧下载吧!

下载地址

# 部分工具截图



更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/11/02/2-dev-null和-dev-null-2-1和2-1-dev-null的区别/index.html b/2022/11/02/2-dev-null和-dev-null-2-1和2-1-dev-null的区别/index.html index 156e216a4..d78a11862 100644 --- a/2022/11/02/2-dev-null和-dev-null-2-1和2-1-dev-null的区别/index.html +++ b/2022/11/02/2-dev-null和-dev-null-2-1和2-1-dev-null的区别/index.html @@ -1,8 +1 @@ -2>/dev/null 和 >/dev/null 2>&1 和 2>&1>/dev/null 的区别 - Shell - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 区别:

2>/dev/null
-

意思就是把错误输出到 “黑洞”

>/dev/null 2>&1
-

默认情况是 1,也就是等同于 1>/dev/null 2>&1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞”

2>&1 >/dev/null
-

意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕

# 解释:

  1. 文件描述符
    Linux 系统预留三个文件描述符:0、1 和 2,他们的意义如下所示:
    0—— 标准输入(stdin)
    略...
    1—— 标准输出(stdout)
    在当前目录下,有且只有一个文件名称为 a.txt 的文件,这时我们运行这个命令【ls a.txt】, 就会获得一个标准输出 stdout 的输出结果:a.txt

    2—— 标准错误(stderr)
    在当前目录下,有且只有一个文件名称为 a.txt 的文件,我们运行命令【ls b.txt】,我们就会获得一个标准错误 stderr 的输出结果 “ls:无法访问 b.txt:没有这样的文件或目录”。

  2. 重定向
    重定向的符号有两个:> 或 >>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举例如下:

  • 重定向标准输出 stdout

    如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将 a.txt 打印到屏幕。在紧接的 cat 操作后,可以发现本来应该被输出的内容被记录到 stdout.txt 中。

  • 重定向标准错误 stderr

    如上图所示,文件描述符 2,标准错误的重定向也是同样的原理被记录在了文件 stderr.txt 这个文件里面了。

  • 可以将 stderr 单独定向到一个文件,stdout 重定向到另一个文件

ls b.txt 2> stderr.txt 1>stdout.txt
-
  • 也可以将 stderr 和 stdout 重定向到同一个文件
ls b.txt > output.txt 2>&1
-
  • 或采用下面的方法,可以少写几个字,能达到同样的效果
ls b.txt &> output.txt
-ls b.txt >& output.txt #两个表达式效果一样的
-
  1. Linux 特殊文件
    /dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null 这个设备通常也被称为位桶(bit bucket)或黑洞。
    所以,2>/dev/null 的意思就是将标准错误 stderr 删掉。
\ No newline at end of file +2>/dev/null 和 >/dev/null 2>&1 和 2>&1>/dev/null 的区别 - Shell - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 区别:

2>/dev/null

意思就是把错误输出到 “黑洞”

>/dev/null 2>&1

默认情况是 1,也就是等同于 1>/dev/null 2>&1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞”

2>&1 >/dev/null

意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕

# 解释:

  1. 文件描述符
    Linux 系统预留三个文件描述符:0、1 和 2,他们的意义如下所示:
    0—— 标准输入(stdin)
    略...
    1—— 标准输出(stdout)
    在当前目录下,有且只有一个文件名称为 a.txt 的文件,这时我们运行这个命令【ls a.txt】, 就会获得一个标准输出 stdout 的输出结果:a.txt

    2—— 标准错误(stderr)
    在当前目录下,有且只有一个文件名称为 a.txt 的文件,我们运行命令【ls b.txt】,我们就会获得一个标准错误 stderr 的输出结果 “ls:无法访问 b.txt:没有这样的文件或目录”。

  2. 重定向
    重定向的符号有两个:> 或 >>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举例如下:

  • 重定向标准输出 stdout

    如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将 a.txt 打印到屏幕。在紧接的 cat 操作后,可以发现本来应该被输出的内容被记录到 stdout.txt 中。

  • 重定向标准错误 stderr

    如上图所示,文件描述符 2,标准错误的重定向也是同样的原理被记录在了文件 stderr.txt 这个文件里面了。

  • 可以将 stderr 单独定向到一个文件,stdout 重定向到另一个文件

ls b.txt 2> stderr.txt 1>stdout.txt
  • 也可以将 stderr 和 stdout 重定向到同一个文件
ls b.txt > output.txt 2>&1
  • 或采用下面的方法,可以少写几个字,能达到同样的效果
ls b.txt &> output.txt
ls b.txt >& output.txt #两个表达式效果一样的
  1. Linux 特殊文件
    /dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null 这个设备通常也被称为位桶(bit bucket)或黑洞。
    所以,2>/dev/null 的意思就是将标准错误 stderr 删掉。
\ No newline at end of file diff --git a/2022/11/03/上班了/index.html b/2022/11/03/上班了/index.html index 97ad50c29..098539533 100644 --- a/2022/11/03/上班了/index.html +++ b/2022/11/03/上班了/index.html @@ -1 +1 @@ -上班了 - 心情 - 生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
  • 终于又上班了。O (∩_∩) O~
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +上班了 - 心情 - 生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
  • 终于又上班了。O (∩_∩) O~
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/11/04/记一次Vue项目的部署/index.html b/2022/11/04/记一次Vue项目的部署/index.html index deb748437..37c1e9482 100644 --- a/2022/11/04/记一次Vue项目的部署/index.html +++ b/2022/11/04/记一次Vue项目的部署/index.html @@ -1,59 +1 @@ -记一次 Vue 项目的部署 - 项目部署 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 描述

  • 今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。

# 过程

  • 卸载旧的 nodejs(此命令会卸载掉相关依赖包)
sudo apt autoremove --purge nodejs
-
  • 安装 NodeJS
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - && sudo apt-get install -y nodejs
-
  • 安装 yarn
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
-
-echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
-
-sudo apt-get update && sudo apt-get install yarn
-
  • 初始化 (到项目根目录执行)
yarn install
-
  • 编译(到项目根目录执行,完成后会生成 dist 目录)
yarn build
-
  • 安装 nginx
apt install nginx
-
  • 配置 nginx (编译 /etc/nginx/sites-available/default)
server {
-        listen 80 default_server;
-        listen [::]:80 default_server;
-
-        # SSL configuration
-        #
-        # listen 443 ssl default_server;
-        # listen [::]:443 ssl default_server;
-        #
-        # Note: You should disable gzip for SSL traffic.
-        # See: https://bugs.debian.org/773332
-        #
-        # Read up on ssl_ciphers to ensure a secure configuration.
-        # See: https://bugs.debian.org/765782
-        #
-        # Self signed certs generated by the ssl-cert package
-        # Don't use them in a production server!
-        #
-        # include snippets/snakeoil.conf;
-
-        root /var/www/html;
-
-        # Add index.php to the list if you are using PHP
-        index index.html index.htm index.nginx-debian.html;
-
-        server_name _;
-
-        location /api {
-                proxy_pass http://localhost:8080;
-        }
-
-        location / {
-                # First attempt to serve request as file, then
-                # as directory, then fall back to displaying a 404.
-                #try_files $uri $uri/ =404;
-                alias /opt/codes/dayu-tools-arbitrage-web/dist/;
-                try_files $uri $uri/ @router;
-                index index.html index.htm;
-        }
-
-        location @router {
-                rewrite ^.*$ /index.html last;
-        }
-}
-
-

# 其它

  • 重新编译前需要先删除 dist 目录
rm dist -fr
-
-yarn build
-
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +记一次 Vue 项目的部署 - 项目部署 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 描述

  • 今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。

# 过程

  • 卸载旧的 nodejs(此命令会卸载掉相关依赖包)
sudo apt autoremove --purge nodejs
  • 安装 NodeJS
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - && sudo apt-get install -y nodejs
  • 安装 yarn
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
  • 初始化 (到项目根目录执行)
yarn install
  • 编译(到项目根目录执行,完成后会生成 dist 目录)
yarn build
  • 安装 nginx
apt install nginx
  • 配置 nginx (编译 /etc/nginx/sites-available/default)
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;
        root /var/www/html;
        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        location /api {
                proxy_pass http://localhost:8080;
        }
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                alias /opt/codes/dayu-tools-arbitrage-web/dist/;
                try_files $uri $uri/ @router;
                index index.html index.htm;
        }
        location @router {
                rewrite ^.*$ /index.html last;
        }

# 其它

  • 重新编译前需要先删除 dist 目录
rm dist -fr
yarn build
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/2022/11/08/Nginx配置-反向代理/index.html b/2022/11/08/Nginx配置-反向代理/index.html index 2158d48f9..1eeca7f4c 100644 --- a/2022/11/08/Nginx配置-反向代理/index.html +++ b/2022/11/08/Nginx配置-反向代理/index.html @@ -1,200 +1 @@ -Nginx 配置 - 反向代理 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 引言

  • 所有配置方法和介绍均来至于网络搜索汇总,主要用于方便后期巩固学习。

# 何为反向代理

  • 在介绍反向代理之前,先来了解一下正向代理。

__正向代理:__如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。
991a203be1ec82b36e1f326376617d40.png
__反向代理:__看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
1c87e386a0ce624a3949bda443cf346d.png

正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果是在服务器用,用户无感知,就是反向代理。

# Nginx 配置文件

  • 在学习 Nginx 之前,要熟知它的配置文件,毕竟,下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。

  • Nginx 默认的配置文件是在安装目录下的 conf 目录下,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。完整的配置文件,可以看一下文章最后。修改过 nginx.conf 配置文件,记得要重启 Nginx 服务(☆☆☆☆☆)

  • 配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):

# 主进程叫master,负责管理子进程,子进程叫worker
# worker_processes配置项表示开启几个业务进程,一般和cpu核数有关
worker_processes  1;
events {
    worker_connections  1024;
}
http {
	# include表示可以引入其他文件,此处表示引入http mime类型
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	# 虚拟主机,可以配置多个
    server {
        listen       80;
        server_name  localhost;
        location / {
        	# 路径匹配之后,哪个目录下去匹配相应的网页,html是相对路径
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
	}
}

去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:

  1. 全局块
worker_processes  1;
-

从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

上面这行 worker_processes 配置,是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。

  1. events 块
events {
-	worker_connections  1024;
-}
-

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等

上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

  1. http 块
http {
-    include       mime.types;
-    default_type  application/octet-stream;
-    sendfile        on;
-    keepalive_timeout  65;
-
-    server {
-        listen       80;
-        server_name  localhost;
-
-        location / {
-            root   html;
-            index  index.html index.htm;
-        }
-
-        error_page   500 502 503 504  /50x.html;
-        location = /50x.html {
-            root   html;
-    }
-}
-

这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置

__http 全局块:__http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

__server 块:__这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

__location 块:__这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。(☆☆☆☆☆)

# 反向代理配置

  1. location 配置规则
location [ = | ~ | ~* | ^~ | @ ] /uri {
-
-}
-
-=    :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
-~    :用于表示 uri 包含正则表达式,并且区分大小写。
-~*   :用于表示 uri 包含正则表达式,并且不区分大小写。
-^~   :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
-@    : "@" 定义一个命名的 location,使用在内部定向时,例如 error_page
-/uri  :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则
-/    :通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default
-
-☆☆☆☆☆ uri没有“/”结尾时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等。而有“/”结尾时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求
-
  1. proxy_pass 配置规则
url结尾加上了/,相当于是绝对路径,则Nginx不会把location中匹配的路径部分加入代理uri。
-url结尾不加/,Nginx则会把匹配的路径部分加入代理uri。
-
-情景1:
-proxy_pass后有/ 
-访问地址:http://localhost:8081/WCP.Service/wcp/modeladapter/download/asc.shtml
-最终代理:http://10.194.171.7:13082/modeladapter/download/asc.shtml
-location /WCP.Service/wcp/modeladapter/download/ {
-	proxy_pass   http://10.194.171.7:13082/modeladapter/download/;
-}
-访问地址:http://localhost:8081/model/asc.shtml
-最终代理:http://127.0.0.1:8082/model/asc.shtml
-location /model/ {
-	proxy_pass   http://127.0.0.1:8082/model/;
-}
-
-情景2:
-proxy_pass后有/
-访问地址:http://localhost:8081/model/asc.shtml
-最终代理:http://127.0.0.1:8082/asc.shtml
-location /model/ {
-	proxy_pass   http://127.0.0.1:8082/;
-}
-
-情景3:
-proxy_pass后没有/ 
-访问地址:http://localhost:8081/model/asc.shtml
-最终代理:http://127.0.0.1:8082/model/asc.shtml
-location /model/ {
-	proxy_pass   http://127.0.0.1:8082;
-}
-
-情景4
-proxy_pass后没有/ 
-访问地址:http://localhost:8081/model/asc.shtml
-最终代理:http://127.0.0.1:8082/AAAmodel/asc.shtml
-location /model/ {
-	proxy_pass   http://127.0.0.1:8082/AAA;
-}
-
-情景5
-proxy_pass后有/
-访问地址:http://localhost:8081/model/asc.shtml
-最终代理:http://127.0.0.1:8082/asc.shtml
-location /model {
-	proxy_pass   http://127.0.0.1:8082/;
-}
-
-情景6
-proxy_pass后有/
-访问地址:http://localhost:8081/modelBBB/asc.shtml
-最终代理:http://127.0.0.1:8082/asc.shtml
-location /model {
-	proxy_pass   http://127.0.0.1:8082/;
-}
-

# Nginx 完整配置文件

#user  nobody;
-worker_processes  1;
-
-#error_log  logs/error.log;
-#error_log  logs/error.log  notice;
-#error_log  logs/error.log  info;
-
-#pid        logs/nginx.pid;
-
-events {
-    worker_connections  1024;
-}
-
-http {
-    include       mime.types;
-    default_type  application/octet-stream;
-
-    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-    #                  '$status $body_bytes_sent "$http_referer" '
-    #                  '"$http_user_agent" "$http_x_forwarded_for"';
-
-    #access_log  logs/access.log  main;
-
-    sendfile        on;
-    #tcp_nopush     on;
-
-    #keepalive_timeout  0;
-    keepalive_timeout  65;
-
-    #gzip  on;
-
-    server {
-        listen       80;
-        server_name  localhost;
-
-        #charset koi8-r;
-
-        #access_log  logs/host.access.log  main;
-
-        location / {
-            root   html;
-            index  index.html index.htm;
-        }
-
-        #error_page  404              /404.html;
-
-        # redirect server error pages to the static page /50x.html
-        #
-        error_page   500 502 503 504  /50x.html;
-        location = /50x.html {
-            root   html;
-        }
-
-        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
-        #
-        #location ~ \.php$ {
-        #    proxy_pass   http://127.0.0.1;
-        #}
-
-        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
-        #
-        #location ~ \.php$ {
-        #    root           html;
-        #    fastcgi_pass   127.0.0.1:9000;
-        #    fastcgi_index  index.php;
-        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
-        #    include        fastcgi_params;
-        #}
-
-        # deny access to .htaccess files, if Apache's document root
-        # concurs with nginx's one
-        #
-        #location ~ /\.ht {
-        #    deny  all;
-        #}
-    }
-    # another virtual host using mix of IP-, name-, and port-based configuration
-    #
-    #server {
-    #    listen       8000;
-    #    listen       somename:8080;
-    #    server_name  somename  alias  another.alias;
-    #    location / {
-    #        root   html;
-    #        index  index.html index.htm;
-    #    }
-    #}
-    # HTTPS server
-    #
-    #server {
-    #    listen       443 ssl;
-    #    server_name  localhost;
-    #    ssl_certificate      cert.pem;
-    #    ssl_certificate_key  cert.key;
-
-    #    ssl_session_cache    shared:SSL:1m;
-    #    ssl_session_timeout  5m;
-
-    #    ssl_ciphers  HIGH:!aNULL:!MD5;
-    #    ssl_prefer_server_ciphers  on;
-
-    #    location / {
-    #        root   html;
-    #        index  index.html index.htm;
-    #    }
-    #}
-}
-
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +Nginx 配置 - 反向代理 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 引言

  • 所有配置方法和介绍均来至于网络搜索汇总,主要用于方便后期巩固学习。

# 何为反向代理

  • 在介绍反向代理之前,先来了解一下正向代理。

__正向代理:__如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。
991a203be1ec82b36e1f326376617d40.png
__反向代理:__看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
1c87e386a0ce624a3949bda443cf346d.png

正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果是在服务器用,用户无感知,就是反向代理。

# Nginx 配置文件

  • 在学习 Nginx 之前,要熟知它的配置文件,毕竟,下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。

  • Nginx 默认的配置文件是在安装目录下的 conf 目录下,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。完整的配置文件,可以看一下文章最后。修改过 nginx.conf 配置文件,记得要重启 Nginx 服务(☆☆☆☆☆)

  • 配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):

# 主进程叫 master,负责管理子进程,子进程叫 worker
# worker_processes 配置项表示开启几个业务进程,一般和 cpu 核数有关
worker_processes  1;
events {
    worker_connections  1024;
}
http {
	# include 表示可以引入其他文件,此处表示引入 http mime 类型
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	# 虚拟主机,可以配置多个
    server {
        listen       80;
        server_name  localhost;
        location / {
        	# 路径匹配之后,哪个目录下去匹配相应的网页,html 是相对路径
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
	}
}

去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:

  1. 全局块
worker_processes  1;

从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

上面这行 worker_processes 配置,是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。

  1. events 块
events {
	worker_connections  1024;
}

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等

上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

  1. http 块
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
    }
}

这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置

__http 全局块:__http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

__server 块:__这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

__location 块:__这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。(☆☆☆☆☆)

# 反向代理配置

  1. location 配置规则
location [ = | ~ | ~* | ^~ | @ ] /uri {
}
=    :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
~    :用于表示 uri 包含正则表达式,并且区分大小写。
~*   :用于表示 uri 包含正则表达式,并且不区分大小写。
^~   :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
@    : "@" 定义一个命名的 location,使用在内部定向时,例如 error_page
/uri  :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则
/    :通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default
☆☆☆☆☆ uri没有“/”结尾时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等。而有“/”结尾时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求
  1. proxy_pass 配置规则
url结尾加上了/,相当于是绝对路径,则Nginx不会把location中匹配的路径部分加入代理uri。
url结尾不加/,Nginx则会把匹配的路径部分加入代理uri。
情景1:
proxy_pass后有/ 
访问地址:http://localhost:8081/WCP.Service/wcp/modeladapter/download/asc.shtml
最终代理:http://10.194.171.7:13082/modeladapter/download/asc.shtml
location /WCP.Service/wcp/modeladapter/download/ {
	proxy_pass   http://10.194.171.7:13082/modeladapter/download/;
}
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/model/asc.shtml
location /model/ {
	proxy_pass   http://127.0.0.1:8082/model/;
}
情景2:
proxy_pass后有/
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/asc.shtml
location /model/ {
	proxy_pass   http://127.0.0.1:8082/;
}
情景3:
proxy_pass后没有/ 
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/model/asc.shtml
location /model/ {
	proxy_pass   http://127.0.0.1:8082;
}
情景4
proxy_pass后没有/ 
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/AAAmodel/asc.shtml
location /model/ {
	proxy_pass   http://127.0.0.1:8082/AAA;
}
情景5
proxy_pass后有/
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/asc.shtml
location /model {
	proxy_pass   http://127.0.0.1:8082/;
}
情景6
proxy_pass后有/
访问地址:http://localhost:8081/modelBBB/asc.shtml
最终代理:http://127.0.0.1:8082/asc.shtml
location /model {
	proxy_pass   http://127.0.0.1:8082/;
}

# Nginx 完整配置文件

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/404.html b/404.html index e8d013fe1..bfeb10c4f 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -Σ( ° △ °|||)︴404!何も見えない | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
Σ( ° △ °|||)︴404!何も見えない
\ No newline at end of file +Σ( ° △ °|||)︴404!何も見えない | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
Σ( ° △ °|||)︴404!何も見えない
\ No newline at end of file diff --git a/about/me.html b/about/me.html index 9c0343c3a..81a3be0ff 100644 --- a/about/me.html +++ b/about/me.html @@ -1 +1 @@ -| ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 个人信息

  • 姓名:李海涛
  • 性别:男
  • 学历:本科
  • 生肖:鼠
  • 星座:天秤

# 个人爱好

  • 跑步
  • 篮球
  • 听歌
  • 电影

# 编程语言

  • java
  • python
  • php

# 项目经历 - 近期

  1. 智能量化决策交易系统

    该项目主要用于对期货、股票等进行智能化交易,会根据用户事先设置的规则决策是否买卖,并给出信号、收益、最大回撤等详细的统计报告及分析报表。 该项目采用Spring Cloud微服务解决方案,主要功能模块分为行情采集、策略计算、交易信号处理、账户交易服务、ctp网关、策略统计、消息推送等 该项目使用IntellIJ做为主要开发工具,前端使用vue框架,图表采用tradingview、highchart等。后端使用mybatis、mysql对部分用户、策略、配置信息进行存储,kafka做为行情数据、交易信号等消息中间件。使用redis存储当日分时行情等临时数据,mongodb用于存储分析结果、信号历史,hbase存储期货行情等详细数据。使用netty框架实现实时消息推送。
  2. IWB-EX 交易平台

    该项目主要依托流行的区块链技术进行白酒的销售。以虚拟币为货币,白酒为等价商品进行交易。当虚拟币价格过低时用户可以选择实物白酒进行提货。使用IntellIJ做为开发工具,采用的技术有springMVC、mysql、thymeleaf等。
  3. 废品回收管理平台

    该项目主要为废品回收公司提供废品的进出库管理和统计,并打印详细价格单据等。该项目分为两个平台,给用户使用的入库填表平台和给企业管理人员使用的审核、管理后台。使用IntellIJ做为开发工具,采用的技术有springMVC、mysql、freemarker等。
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file +| ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

# 个人信息

  • 姓名:李海涛
  • 性别:男
  • 学历:本科
  • 生肖:鼠
  • 星座:天秤

# 个人爱好

  • 跑步
  • 篮球
  • 听歌
  • 电影

# 编程语言

  • java
  • python
  • php

# 项目经历 - 近期

  1. 智能量化决策交易系统

    该项目主要用于对期货、股票等进行智能化交易,会根据用户事先设置的规则决策是否买卖,并给出信号、收益、最大回撤等详细的统计报告及分析报表。 该项目采用Spring Cloud微服务解决方案,主要功能模块分为行情采集、策略计算、交易信号处理、账户交易服务、ctp网关、策略统计、消息推送等 该项目使用IntellIJ做为主要开发工具,前端使用vue框架,图表采用tradingview、highchart等。后端使用mybatis、mysql对部分用户、策略、配置信息进行存储,kafka做为行情数据、交易信号等消息中间件。使用redis存储当日分时行情等临时数据,mongodb用于存储分析结果、信号历史,hbase存储期货行情等详细数据。使用netty框架实现实时消息推送。
  2. IWB-EX 交易平台

    该项目主要依托流行的区块链技术进行白酒的销售。以虚拟币为货币,白酒为等价商品进行交易。当虚拟币价格过低时用户可以选择实物白酒进行提货。使用IntellIJ做为开发工具,采用的技术有springMVC、mysql、thymeleaf等。
  3. 废品回收管理平台

    该项目主要为废品回收公司提供废品的进出库管理和统计,并打印详细价格单据等。该项目分为两个平台,给用户使用的入库填表平台和给企业管理人员使用的审核、管理后台。使用IntellIJ做为开发工具,采用的技术有springMVC、mysql、freemarker等。
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Hito Li 微信支付

微信支付

Hito Li 支付宝

支付宝

\ No newline at end of file diff --git a/archives/2022/09/index.html b/archives/2022/09/index.html index cecb6af50..8752b654c 100644 --- a/archives/2022/09/index.html +++ b/archives/2022/09/index.html @@ -1 +1 @@ -2022 年 / 09 月 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +2022 年 / 09 月 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/archives/2022/10/index.html b/archives/2022/10/index.html index 11a932e16..7c5b9b804 100644 --- a/archives/2022/10/index.html +++ b/archives/2022/10/index.html @@ -1 +1 @@ -2022 年 / 10 月 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +2022 年 / 10 月 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/archives/2022/10/page/2/index.html b/archives/2022/10/page/2/index.html index 14712b4b3..b04f849a2 100644 --- a/archives/2022/10/page/2/index.html +++ b/archives/2022/10/page/2/index.html @@ -1 +1 @@ -2022 年 / 10 月 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +2022 年 / 10 月 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html index 655a2b1cb..2ac142591 100644 --- a/archives/2022/11/index.html +++ b/archives/2022/11/index.html @@ -1 +1 @@ -2022 年 / 11 月 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +2022 年 / 11 月 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/archives/2022/index.html b/archives/2022/index.html index 7b658f330..2c637d6b2 100644 --- a/archives/2022/index.html +++ b/archives/2022/index.html @@ -1 +1 @@ -2022 年 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +2022 年 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/archives/2022/page/2/index.html b/archives/2022/page/2/index.html index 38d380f2b..ca4797da4 100644 --- a/archives/2022/page/2/index.html +++ b/archives/2022/page/2/index.html @@ -1 +1 @@ -2022 年 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +2022 年 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/archives/2022/page/3/index.html b/archives/2022/page/3/index.html index a2127a291..1e8d76ca3 100644 --- a/archives/2022/page/3/index.html +++ b/archives/2022/page/3/index.html @@ -1 +1 @@ -2022 年 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +2022 年 - 归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/archives/index.html b/archives/index.html index a849e0837..709c5411f 100644 --- a/archives/index.html +++ b/archives/index.html @@ -1 +1 @@ -归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

首页 / 目前共计 27 篇文章。 嗯.. 继续努力。

2022 年/11 月 ( 5 )

2022 年/10 月 ( 13 )

2022 年/09 月 ( 9 )

\ No newline at end of file +归档 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

首页 / 目前共计 27 篇文章。 嗯.. 继续努力。

2022 年/11 月 ( 5 )

2022 年/10 月 ( 13 )

2022 年/09 月 ( 9 )

\ No newline at end of file diff --git a/atom.xml b/atom.xml index 10132f43a..6de7cb53f 100644 --- a/atom.xml +++ b/atom.xml @@ -48,48 +48,21 @@ __反向代理:__看下面原理图,就一目了然。其实客户端对代 <p>配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):</p> </li> </ul> -<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> # 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> # 虚拟主机,可以配置多个</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> # 路径匹配之后,哪个目录下去匹配相应的网页,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-num="29"></td><td><pre> root html;</pre></td></tr><tr><td data-num="30"></td><td><pre> &#125;</pre></td></tr><tr><td data-num="31"></td><td><pre> &#125;</pre></td></tr><tr><td data-num="32"></td><td><pre>&#125;</pre></td></tr></table></figure><p>去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:</p> +<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> <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> <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> <span class="token comment"># 路径匹配之后,哪个目录下去匹配相应的网页,html 是相对路径</span></pre></td></tr><tr><td data-num="23"></td><td><pre> root html;</pre></td></tr><tr><td data-num="24"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="26"></td><td><pre></pre></td></tr><tr><td data-num="27"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num="28"></td><td><pre> location = /50x.html <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="29"></td><td><pre> root html;</pre></td></tr><tr><td data-num="30"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="31"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="32"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:</p> <ol> <li>全局块</li> </ol> -<pre><code class="language-yaml">worker_processes 1; -</code></pre> -<p>从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。</p> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>worker_processes 1;</pre></td></tr></table></figure><p>从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。</p> <p>上面这行 worker_processes 配置,是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。</p> <ol start="2"> <li>events 块</li> </ol> -<pre><code class="language-yaml">events &#123; - worker_connections 1024; -&#125; -</code></pre> -<p>events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等</p> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>events <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等</p> <p>上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。</p> <ol start="3"> <li>http 块</li> </ol> -<pre><code class="language-yaml">http &#123; - include mime.types; - default_type application/octet-stream; - sendfile on; - keepalive_timeout 65; - - server &#123; - listen 80; - server_name localhost; - - location / &#123; - root html; - index index.html index.htm; - &#125; - - error_page 500 502 503 504 /50x.html; - location = /50x.html &#123; - root html; - &#125; -&#125; -</code></pre> -<p>这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置</p> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>http <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num="3"></td><td><pre> default_type application/octet<span class="token punctuation">-</span>stream;</pre></td></tr><tr><td data-num="4"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num="5"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre> server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="8"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num="9"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num="10"></td><td><pre></pre></td></tr><tr><td data-num="11"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="12"></td><td><pre> root html;</pre></td></tr><tr><td data-num="13"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="15"></td><td><pre></pre></td></tr><tr><td data-num="16"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num="17"></td><td><pre> location = /50x.html <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="18"></td><td><pre> root html;</pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="20"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置</p> <p>__http 全局块:__http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。</p> <p>__server 块:__这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。</p> <p>__location 块:__这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。</p> @@ -98,189 +71,11 @@ __反向代理:__看下面原理图,就一目了然。其实客户端对代 <ol> <li>location 配置规则</li> </ol> -<pre><code class="language-yaml">location [ = | ~ | ~* | ^~ | @ ] /uri &#123; - -&#125; - -=   :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。 -~ :用于表示 uri 包含正则表达式,并且区分大小写。 -~* :用于表示 uri 包含正则表达式,并且不区分大小写。 -^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。 -@ : &quot;@&quot; 定义一个命名的 location,使用在内部定向时,例如 error_page -/uri :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则 -/ :通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default - -☆☆☆☆☆ uri没有“/”结尾时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等。而有“/”结尾时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求 -</code></pre> -<ol start="2"> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>location <span class="token punctuation">[</span> = <span class="token punctuation">|</span> ~ <span class="token punctuation">|</span> ~* <span class="token punctuation">|</span> ^~ <span class="token punctuation">|</span> @ <span class="token punctuation">]</span> /uri <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre>= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。</pre></td></tr><tr><td data-num="6"></td><td><pre>~ :用于表示 uri 包含正则表达式,并且区分大小写。</pre></td></tr><tr><td data-num="7"></td><td><pre>~* :用于表示 uri 包含正则表达式,并且不区分大小写。</pre></td></tr><tr><td data-num="8"></td><td><pre>^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。</pre></td></tr><tr><td data-num="9"></td><td><pre>@ <span class="token punctuation">:</span> "@" 定义一个命名的 location,使用在内部定向时,例如 error_page</pre></td></tr><tr><td data-num="10"></td><td><pre>/uri :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则</pre></td></tr><tr><td data-num="11"></td><td><pre>/ :通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default</pre></td></tr><tr><td data-num="12"></td><td><pre></pre></td></tr><tr><td data-num="13"></td><td><pre>☆☆☆☆☆ uri没有“/”结尾时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等。而有“/”结尾时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求</pre></td></tr></table></figure><ol start="2"> <li>proxy_pass 配置规则</li> </ol> -<pre><code class="language-yaml">url结尾加上了/,相当于是绝对路径,则Nginx不会把location中匹配的路径部分加入代理uri。 -url结尾不加/,Nginx则会把匹配的路径部分加入代理uri。 - -情景1: -proxy_pass后有/ -访问地址:http://localhost:8081/WCP.Service/wcp/modeladapter/download/asc.shtml -最终代理:http://10.194.171.7:13082/modeladapter/download/asc.shtml -location /WCP.Service/wcp/modeladapter/download/ &#123; - proxy_pass http://10.194.171.7:13082/modeladapter/download/; -&#125; -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/model/asc.shtml -location /model/ &#123; - proxy_pass http://127.0.0.1:8082/model/; -&#125; - -情景2: -proxy_pass后有/ -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/asc.shtml -location /model/ &#123; - proxy_pass http://127.0.0.1:8082/; -&#125; - -情景3: -proxy_pass后没有/ -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/model/asc.shtml -location /model/ &#123; - proxy_pass http://127.0.0.1:8082; -&#125; - -情景4 -proxy_pass后没有/ -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/AAAmodel/asc.shtml -location /model/ &#123; - proxy_pass http://127.0.0.1:8082/AAA; -&#125; - -情景5 -proxy_pass后有/ -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/asc.shtml -location /model &#123; - proxy_pass http://127.0.0.1:8082/; -&#125; - -情景6 -proxy_pass后有/ -访问地址:http://localhost:8081/modelBBB/asc.shtml -最终代理:http://127.0.0.1:8082/asc.shtml -location /model &#123; - proxy_pass http://127.0.0.1:8082/; -&#125; -</code></pre> -<h4 id="nginx完整配置文件"><a class="anchor" href="#nginx完整配置文件">#</a> Nginx 完整配置文件</h4> -<pre><code class="language-yaml">#user nobody; -worker_processes 1; - -#error_log logs/error.log; -#error_log logs/error.log notice; -#error_log logs/error.log info; - -#pid logs/nginx.pid; - -events &#123; - worker_connections 1024; -&#125; - -http &#123; - include mime.types; - default_type application/octet-stream; - - #log_format main '$remote_addr - $remote_user [$time_local] &quot;$request&quot; ' - # '$status $body_bytes_sent &quot;$http_referer&quot; ' - # '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;'; - - #access_log logs/access.log main; - - sendfile on; - #tcp_nopush on; - - #keepalive_timeout 0; - keepalive_timeout 65; - - #gzip on; - - server &#123; - listen 80; - server_name localhost; - - #charset koi8-r; - - #access_log logs/host.access.log main; - - location / &#123; - root html; - index index.html index.htm; - &#125; - - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - error_page 500 502 503 504 /50x.html; - location = /50x.html &#123; - root html; - &#125; - - # proxy the PHP scripts to Apache listening on 127.0.0.1:80 - # - #location ~ \.php$ &#123; - # proxy_pass http://127.0.0.1; - #&#125; - - # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 - # - #location ~ \.php$ &#123; - # root html; - # fastcgi_pass 127.0.0.1:9000; - # fastcgi_index index.php; - # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; - # include fastcgi_params; - #&#125; - - # deny access to .htaccess files, if Apache's document root - # concurs with nginx's one - # - #location ~ /\.ht &#123; - # deny all; - #&#125; - &#125; - # another virtual host using mix of IP-, name-, and port-based configuration - # - #server &#123; - # listen 8000; - # listen somename:8080; - # server_name somename alias another.alias; - # location / &#123; - # root html; - # index index.html index.htm; - # &#125; - #&#125; - # HTTPS server - # - #server &#123; - # listen 443 ssl; - # server_name localhost; - # ssl_certificate cert.pem; - # ssl_certificate_key cert.key; - - # ssl_session_cache shared:SSL:1m; - # ssl_session_timeout 5m; - - # ssl_ciphers HIGH:!aNULL:!MD5; - # ssl_prefer_server_ciphers on; - - # location / &#123; - # root html; - # index index.html index.htm; - # &#125; - #&#125; -&#125; -</code></pre> - +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>url结尾加上了/,相当于是绝对路径,则Nginx不会把location中匹配的路径部分加入代理uri。</pre></td></tr><tr><td data-num="2"></td><td><pre>url结尾不加/,Nginx则会把匹配的路径部分加入代理uri。</pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token key atrule">情景1</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="5"></td><td><pre>proxy_pass后有/ </pre></td></tr><tr><td data-num="6"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/WCP.Service/wcp/modeladapter/download/asc.shtml</pre></td></tr><tr><td data-num="7"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//10.194.171.7<span class="token punctuation">:</span>13082/modeladapter/download/asc.shtml</pre></td></tr><tr><td data-num="8"></td><td><pre>location /WCP.Service/wcp/modeladapter/download/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="9"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//10.194.171.7<span class="token punctuation">:</span>13082/modeladapter/download/;</pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="11"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="12"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/model/asc.shtml</pre></td></tr><tr><td data-num="13"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="14"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/model/;</pre></td></tr><tr><td data-num="15"></td><td><pre><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 key atrule">情景2</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="18"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num="19"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="20"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num="21"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="22"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/;</pre></td></tr><tr><td data-num="23"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="24"></td><td><pre></pre></td></tr><tr><td data-num="25"></td><td><pre>情景3:</pre></td></tr><tr><td data-num="26"></td><td><pre>proxy_pass后没有/ </pre></td></tr><tr><td data-num="27"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="28"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/model/asc.shtml</pre></td></tr><tr><td data-num="29"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="30"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082;</pre></td></tr><tr><td data-num="31"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="32"></td><td><pre></pre></td></tr><tr><td data-num="33"></td><td><pre>情景4</pre></td></tr><tr><td data-num="34"></td><td><pre>proxy_pass后没有/ </pre></td></tr><tr><td data-num="35"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="36"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/AAAmodel/asc.shtml</pre></td></tr><tr><td data-num="37"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="38"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/AAA;</pre></td></tr><tr><td data-num="39"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="40"></td><td><pre></pre></td></tr><tr><td data-num="41"></td><td><pre>情景5</pre></td></tr><tr><td data-num="42"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num="43"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="44"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num="45"></td><td><pre>location /model <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="46"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/;</pre></td></tr><tr><td data-num="47"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="48"></td><td><pre></pre></td></tr><tr><td data-num="49"></td><td><pre>情景6</pre></td></tr><tr><td data-num="50"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num="51"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/modelBBB/asc.shtml</pre></td></tr><tr><td data-num="52"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num="53"></td><td><pre>location /model <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="54"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/;</pre></td></tr><tr><td data-num="55"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><h4 id="nginx完整配置文件"><a class="anchor" href="#nginx完整配置文件">#</a> Nginx 完整配置文件</h4> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#user nobody;</span></pre></td></tr><tr><td data-num="2"></td><td><pre>worker_processes 1;</pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment">#error_log logs/error.log;</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token comment">#error_log logs/error.log notice;</span></pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token comment">#error_log logs/error.log info;</span></pre></td></tr><tr><td data-num="7"></td><td><pre></pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token comment">#pid logs/nginx.pid;</span></pre></td></tr><tr><td data-num="9"></td><td><pre></pre></td></tr><tr><td data-num="10"></td><td><pre>events <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="11"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num="12"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="13"></td><td><pre></pre></td></tr><tr><td data-num="14"></td><td><pre>http <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="15"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num="16"></td><td><pre> default_type application/octet<span class="token punctuation">-</span>stream;</pre></td></tr><tr><td data-num="17"></td><td><pre></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token comment">#log_format main '$remote_addr - $remote_user [$time_local] "$request" '</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token comment"># '$status $body_bytes_sent "$http_referer" '</span></pre></td></tr><tr><td data-num="20"></td><td><pre> <span class="token comment"># '"$http_user_agent" "$http_x_forwarded_for"';</span></pre></td></tr><tr><td data-num="21"></td><td><pre></pre></td></tr><tr><td data-num="22"></td><td><pre> <span class="token comment">#access_log logs/access.log main;</span></pre></td></tr><tr><td data-num="23"></td><td><pre></pre></td></tr><tr><td data-num="24"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token comment">#tcp_nopush on;</span></pre></td></tr><tr><td data-num="26"></td><td><pre></pre></td></tr><tr><td data-num="27"></td><td><pre> <span class="token comment">#keepalive_timeout 0;</span></pre></td></tr><tr><td data-num="28"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num="29"></td><td><pre></pre></td></tr><tr><td data-num="30"></td><td><pre> <span class="token comment">#gzip on;</span></pre></td></tr><tr><td data-num="31"></td><td><pre></pre></td></tr><tr><td data-num="32"></td><td><pre> server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="33"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num="34"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num="35"></td><td><pre></pre></td></tr><tr><td data-num="36"></td><td><pre> <span class="token comment">#charset koi8-r;</span></pre></td></tr><tr><td data-num="37"></td><td><pre></pre></td></tr><tr><td data-num="38"></td><td><pre> <span class="token comment">#access_log logs/host.access.log main;</span></pre></td></tr><tr><td data-num="39"></td><td><pre></pre></td></tr><tr><td data-num="40"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="41"></td><td><pre> root html;</pre></td></tr><tr><td data-num="42"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num="43"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="44"></td><td><pre></pre></td></tr><tr><td data-num="45"></td><td><pre> <span class="token comment">#error_page 404 /404.html;</span></pre></td></tr><tr><td data-num="46"></td><td><pre></pre></td></tr><tr><td data-num="47"></td><td><pre> <span class="token comment"># redirect server error pages to the static page /50x.html</span></pre></td></tr><tr><td data-num="48"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="49"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num="50"></td><td><pre> location = /50x.html <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="51"></td><td><pre> root html;</pre></td></tr><tr><td data-num="52"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="53"></td><td><pre></pre></td></tr><tr><td data-num="54"></td><td><pre> <span class="token comment"># proxy the PHP scripts to Apache listening on 127.0.0.1:80</span></pre></td></tr><tr><td data-num="55"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="56"></td><td><pre> <span class="token comment">#location ~ \.php$ &#123;</span></pre></td></tr><tr><td data-num="57"></td><td><pre> <span class="token comment"># proxy_pass http://127.0.0.1;</span></pre></td></tr><tr><td data-num="58"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="59"></td><td><pre></pre></td></tr><tr><td data-num="60"></td><td><pre> <span class="token comment"># pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000</span></pre></td></tr><tr><td data-num="61"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="62"></td><td><pre> <span class="token comment">#location ~ \.php$ &#123;</span></pre></td></tr><tr><td data-num="63"></td><td><pre> <span class="token comment"># root html;</span></pre></td></tr><tr><td data-num="64"></td><td><pre> <span class="token comment"># fastcgi_pass 127.0.0.1:9000;</span></pre></td></tr><tr><td data-num="65"></td><td><pre> <span class="token comment"># fastcgi_index index.php;</span></pre></td></tr><tr><td data-num="66"></td><td><pre> <span class="token comment"># fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;</span></pre></td></tr><tr><td data-num="67"></td><td><pre> <span class="token comment"># include fastcgi_params;</span></pre></td></tr><tr><td data-num="68"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="69"></td><td><pre></pre></td></tr><tr><td data-num="70"></td><td><pre> <span class="token comment"># deny access to .htaccess files, if Apache's document root</span></pre></td></tr><tr><td data-num="71"></td><td><pre> <span class="token comment"># concurs with nginx's one</span></pre></td></tr><tr><td data-num="72"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="73"></td><td><pre> <span class="token comment">#location ~ /\.ht &#123;</span></pre></td></tr><tr><td data-num="74"></td><td><pre> <span class="token comment"># deny all;</span></pre></td></tr><tr><td data-num="75"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="76"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="77"></td><td><pre> <span class="token comment"># another virtual host using mix of IP-, name-, and port-based configuration</span></pre></td></tr><tr><td data-num="78"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="79"></td><td><pre> <span class="token comment">#server &#123;</span></pre></td></tr><tr><td data-num="80"></td><td><pre> <span class="token comment"># listen 8000;</span></pre></td></tr><tr><td data-num="81"></td><td><pre> <span class="token comment"># listen somename:8080;</span></pre></td></tr><tr><td data-num="82"></td><td><pre> <span class="token comment"># server_name somename alias another.alias;</span></pre></td></tr><tr><td data-num="83"></td><td><pre> <span class="token comment"># location / &#123;</span></pre></td></tr><tr><td data-num="84"></td><td><pre> <span class="token comment"># root html;</span></pre></td></tr><tr><td data-num="85"></td><td><pre> <span class="token comment"># index index.html index.htm;</span></pre></td></tr><tr><td data-num="86"></td><td><pre> <span class="token comment"># &#125;</span></pre></td></tr><tr><td data-num="87"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="88"></td><td><pre> <span class="token comment"># HTTPS server</span></pre></td></tr><tr><td data-num="89"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="90"></td><td><pre> <span class="token comment">#server &#123;</span></pre></td></tr><tr><td data-num="91"></td><td><pre> <span class="token comment"># listen 443 ssl;</span></pre></td></tr><tr><td data-num="92"></td><td><pre> <span class="token comment"># server_name localhost;</span></pre></td></tr><tr><td data-num="93"></td><td><pre> <span class="token comment"># ssl_certificate cert.pem;</span></pre></td></tr><tr><td data-num="94"></td><td><pre> <span class="token comment"># ssl_certificate_key cert.key;</span></pre></td></tr><tr><td data-num="95"></td><td><pre></pre></td></tr><tr><td data-num="96"></td><td><pre> <span class="token comment"># ssl_session_cache shared:SSL:1m;</span></pre></td></tr><tr><td data-num="97"></td><td><pre> <span class="token comment"># ssl_session_timeout 5m;</span></pre></td></tr><tr><td data-num="98"></td><td><pre></pre></td></tr><tr><td data-num="99"></td><td><pre> <span class="token comment"># ssl_ciphers HIGH:!aNULL:!MD5;</span></pre></td></tr><tr><td data-num="100"></td><td><pre> <span class="token comment"># ssl_prefer_server_ciphers on;</span></pre></td></tr><tr><td data-num="101"></td><td><pre></pre></td></tr><tr><td data-num="102"></td><td><pre> <span class="token comment"># location / &#123;</span></pre></td></tr><tr><td data-num="103"></td><td><pre> <span class="token comment"># root html;</span></pre></td></tr><tr><td data-num="104"></td><td><pre> <span class="token comment"># index index.html index.htm;</span></pre></td></tr><tr><td data-num="105"></td><td><pre> <span class="token comment"># &#125;</span></pre></td></tr><tr><td data-num="106"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="107"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure> @@ -300,95 +95,29 @@ http &#123; <ul> <li>卸载旧的 nodejs(此命令会卸载掉相关依赖包)</li> </ul> -<pre><code class="language-bash">sudo apt autoremove --purge nodejs -</code></pre> -<ul> +<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> <li>安装 NodeJS</li> </ul> -<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 -</code></pre> -<ul> +<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> <li>安装 yarn</li> </ul> -<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 - -echo &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 - -sudo apt-get update &amp;&amp; sudo apt-get install yarn -</code></pre> -<ul> +<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> <li>初始化 (到项目根目录执行)</li> </ul> -<pre><code class="language-bash">yarn install -</code></pre> -<ul> +<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> <li>编译(到项目根目录执行,完成后会生成 dist 目录)</li> </ul> -<pre><code class="language-bash">yarn build -</code></pre> -<ul> +<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> <li>安装 nginx</li> </ul> -<pre><code class="language-bash">apt install nginx -</code></pre> -<ul> +<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> <li>配置 nginx (编译 /etc/nginx/sites-available/default)</li> </ul> -<pre><code class="language-yaml">server &#123; - listen 80 default_server; - listen [::]:80 default_server; - - # SSL configuration - # - # listen 443 ssl default_server; - # listen [::]:443 ssl default_server; - # - # Note: You should disable gzip for SSL traffic. - # See: https://bugs.debian.org/773332 - # - # Read up on ssl_ciphers to ensure a secure configuration. - # See: https://bugs.debian.org/765782 - # - # Self signed certs generated by the ssl-cert package - # Don't use them in a production server! - # - # include snippets/snakeoil.conf; - - root /var/www/html; - - # Add index.php to the list if you are using PHP - index index.html index.htm index.nginx-debian.html; - - server_name _; - - location /api &#123; - proxy_pass http://localhost:8080; - &#125; - - location / &#123; - # First attempt to serve request as file, then - # as directory, then fall back to displaying a 404. - #try_files $uri $uri/ =404; - alias /opt/codes/dayu-tools-arbitrage-web/dist/; - try_files $uri $uri/ @router; - index index.html index.htm; - &#125; - - location @router &#123; - rewrite ^.*$ /index.html last; -        &#125; -} - -</code></pre> -<h4 id="其它"><a class="anchor" href="#其它">#</a> 其它</h4> +<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;</span></pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token comment"># listen [::]:443 ssl default_server;</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token comment"># Note: You should disable gzip for SSL traffic.</span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token comment"># See: https://bugs.debian.org/773332</span></pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token comment"># Read up on ssl_ciphers to ensure a secure configuration.</span></pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token comment"># See: https://bugs.debian.org/765782</span></pre></td></tr><tr><td data-num="15"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token comment"># Self signed certs generated by the ssl-cert package</span></pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token comment"># Don't use them in a production server!</span></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token comment"># include snippets/snakeoil.conf;</span></pre></td></tr><tr><td data-num="20"></td><td><pre></pre></td></tr><tr><td data-num="21"></td><td><pre> root /var/www/html;</pre></td></tr><tr><td data-num="22"></td><td><pre></pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token comment"># Add index.php to the list if you are using PHP</span></pre></td></tr><tr><td data-num="24"></td><td><pre> index index.html index.htm index.nginx<span class="token punctuation">-</span>debian.html;</pre></td></tr><tr><td data-num="25"></td><td><pre></pre></td></tr><tr><td data-num="26"></td><td><pre> server_name _;</pre></td></tr><tr><td data-num="27"></td><td><pre></pre></td></tr><tr><td data-num="28"></td><td><pre> location /api <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="29"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="30"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="31"></td><td><pre></pre></td></tr><tr><td data-num="32"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="33"></td><td><pre> <span class="token comment"># First attempt to serve request as file, then</span></pre></td></tr><tr><td data-num="34"></td><td><pre> <span class="token comment"># as directory, then fall back to displaying a 404.</span></pre></td></tr><tr><td data-num="35"></td><td><pre> <span class="token comment">#try_files $uri $uri/ =404;</span></pre></td></tr><tr><td data-num="36"></td><td><pre> alias /opt/codes/dayu<span class="token punctuation">-</span>tools<span class="token punctuation">-</span>arbitrage<span class="token punctuation">-</span>web/dist/;</pre></td></tr><tr><td data-num="37"></td><td><pre> try_files $uri $uri/ @router;</pre></td></tr><tr><td data-num="38"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num="39"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="40"></td><td><pre></pre></td></tr><tr><td data-num="41"></td><td><pre> location @router <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="42"></td><td><pre> rewrite ^.<span class="token important">*$</span> /index.html last;</pre></td></tr><tr><td data-num="43"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="44"></td><td><pre>}</pre></td></tr></table></figure><h4 id="其它"><a class="anchor" href="#其它">#</a> 其它</h4> <ul> <li>重新编译前需要先删除 dist 目录</li> </ul> -<pre><code class="language-bash">rm dist -fr - -yarn build -</code></pre> - +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">rm</span> dist <span class="token parameter variable">-fr</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">yarn</span> build</pre></td></tr></table></figure> @@ -414,15 +143,9 @@ yarn build 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别 <h4 id="区别"><a class="anchor" href="#区别">#</a> 区别:</h4> -<pre><code class="language-bash">2&gt;/dev/null -</code></pre> -<p>意思就是把错误输出到 “黑洞”</p> -<pre><code class="language-bash">&gt;/dev/null 2&gt;&amp;1 -</code></pre> -<p>默认情况是 1,也就是等同于 1&gt;/dev/null 2&gt;&amp;1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞”</p> -<pre><code class="language-bash">2&gt;&amp;1 &gt;/dev/null -</code></pre> -<p>意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕</p> +<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> +<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> +<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> <h4 id="解释"><a class="anchor" href="#解释">#</a> 解释:</h4> <ol> <li> @@ -457,20 +180,13 @@ yarn build <p>可以将 stderr 单独定向到一个文件,stdout 重定向到另一个文件</p> </li> </ul> -<pre><code class="language-bash">ls b.txt 2&gt; stderr.txt 1&gt;stdout.txt -</code></pre> -<ul> +<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> <li>也可以将 stderr 和 stdout 重定向到同一个文件</li> </ul> -<pre><code class="language-bash">ls b.txt &gt; output.txt 2&gt;&amp;1 -</code></pre> -<ul> +<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> <li>或采用下面的方法,可以少写几个字,能达到同样的效果</li> </ul> -<pre><code class="language-bash">ls b.txt &amp;&gt; output.txt -ls b.txt &gt;&amp; output.txt #两个表达式效果一样的 -</code></pre> -<ol start="3"> +<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 comment">#两个表达式效果一样的</span></pre></td></tr></table></figure><ol start="3"> <li>Linux 特殊文件<br /> /dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null 这个设备通常也被称为位桶(bit bucket)或黑洞。<br /> 所以,2&gt;/dev/null 的意思就是将标准错误 stderr 删掉。</li> @@ -534,81 +250,10 @@ ls b.txt &gt;&amp; output.txt #两个表达式效果一样的 <li>证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度)</li> <li>http 跳转 https 配置</li> </ol> -<pre><code class="language-yaml">server &#123; - if ($scheme = http) &#123; - rewrite ^(.*)$ https://$host$1 permanent; - &#125; -&#125; -</code></pre> -<ol start="4"> +<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> if ($scheme = http) <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="3"></td><td><pre> rewrite ^(.<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> <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"> <li>web 端口监听配置</li> </ol> -<pre><code class="language-yaml">#极空间-web -server &#123; - listen 10000 ssl http2; #ipv4 - listen [::]:10000 ssl http2; #ipv6 - server_name xxx.xxx.com; #填写自己的域名,主域名或者子域名 - - #include /etc/nginx/conf.d/ssl/ssl_common.conf; - ssl_certificate_key /etc/nginx/conf.d/ssl/xxx.key; #加密证书 - ssl_certificate /etc/nginx/conf.d/ssl/xxx.pem; #加密证书 - ssl_session_timeout 1d; - ssl_session_cache shared:MozSSL:10m; - ssl_session_tickets off; - ssl_protocols TLSv1.2 TLSv1.3; - ssl_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; - ssl_prefer_server_ciphers on; - - #开启OCSP stapling - ssl_stapling on; - ssl_stapling_verify on; - - client_max_body_size 128M; - - add_header Strict-Transport-Security &quot;max-age=31536000; includeSubdomains; preload&quot;; - - proxy_send_timeout 180s; #设置发送超时时间 - proxy_read_timeout 180s; #设置读取超时时间 - - # Prevent Information leaks - proxy_hide_header X-Powered-By; - proxy_hide_header Server; - proxy_hide_header X-AspNetMvc-Version; - proxy_hide_header X-AspNet-Version; - - # http security headers - add_header X-Content-Type-Options nosniff; - add_header Pragma no-cache; - add_header Cache-Control no-store; - add_header X-XSS-Protection &quot;1; mode=block&quot;; - add_header Referrer-Policy origin-when-cross-origin; - add_header X-Permitted-Cross-Domain-Policies none; - add_header X-Frame-Options SAMEORIGIN; #允许同域嵌套 - - # Add Security cookie flags - proxy_cookie_path ~(.*) &quot;$1; SameSite=strict; secure; httponly&quot;; - - # Path to the root of your installation - location / &#123; - proxy_intercept_errors on; - proxy_max_temp_file_size 0; - 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; - - proxy_pass http://极空间内网ip:5055; #这里设置你自己要跳转的局域网应用; - proxy_redirect http://域名:5055/home https://域名:10000/home; #极空间在登陆后会跳转到http协议的5055端口,所以要在此替换为https协议的10000端口 - &#125; - - error_page 500 502 503 504 /500.html; - error_page 400 404 /500.html; - location = /500.html &#123; - root /usr/share/nginx/html/; #错误html - &#125; -&#125; -</code></pre> -<h4 id="问题"><a class="anchor" href="#问题">#</a> 问题</h4> +<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> listen 10000 ssl http2; <span class="token comment">#ipv4</span></pre></td></tr><tr><td data-num="4"></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>10000 ssl http2; <span class="token comment">#ipv6</span></pre></td></tr><tr><td data-num="5"></td><td><pre> server_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> <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> ssl_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> ssl_certificate /etc/nginx/conf.d/ssl/xxx.pem; <span class="token comment">#加密证书</span></pre></td></tr><tr><td data-num="10"></td><td><pre> ssl_session_timeout 1d;</pre></td></tr><tr><td data-num="11"></td><td><pre> ssl_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> ssl_session_tickets off;</pre></td></tr><tr><td data-num="13"></td><td><pre> ssl_protocols TLSv1.2 TLSv1.3;</pre></td></tr><tr><td data-num="14"></td><td><pre> ssl_ciphers ECDHE<span class="token punctuation">-</span>ECDSA<span class="token punctuation">-</span>AES128<span class="token punctuation">-</span>GCM<span class="token punctuation">-</span>SHA256<span class="token punctuation">:</span>ECDHE<span class="token punctuation">-</span>RSA<span class="token punctuation">-</span>AES128<span class="token punctuation">-</span>GCM<span class="token punctuation">-</span>SHA256<span class="token punctuation">:</span>ECDHE<span class="token punctuation">-</span>ECDSA<span class="token punctuation">-</span>AES256<span class="token punctuation">-</span>GCM<span class="token punctuation">-</span>SHA384<span class="token punctuation">:</span>ECDHE<span class="token punctuation">-</span>RSA<span class="token punctuation">-</span>AES256<span class="token punctuation">-</span>GCM<span class="token punctuation">-</span>SHA384<span class="token punctuation">:</span>ECDHE<span class="token punctuation">-</span>ECDSA<span class="token punctuation">-</span>CHACHA20<span class="token punctuation">-</span>POLY1305<span class="token punctuation">:</span>ECDHE<span class="token punctuation">-</span>RSA<span class="token punctuation">-</span>CHACHA20<span class="token punctuation">-</span>POLY1305<span class="token punctuation">:</span>DHE<span class="token punctuation">-</span>RSA<span class="token punctuation">-</span>AES128<span class="token punctuation">-</span>GCM<span class="token punctuation">-</span>SHA256<span class="token punctuation">:</span>DHE<span class="token punctuation">-</span>RSA<span class="token punctuation">-</span>AES256<span class="token punctuation">-</span>GCM<span class="token punctuation">-</span>SHA384;</pre></td></tr><tr><td data-num="15"></td><td><pre> ssl_prefer_server_ciphers on;</pre></td></tr><tr><td data-num="16"></td><td><pre></pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token comment">#开启 OCSP stapling</span></pre></td></tr><tr><td data-num="18"></td><td><pre> ssl_stapling on;</pre></td></tr><tr><td data-num="19"></td><td><pre> ssl_stapling_verify on;</pre></td></tr><tr><td data-num="20"></td><td><pre></pre></td></tr><tr><td data-num="21"></td><td><pre> client_max_body_size 128M;</pre></td></tr><tr><td data-num="22"></td><td><pre></pre></td></tr><tr><td data-num="23"></td><td><pre> add_header Strict<span class="token punctuation">-</span>Transport<span class="token punctuation">-</span>Security "max<span class="token punctuation">-</span>age=31536000; includeSubdomains; preload";</pre></td></tr><tr><td data-num="24"></td><td><pre></pre></td></tr><tr><td data-num="25"></td><td><pre> proxy_send_timeout 180s; <span class="token comment">#设置发送超时时间</span></pre></td></tr><tr><td data-num="26"></td><td><pre> proxy_read_timeout 180s; <span class="token comment">#设置读取超时时间</span></pre></td></tr><tr><td data-num="27"></td><td><pre></pre></td></tr><tr><td data-num="28"></td><td><pre> <span class="token comment"># Prevent Information leaks</span></pre></td></tr><tr><td data-num="29"></td><td><pre> proxy_hide_header X<span class="token punctuation">-</span>Powered<span class="token punctuation">-</span>By;</pre></td></tr><tr><td data-num="30"></td><td><pre> proxy_hide_header Server;</pre></td></tr><tr><td data-num="31"></td><td><pre> proxy_hide_header X<span class="token punctuation">-</span>AspNetMvc<span class="token punctuation">-</span>Version;</pre></td></tr><tr><td data-num="32"></td><td><pre> proxy_hide_header X<span class="token punctuation">-</span>AspNet<span class="token punctuation">-</span>Version;</pre></td></tr><tr><td data-num="33"></td><td><pre></pre></td></tr><tr><td data-num="34"></td><td><pre> <span class="token comment"># http security headers</span></pre></td></tr><tr><td data-num="35"></td><td><pre> add_header X<span class="token punctuation">-</span>Content<span class="token punctuation">-</span>Type<span class="token punctuation">-</span>Options nosniff;</pre></td></tr><tr><td data-num="36"></td><td><pre> add_header Pragma no<span class="token punctuation">-</span>cache;</pre></td></tr><tr><td data-num="37"></td><td><pre> add_header Cache<span class="token punctuation">-</span>Control no<span class="token punctuation">-</span>store;</pre></td></tr><tr><td data-num="38"></td><td><pre> add_header X<span class="token punctuation">-</span>XSS<span class="token punctuation">-</span>Protection "1; mode=block";</pre></td></tr><tr><td data-num="39"></td><td><pre> add_header Referrer<span class="token punctuation">-</span>Policy origin<span class="token punctuation">-</span>when<span class="token punctuation">-</span>cross<span class="token punctuation">-</span>origin;</pre></td></tr><tr><td data-num="40"></td><td><pre> add_header X<span class="token punctuation">-</span>Permitted<span class="token punctuation">-</span>Cross<span class="token punctuation">-</span>Domain<span class="token punctuation">-</span>Policies none;</pre></td></tr><tr><td data-num="41"></td><td><pre> add_header X<span class="token punctuation">-</span>Frame<span class="token punctuation">-</span>Options SAMEORIGIN; <span class="token comment">#允许同域嵌套</span></pre></td></tr><tr><td data-num="42"></td><td><pre></pre></td></tr><tr><td data-num="43"></td><td><pre> <span class="token comment"># Add Security cookie flags</span></pre></td></tr><tr><td data-num="44"></td><td><pre> proxy_cookie_path ~(.<span class="token important">*)</span> "$1; SameSite=strict; secure; httponly";</pre></td></tr><tr><td data-num="45"></td><td><pre></pre></td></tr><tr><td data-num="46"></td><td><pre> <span class="token comment"># Path to the root of your installation</span></pre></td></tr><tr><td data-num="47"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="48"></td><td><pre> proxy_intercept_errors on;</pre></td></tr><tr><td data-num="49"></td><td><pre> proxy_max_temp_file_size 0;</pre></td></tr><tr><td data-num="50"></td><td><pre> proxy_set_header Host $host;</pre></td></tr><tr><td data-num="51"></td><td><pre> proxy_set_header X<span class="token punctuation">-</span>Real<span class="token punctuation">-</span>IP $remote_addr;</pre></td></tr><tr><td data-num="52"></td><td><pre> proxy_set_header X<span class="token punctuation">-</span>Forwarded<span class="token punctuation">-</span>For $proxy_add_x_forwarded_for;</pre></td></tr><tr><td data-num="53"></td><td><pre> proxy_set_header X<span class="token punctuation">-</span>Forwarded<span class="token punctuation">-</span>Proto $scheme;</pre></td></tr><tr><td data-num="54"></td><td><pre> </pre></td></tr><tr><td data-num="55"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//极空间内网ip<span class="token punctuation">:</span>5055; <span class="token comment">#这里设置你自己要跳转的局域网应用;</span></pre></td></tr><tr><td data-num="56"></td><td><pre> proxy_redirect http<span class="token punctuation">:</span>//域名<span class="token punctuation">:</span>5055/home https<span class="token punctuation">:</span>//域名<span class="token punctuation">:</span>10000/home; <span class="token comment">#极空间在登陆后会跳转到 http 协议的 5055 端口,所以要在此替换为 https 协议的 10000 端口</span></pre></td></tr><tr><td data-num="57"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="58"></td><td><pre></pre></td></tr><tr><td data-num="59"></td><td><pre> error_page 500 502 503 504 /500.html;</pre></td></tr><tr><td data-num="60"></td><td><pre> error_page 400 404 /500.html;</pre></td></tr><tr><td data-num="61"></td><td><pre> location = /500.html <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="62"></td><td><pre> root /usr/share/nginx/html/; <span class="token comment">#错误 html</span></pre></td></tr><tr><td data-num="63"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="64"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><h4 id="问题"><a class="anchor" href="#问题">#</a> 问题</h4> <ul> <li>需要开启允许嵌套否则登陆后所有应用都是拒绝访问</li> <li>需要配置 proxy_redirect 替换响应 url,否则会跳转到默认 http 协议的 5055 端口</li> @@ -636,14 +281,7 @@ server &#123; <li>路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。)<br /> <img data-src="https://file.jingxiyuan.cn/images/2022/10/24/2022-10-24-19-29-06.jpg" alt="" /></li> </ul> -<pre><code class="language-yaml">#青龙面板装载路径 -/ql/data -#博客装载路径(如果你不部署hexo博客可以不用配置) -/root/.ssh  #ssh证书文件(如果你不用把hexo推送到git上可以不用配置) -/blog     #hexo博客编译目录 -/blog/nginx_blog #nginx上放置博客的目录(例如:/Docker/nginx/html/blog) -</code></pre> -<ul> +<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> <li>端口<br /> <img data-src="https://file.jingxiyuan.cn/images/2022/10/22/2022-10-22-11-02-195ea093b249c53244.jpg" alt="" /><br /> <code>4000端口是hexo-admin使用的,如果你不用可以不配置</code></li> @@ -663,108 +301,14 @@ server &#123; <code>0 */3 * * *</code></li> <li>环境变量</li> </ul> -<pre><code class="language-yaml">名称:JD_COOKIE -值:web京东登陆后按F12在网络tab页中的请求内查找cookie,然后复制pt_key=到pt_pin=等 -</code></pre> -<ul> +<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> <li>配置文件 (主要修改和添加以下配置)</li> </ul> -<pre><code class="language-yaml">repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可 -RepoFileExtensions=&quot;js py ts&quot; -钉钉(消息推送) -export DD_BOT_TOKEN= -export DD_BOT_SECRET= -##开卡 -export guaopencard_All=&quot;true&quot; -export guaopencard_addSku_All=&quot;true&quot; -export guaopencardRun_All=&quot;true&quot; -export guaopencard_draw=&quot;true&quot; -export JD_TRY=&quot;true&quot; -export exjxbeans=&quot;true&quot; -export DY_OPENALL=&quot;true&quot; -#抽奖 -export opencard_draw=3 -#开启脚本依赖文件缺失修复 -export ec_fix_dep=&quot;true&quot; -#开启脚本依赖文件更新 -export ec_re_dep=&quot;true&quot; -#清空购物车 -export JD_CART_REMOVE=&quot;true&quot; -export JD_CART=&quot;true&quot; -#去掉多余的双十一红包脚本 -export FLCODE='' -#加购物车抽奖 -export RUN_CAR=true -#停用小额免密支付 -export JD_PAY_CONTRACT=true -</code></pre> -<ul> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可</pre></td></tr><tr><td data-num="2"></td><td><pre>RepoFileExtensions="js py ts"</pre></td></tr><tr><td data-num="3"></td><td><pre>钉钉(消息推送)</pre></td></tr><tr><td data-num="4"></td><td><pre>export DD_BOT_TOKEN=</pre></td></tr><tr><td data-num="5"></td><td><pre>export DD_BOT_SECRET=</pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token comment">## 开卡</span></pre></td></tr><tr><td data-num="7"></td><td><pre>export guaopencard_All="true"</pre></td></tr><tr><td data-num="8"></td><td><pre>export guaopencard_addSku_All="true"</pre></td></tr><tr><td data-num="9"></td><td><pre>export guaopencardRun_All="true"</pre></td></tr><tr><td data-num="10"></td><td><pre>export guaopencard_draw="true"</pre></td></tr><tr><td data-num="11"></td><td><pre>export JD_TRY="true"</pre></td></tr><tr><td data-num="12"></td><td><pre>export exjxbeans="true"</pre></td></tr><tr><td data-num="13"></td><td><pre>export DY_OPENALL="true"</pre></td></tr><tr><td data-num="14"></td><td><pre><span class="token comment">#抽奖</span></pre></td></tr><tr><td data-num="15"></td><td><pre>export opencard_draw=3</pre></td></tr><tr><td data-num="16"></td><td><pre><span class="token comment">#开启脚本依赖文件缺失修复</span></pre></td></tr><tr><td data-num="17"></td><td><pre>export ec_fix_dep="true" </pre></td></tr><tr><td data-num="18"></td><td><pre><span class="token comment">#开启脚本依赖文件更新</span></pre></td></tr><tr><td data-num="19"></td><td><pre>export ec_re_dep="true" </pre></td></tr><tr><td data-num="20"></td><td><pre><span class="token comment">#清空购物车</span></pre></td></tr><tr><td data-num="21"></td><td><pre>export JD_CART_REMOVE="true"</pre></td></tr><tr><td data-num="22"></td><td><pre>export JD_CART="true"</pre></td></tr><tr><td data-num="23"></td><td><pre><span class="token comment">#去掉多余的双十一红包脚本</span></pre></td></tr><tr><td data-num="24"></td><td><pre>export FLCODE=''</pre></td></tr><tr><td data-num="25"></td><td><pre><span class="token comment">#加购物车抽奖</span></pre></td></tr><tr><td data-num="26"></td><td><pre>export RUN_CAR=true</pre></td></tr><tr><td data-num="27"></td><td><pre><span class="token comment">#停用小额免密支付</span></pre></td></tr><tr><td data-num="28"></td><td><pre>export JD_PAY_CONTRACT=true</pre></td></tr></table></figure><ul> <li>依赖管理</li> </ul> -<pre><code class="language-yaml">#nodejs依赖 -crypto-js -prettytable -dotenv -jsdom -date-fns -tough-cookie -tslib -ws@7.4.3 -ts-md5 -jsdom -g -jieba -fs -form-data -json5 -global-agent -png-js -@types/node -require -typescript -js-base64 -axios -#pythone依赖 -requests -canvas -ping3 -jieba -aiohttp -PyExecJS -#Linux依赖 -bizCode -bizMsg -lxml -</code></pre> -<h4 id="其它"><a class="anchor" href="#其它">#</a> 其它</h4> -<pre><code class="language-bash">#配置国内源 -pip config --global set global.index-url https://mirrors.aliyun.com/pypi/simple/ -pip config --global set install.trusted-host https://mirrors.aliyun.com - -#升级pip -pip install --upgrade pip - -#更新青龙 -ql update - -#已知要安装的依赖(不安装部分脚本任务会失败) -pnpm install ds - -#一键安装所有依赖(基于Faker一键脚本安装的青龙 -可通过执行/ql/data/scripts下的QLDependency.sh脚本安装,如脚本已经更新则通过下面命令执行 -curl -fsSL https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh | sh - -#一般出现这种错误:(缺依赖) -Error: Cannot find module 'xx' -执行pnpm install xxx - -#一般出现这种错误:(缺文件) -Error: Cannot find module './xx' -那就是拉库命令不完整,请检查或复制完整的拉库命 - -#Python3依赖安装失败修复(基于Faker一键脚本安装的青龙) -curl -sS https://bootstrap.pypa.io/get-pip.py | python3 -</code></pre> - +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#nodejs 依赖</span></pre></td></tr><tr><td data-num="2"></td><td><pre>crypto<span class="token punctuation">-</span>js </pre></td></tr><tr><td data-num="3"></td><td><pre>prettytable </pre></td></tr><tr><td data-num="4"></td><td><pre>dotenv </pre></td></tr><tr><td data-num="5"></td><td><pre>jsdom </pre></td></tr><tr><td data-num="6"></td><td><pre>date<span class="token punctuation">-</span>fns </pre></td></tr><tr><td data-num="7"></td><td><pre>tough<span class="token punctuation">-</span>cookie </pre></td></tr><tr><td data-num="8"></td><td><pre>tslib </pre></td></tr><tr><td data-num="9"></td><td><pre>ws@7.4.3 </pre></td></tr><tr><td data-num="10"></td><td><pre>ts<span class="token punctuation">-</span>md5 </pre></td></tr><tr><td data-num="11"></td><td><pre>jsdom <span class="token punctuation">-</span>g </pre></td></tr><tr><td data-num="12"></td><td><pre>jieba </pre></td></tr><tr><td data-num="13"></td><td><pre>fs </pre></td></tr><tr><td data-num="14"></td><td><pre>form<span class="token punctuation">-</span>data </pre></td></tr><tr><td data-num="15"></td><td><pre>json5 </pre></td></tr><tr><td data-num="16"></td><td><pre>global<span class="token punctuation">-</span>agent </pre></td></tr><tr><td data-num="17"></td><td><pre>png<span class="token punctuation">-</span>js </pre></td></tr><tr><td data-num="18"></td><td><pre>@types/node </pre></td></tr><tr><td data-num="19"></td><td><pre>require </pre></td></tr><tr><td data-num="20"></td><td><pre>typescript </pre></td></tr><tr><td data-num="21"></td><td><pre>js<span class="token punctuation">-</span>base64 </pre></td></tr><tr><td data-num="22"></td><td><pre>axios</pre></td></tr><tr><td data-num="23"></td><td><pre><span class="token comment">#pythone 依赖</span></pre></td></tr><tr><td data-num="24"></td><td><pre>requests </pre></td></tr><tr><td data-num="25"></td><td><pre>canvas </pre></td></tr><tr><td data-num="26"></td><td><pre>ping3 </pre></td></tr><tr><td data-num="27"></td><td><pre>jieba </pre></td></tr><tr><td data-num="28"></td><td><pre>aiohttp </pre></td></tr><tr><td data-num="29"></td><td><pre>PyExecJS</pre></td></tr><tr><td data-num="30"></td><td><pre><span class="token comment">#Linux 依赖</span></pre></td></tr><tr><td data-num="31"></td><td><pre>bizCode</pre></td></tr><tr><td data-num="32"></td><td><pre>bizMsg</pre></td></tr><tr><td data-num="33"></td><td><pre>lxml</pre></td></tr></table></figure><h4 id="其它"><a class="anchor" href="#其它">#</a> 其它</h4> +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#配置国内源</span></pre></td></tr><tr><td data-num="2"></td><td><pre>pip config <span class="token parameter variable">--global</span> <span class="token builtin class-name">set</span> global.index-url https://mirrors.aliyun.com/pypi/simple/</pre></td></tr><tr><td data-num="3"></td><td><pre>pip config <span class="token parameter variable">--global</span> <span class="token builtin class-name">set</span> install.trusted-host https://mirrors.aliyun.com</pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token comment">#升级 pip</span></pre></td></tr><tr><td data-num="6"></td><td><pre>pip <span class="token function">install</span> <span class="token parameter variable">--upgrade</span> pip</pre></td></tr><tr><td data-num="7"></td><td><pre></pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token comment">#更新青龙</span></pre></td></tr><tr><td data-num="9"></td><td><pre>ql update</pre></td></tr><tr><td data-num="10"></td><td><pre></pre></td></tr><tr><td data-num="11"></td><td><pre><span class="token comment">#已知要安装的依赖(不安装部分脚本任务会失败)</span></pre></td></tr><tr><td data-num="12"></td><td><pre><span class="token function">pnpm</span> <span class="token function">install</span> ds</pre></td></tr><tr><td data-num="13"></td><td><pre></pre></td></tr><tr><td data-num="14"></td><td><pre><span class="token comment">#一键安装所有依赖(基于 Faker 一键脚本安装的青龙</span></pre></td></tr><tr><td data-num="15"></td><td><pre>可通过执行/ql/data/scripts下的QLDependency.sh脚本安装,如脚本已经更新则通过下面命令执行</pre></td></tr><tr><td data-num="16"></td><td><pre><span class="token function">curl</span> <span class="token parameter variable">-fsSL</span> https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh <span class="token operator">|</span> <span class="token function">sh</span></pre></td></tr><tr><td data-num="17"></td><td><pre></pre></td></tr><tr><td data-num="18"></td><td><pre><span class="token comment">#一般出现这种错误:(缺依赖)</span></pre></td></tr><tr><td data-num="19"></td><td><pre>Error: Cannot <span class="token function">find</span> module <span class="token string">'xx'</span></pre></td></tr><tr><td data-num="20"></td><td><pre>执行pnpm <span class="token function">install</span> xxx</pre></td></tr><tr><td data-num="21"></td><td><pre></pre></td></tr><tr><td data-num="22"></td><td><pre><span class="token comment">#一般出现这种错误:(缺文件)</span></pre></td></tr><tr><td data-num="23"></td><td><pre>Error: Cannot <span class="token function">find</span> module <span class="token string">'./xx'</span></pre></td></tr><tr><td data-num="24"></td><td><pre>那就是拉库命令不完整,请检查或复制完整的拉库命</pre></td></tr><tr><td data-num="25"></td><td><pre></pre></td></tr><tr><td data-num="26"></td><td><pre><span class="token comment">#Python3 依赖安装失败修复(基于 Faker 一键脚本安装的青龙)</span></pre></td></tr><tr><td data-num="27"></td><td><pre><span class="token function">curl</span> <span class="token parameter variable">-sS</span> https://bootstrap.pypa.io/get-pip.py <span class="token operator">|</span> python3</pre></td></tr></table></figure> @@ -794,37 +338,7 @@ curl -sS https://bootstrap.pypa.io/get-pip.py | python3 <img data-src="https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32204f14d87e95b59e.jpg" alt="" /></li> </ol> <h4 id="修改themeshoka配置"><a class="anchor" href="#修改themeshoka配置">#</a> 修改 Theme.Shoka 配置</h4> -<pre><code class="language-yaml">valine: -  appId: 粘贴5中获取的App ID #Your_appId - appKey: 粘贴5中获取的App Key #Your_appkey - placeholder: ヽ(○´∀`)ノ♪欢迎畅所欲言 # Comment box placeholder - avatar: mp #默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro - pageSize: 10 # Pagination size - lang: zh-CN - visitor: true # Article reading statistic 这个要设置为false,以免与 leancloud_visitors 突冲 - NoRecordIP: false # Whether to record the commenter IP - serverURLs: # When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in) - powerMode: true - tagMeta: - visitor: 新朋友 - master: 博主 - friend: 小伙伴 - investor: 金主粑粑 - tagColor: - master: &quot;var(--color-orange)&quot; - friend: &quot;var(--color-aqua)&quot; - investor: &quot;var(--color-pink)&quot; - tagMember: - master: - # - hash of master@email.com - # - hash of master2@email.com - friend: - # - hash of friend@email.com - # - hash of friend2@email.com - investor: - # - hash of investor1@email.com -</code></pre> - +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token key atrule">valine</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> appId<span class="token punctuation">:</span> 粘贴5中获取的App ID <span class="token comment">#Your_appId</span></pre></td></tr><tr><td data-num="3"></td><td><pre> <span class="token key atrule">appKey</span><span class="token punctuation">:</span> 粘贴5中获取的App Key <span class="token comment">#Your_appkey</span></pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token key atrule">placeholder</span><span class="token punctuation">:</span> ヽ(○´∀`)ノ♪欢迎畅所欲言 <span class="token comment"># Comment box placeholder</span></pre></td></tr><tr><td data-num="5"></td><td><pre> <span class="token key atrule">avatar</span><span class="token punctuation">:</span> mp <span class="token comment">#默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro</span></pre></td></tr><tr><td data-num="6"></td><td><pre> <span class="token key atrule">pageSize</span><span class="token punctuation">:</span> <span class="token number">10</span> <span class="token comment"># Pagination size</span></pre></td></tr><tr><td data-num="7"></td><td><pre> <span class="token key atrule">lang</span><span class="token punctuation">:</span> zh<span class="token punctuation">-</span>CN</pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token key atrule">visitor</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># Article reading statistic 这个要设置为 false,以免与 leancloud_visitors 突冲 </span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token key atrule">NoRecordIP</span><span class="token punctuation">:</span> <span class="token boolean important">false</span> <span class="token comment"># Whether to record the commenter IP</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token key atrule">serverURLs</span><span class="token punctuation">:</span> <span class="token comment"># When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)</span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token key atrule">powerMode</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token key atrule">tagMeta</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token key atrule">visitor</span><span class="token punctuation">:</span> 新朋友</pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token key atrule">master</span><span class="token punctuation">:</span> 博主</pre></td></tr><tr><td data-num="15"></td><td><pre> <span class="token key atrule">friend</span><span class="token punctuation">:</span> 小伙伴</pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token key atrule">investor</span><span class="token punctuation">:</span> 金主粑粑</pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token key atrule">tagColor</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token key atrule">master</span><span class="token punctuation">:</span> <span class="token string">"var(--color-orange)"</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token key atrule">friend</span><span class="token punctuation">:</span> <span class="token string">"var(--color-aqua)"</span></pre></td></tr><tr><td data-num="20"></td><td><pre> <span class="token key atrule">investor</span><span class="token punctuation">:</span> <span class="token string">"var(--color-pink)"</span></pre></td></tr><tr><td data-num="21"></td><td><pre> <span class="token key atrule">tagMember</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="22"></td><td><pre> <span class="token key atrule">master</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token comment"># - hash of master@email.com</span></pre></td></tr><tr><td data-num="24"></td><td><pre> <span class="token comment"># - hash of master2@email.com</span></pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token key atrule">friend</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="26"></td><td><pre> <span class="token comment"># - hash of friend@email.com</span></pre></td></tr><tr><td data-num="27"></td><td><pre> <span class="token comment"># - hash of friend2@email.com</span></pre></td></tr><tr><td data-num="28"></td><td><pre> <span class="token key atrule">investor</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="29"></td><td><pre> <span class="token comment"># - hash of investor1@email.com</span></pre></td></tr></table></figure> @@ -858,25 +372,7 @@ curl -sS https://bootstrap.pypa.io/get-pip.py | python3 <ul> <li>此处配置为 nginx 反向代理,配置完成后可在外网连接访问</li> </ul> -<pre><code class="language-yaml">stream &#123; - - #极空间-docker-mariadb - upstream mariadb &#123; - hash $remote_addr consistent; - server mariadb的ip:端口; - &#125; - - server &#123; - listen 监听端口; - - proxy_connect_timeout 30s; - proxy_timeout 300s; - proxy_pass mariadb; - &#125; - -&#125; -</code></pre> - +<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> </pre></td></tr><tr><td data-num="3"></td><td><pre> <span class="token comment">#极空间 - docker-mariadb</span></pre></td></tr><tr><td data-num="4"></td><td><pre> upstream mariadb <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="5"></td><td><pre> hash $remote_addr consistent;</pre></td></tr><tr><td data-num="6"></td><td><pre> server mariadb的ip<span class="token punctuation">:</span>端口;</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> server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="10"></td><td><pre> listen 监听端口;</pre></td></tr><tr><td data-num="11"></td><td><pre></pre></td></tr><tr><td data-num="12"></td><td><pre> proxy_connect_timeout 30s;</pre></td></tr><tr><td data-num="13"></td><td><pre> proxy_timeout 300s;</pre></td></tr><tr><td data-num="14"></td><td><pre> proxy_pass mariadb;</pre></td></tr><tr><td data-num="15"></td><td><pre> <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> @@ -903,36 +399,16 @@ curl -sS https://bootstrap.pypa.io/get-pip.py | python3 <ul> <li>如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。</li> </ul> -<pre><code class="language-php">if((!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) &#123; - $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; - $_SERVER['HTTPS'] = 'on'; -&#125; -</code></pre> -<ul> +<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> <li>后台安装插件时如果跳转到 ftp 配置,则需要在 wp-config.php 中加入以下代码,并到 wp-content 目录下创建 tmp 目录,最后还需要给 tmp 目录赋予读写权限。</li> </ul> -<pre><code class="language-php">define('WP_TEMP_DIR', ABSPATH.'wp-content/tmp'); -define('FS_METHOD', 'direct'); -define('FS_CHMOD_DIR', 0777); -define('FS_CHMOD_FILE', 0777); -</code></pre> -<ul> +<figure class="highlight php"><figcaption data-lang="PHP"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">define</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'WP_TEMP_DIR'</span><span class="token punctuation">,</span> <span class="token constant">ABSPATH</span><span class="token operator">.</span><span class="token string single-quoted-string">'wp-content/tmp'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">define</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'FS_METHOD'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'direct'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">define</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'FS_CHMOD_DIR'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token function">define</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'FS_CHMOD_FILE'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr></table></figure><ul> <li>目录和文件所有者、组会自动变为 root,目前我是通过访问页面时通过命令修正。暂时未发现问题,如果不行则只能通过定时任务来定时修正了。需要在 wp-config.php 中加入以下代码。</li> </ul> -<pre><code class="language-php">chown('/var/www/html', 'www-data'); -chgrp('/var/www/html', 'www-data'); -chmod('/var/www/html/wp-content/plugins', 0777); -chmod('/var/www/html/wp-content/themes', 0777); -chmod('/var/www/html/wp-content/tmp', 0777); -</code></pre> -<ul> +<figure class="highlight php"><figcaption data-lang="PHP"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">chown</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'www-data'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">chgrp</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'www-data'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">chmod</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html/wp-content/plugins'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token function">chmod</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html/wp-content/themes'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token function">chmod</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html/wp-content/tmp'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr></table></figure><ul> <li>隐藏后台访问需要在 wp-login.php 中加入以下代码,key、value 和 https://www.xxx.com/ 需要修改为自己的。修改后只能通过 https://www.xxx.com/wp-login.php?key=value 访问,其它访问需要登录的页面都会跳转到配置的 https://www.xxx.com/ 地址。</li> </ul> -<pre><code class="language-php">if($_GET['key'] != 'value') &#123; - header('Location: https://www.xxx.com/'); -&#125; -</code></pre> - +<figure class="highlight php"><figcaption data-lang="PHP"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'key'</span><span class="token punctuation">]</span> <span class="token operator">!=</span> <span class="token string single-quoted-string">'value'</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Location: https://www.xxx.com/'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure> @@ -975,221 +451,7 @@ chmod('/var/www/html/wp-content/tmp', 0777); <li>被监控端需要把命令执行脚本放入 libexec 目录中</li> <li>被监控端自动安装脚本(可借鉴)</li> </ol> -<pre><code class="language-bash">1、请先修改脚本中的服务端IP。 -2、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令,弹出选择窗口后选择no。 -3、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录,目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。 - -#!/bin/bash -#服务端ip -SERVER_IP=10.10.10.121 -#安装目录 -INSTALL_HOME=`pwd` -#安装ubuntu版本 -INSTALL_UBUNTU() -&#123; - sudo apt-get update - sudo apt-get install -y autoconf automake gcc libc6 libmcrypt-dev make libssl-dev wget openssl - - cd /tmp - #wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz - cp $INSTALL_HOME/Ubuntu/nrpe.tar.gz ./ - tar xzf nrpe.tar.gz - - cd /tmp/nrpe-nrpe-4.0.3/ - sudo ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/ - sudo make all - - sudo make install-groups-users - - sudo make install - - sudo make install-config - - sudo sh -c &quot;echo &gt;&gt; /etc/services&quot; - sudo sh -c &quot;sudo echo '# Nagios services' &gt;&gt; /etc/services&quot; - sudo sh -c &quot;sudo echo 'nrpe 5666/tcp' &gt;&gt; /etc/services&quot; - - #判断系统是高版本还是低版本 - VERSION=`lsb_release -r --short` - IS_LOW_VERSION=`echo &quot;$VERSION &lt; 15&quot; | bc` - - if [ $IS_LOW_VERSION = 1 ]; then - #低版本 - sudo make install-init - else - #高版本 - sudo make install-init - sudo systemctl enable nrpe.service - fi - - sudo mkdir -p /etc/ufw/applications.d - sudo sh -c &quot;echo '[NRPE]' &gt; /etc/ufw/applications.d/nagios&quot; - sudo sh -c &quot;echo 'title=Nagios Remote Plugin Executor' &gt;&gt; /etc/ufw/applications.d/nagios&quot; - sudo sh -c &quot;echo 'description=Allows remote execution of Nagios plugins' &gt;&gt; /etc/ufw/applications.d/nagios&quot; - sudo sh -c &quot;echo 'ports=5666/tcp' &gt;&gt; /etc/ufw/applications.d/nagios&quot; - sudo ufw allow NRPE - sudo ufw reload - - sudo sh -c &quot;sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg&quot; - - cd $INSTALL_HOME - sudo cp ./sh/* /usr/local/nagios/libexec/ - sudo chmod +xr /usr/local/nagios/libexec/* - - sudo 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; - sudo sh -c &quot;echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo 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; - sudo 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; - NETWORK_INDEX=1 - for NETWORK_NAME in `cat /proc/net/dev | awk '&#123;i++; if(i&gt;2)&#123;print $1&#125;&#125;' | sed 's/^[\t]*//g' | sed 's/[:]*$//g'`;do - if [ $NETWORK_NAME != 'lo' ]; then - sudo sh -c &quot;echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - NETWORK_INDEX=`expr $NETWORK_INDEX + 1 ` - fi - done - - if [ $IS_LOW_VERSION = 1 ]; then - #低版本 - sudo start nrpe - else - #高版本 - sudo systemctl start nrpe.service - fi -&#125; - -#安装centos版本 -INSTALL_CENTOS() -&#123; - yum install -y gcc glibc glibc-common openssl openssl-devel perl wget - - cd /tmp - #wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz - cp $INSTALL_HOME/CentOS/nrpe.tar.gz ./ - tar xzf nrpe.tar.gz - - cd /tmp/nrpe-nrpe-4.0.3/ - ./configure --enable-command-args - make all - - make install-groups-users - - make install - - make install-config - - echo &gt;&gt; /etc/services - echo '# Nagios services' &gt;&gt; /etc/services - echo 'nrpe 5666/tcp' &gt;&gt; /etc/services - - #判断系统是高版本还是低版本 - VERSION=`rpm -q centos-release|cut -d- -f3` - #安装bc命令 - yum -y install bc - IS_LOW_VERSION=`echo &quot;$VERSION &lt; 7&quot; | bc` - - if [ $IS_LOW_VERSION = 1 ]; then - #低版本 - make install-init - - iptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT - service iptables save - ip6tables -I INPUT -p tcp --destination-port 5666 -j ACCEPT - service ip6tables save - else - #高版本 - make install-init - systemctl enable nrpe.service - - firewall-cmd --zone=public --add-port=5666/tcp - firewall-cmd --zone=public --add-port=5666/tcp --permanent - fi - - sudo sh -c &quot;sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg&quot; - - cd $INSTALL_HOME - sudo cp ./sh/* /usr/local/nagios/libexec/ - sudo chmod +xr /usr/local/nagios/libexec/* - - sudo 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; - sudo sh -c &quot;echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo 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; - sudo 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; - NETWORK_INDEX=1 - for NETWORK_NAME in `cat /proc/net/dev | awk '&#123;i++; if(i&gt;2)&#123;print $1&#125;&#125;' | sed 's/^[\t]*//g' | sed 's/[:]*$//g'`;do - if [ $NETWORK_NAME != 'lo' ]; then - sudo sh -c &quot;echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - NETWORK_INDEX=`expr $NETWORK_INDEX + 1 ` - fi - done - - if [ $IS_LOW_VERSION = 1 ]; then - #低版本 - if [ $(echo &quot;$VERSION &lt; 6&quot; | bc) -eq 1 ]; then - service nrpe start - else - start nrpe - fi - else - #高版本 - systemctl start nrpe.service - fi -&#125; - -#安装其它版本 -INSTALL_OTHER() -&#123; - echo &quot;Not supported at the moment.&quot; -&#125; - -#根据不同系统安装不同版本 -INSTALL() -&#123; - if grep -Eqii &quot;CentOS&quot; /etc/issue || grep -Eq &quot;CentOS&quot; /etc/*-release; then - DISTRO='CentOS' - PM='yum' - INSTALL_CENTOS - elif grep -Eqi &quot;Red Hat Enterprise Linux Server&quot; /etc/issue || grep -Eq &quot;Red Hat Enterprise Linux Server&quot; /etc/*-release; then - DISTRO='RHEL' - PM='yum' - INSTALL_OTHER - elif grep -Eqi &quot;Aliyun&quot; /etc/issue || grep -Eq &quot;Aliyun&quot; /etc/*-release; then - DISTRO='Aliyun' - PM='yum' - INSTALL_OTHER - elif grep -Eqi &quot;Fedora&quot; /etc/issue || grep -Eq &quot;Fedora&quot; /etc/*-release; then - DISTRO='Fedora' - PM='yum' - INSTALL_OTHER - elif grep -Eqi &quot;Debian&quot; /etc/issue || grep -Eq &quot;Debian&quot; /etc/*-release; then - DISTRO='Debian' - PM='apt' - INSTALL_OTHER - elif grep -Eqi &quot;Ubuntu&quot; /etc/issue || grep -Eq &quot;Ubuntu&quot; /etc/*-release; then - DISTRO='Ubuntu' - PM='apt' - INSTALL_UBUNTU - elif grep -Eqi &quot;Raspbian&quot; /etc/issue || grep -Eq &quot;Raspbian&quot; /etc/*-release; then - DISTRO='Raspbian' - PM='apt' - INSTALL_OTHER - else - echo &quot;unknow linux.&quot; - exit 1 - fi - echo $DISTRO -&#125; - -INSTALL - -exit 0 -</code></pre> -<h4 id="登录"><a class="anchor" href="#登录">#</a> 登录</h4> +<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> <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> <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> </pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token builtin class-name">cd</span> /tmp</pre></td></tr><tr><td data-num="17"></td><td><pre> <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> <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> <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> <span class="token builtin class-name">cd</span> /tmp/nrpe-nrpe-4.0.3/</pre></td></tr><tr><td data-num="22"></td><td><pre> <span class="token function">sudo</span> ./configure --enable-command-args --with-ssl-lib<span class="token operator">=</span>/usr/lib/x86_64-linux-gnu/</pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> all</pre></td></tr><tr><td data-num="24"></td><td><pre></pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> install-groups-users</pre></td></tr><tr><td data-num="26"></td><td><pre></pre></td></tr><tr><td data-num="27"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> <span class="token function">install</span></pre></td></tr><tr><td data-num="28"></td><td><pre></pre></td></tr><tr><td data-num="29"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> install-config</pre></td></tr><tr><td data-num="30"></td><td><pre></pre></td></tr><tr><td data-num="31"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo >> /etc/services"</span></pre></td></tr><tr><td data-num="32"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sudo echo '# Nagios services' >> /etc/services"</span></pre></td></tr><tr><td data-num="33"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sudo echo 'nrpe 5666/tcp' >> /etc/services"</span></pre></td></tr><tr><td data-num="34"></td><td><pre> </pre></td></tr><tr><td data-num="35"></td><td><pre> <span class="token comment">#判断系统是高版本还是低版本</span></pre></td></tr><tr><td data-num="36"></td><td><pre> <span class="token assign-left variable">VERSION</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span>lsb_release <span class="token parameter variable">-r</span> <span class="token parameter variable">--short</span><span class="token variable">`</span></span></pre></td></tr><tr><td data-num="37"></td><td><pre> <span class="token assign-left variable">IS_LOW_VERSION</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">$VERSION</span> &lt; 15"</span> <span class="token operator">|</span> <span class="token function">bc</span><span class="token variable">`</span></span></pre></td></tr><tr><td data-num="38"></td><td><pre></pre></td></tr><tr><td data-num="39"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$IS_LOW_VERSION</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="40"></td><td><pre> <span class="token comment">#低版本</span></pre></td></tr><tr><td data-num="41"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> install-init</pre></td></tr><tr><td data-num="42"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="43"></td><td><pre> <span class="token comment">#高版本</span></pre></td></tr><tr><td data-num="44"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> install-init</pre></td></tr><tr><td data-num="45"></td><td><pre> <span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> nrpe.service</pre></td></tr><tr><td data-num="46"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="47"></td><td><pre> </pre></td></tr><tr><td data-num="48"></td><td><pre> <span class="token function">sudo</span> <span class="token function">mkdir</span> <span class="token parameter variable">-p</span> /etc/ufw/applications.d</pre></td></tr><tr><td data-num="49"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo '[NRPE]' > /etc/ufw/applications.d/nagios"</span></pre></td></tr><tr><td data-num="50"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'title=Nagios Remote Plugin Executor' >> /etc/ufw/applications.d/nagios"</span></pre></td></tr><tr><td data-num="51"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'description=Allows remote execution of Nagios plugins' >> /etc/ufw/applications.d/nagios"</span></pre></td></tr><tr><td data-num="52"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'ports=5666/tcp' >> /etc/ufw/applications.d/nagios"</span></pre></td></tr><tr><td data-num="53"></td><td><pre> <span class="token function">sudo</span> ufw allow NRPE</pre></td></tr><tr><td data-num="54"></td><td><pre> <span class="token function">sudo</span> ufw reload</pre></td></tr><tr><td data-num="55"></td><td><pre> </pre></td></tr><tr><td data-num="56"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sed -i '/^allowed_hosts=/s/$/,<span class="token variable">$SERVER_IP</span>/' /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="57"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="58"></td><td><pre> </pre></td></tr><tr><td data-num="59"></td><td><pre> <span class="token builtin class-name">cd</span> <span class="token variable">$INSTALL_HOME</span></pre></td></tr><tr><td data-num="60"></td><td><pre> <span class="token function">sudo</span> <span class="token function">cp</span> ./sh/* /usr/local/nagios/libexec/</pre></td></tr><tr><td data-num="61"></td><td><pre> <span class="token function">sudo</span> <span class="token function">chmod</span> +xr /usr/local/nagios/libexec/*</pre></td></tr><tr><td data-num="62"></td><td><pre> </pre></td></tr><tr><td data-num="63"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"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' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="64"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="65"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="66"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="67"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \<span class="token variable">$ARG1</span>\$' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="68"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="69"></td><td><pre> <span class="token assign-left variable">NETWORK_INDEX</span><span class="token operator">=</span><span class="token number">1</span></pre></td></tr><tr><td data-num="70"></td><td><pre> <span class="token keyword">for</span> <span class="token for-or-select variable">NETWORK_NAME</span> <span class="token keyword">in</span> <span class="token variable"><span class="token variable">`</span><span class="token function">cat</span> /proc/net/dev <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'&#123;i++; if(i>2)&#123;print $1&#125;&#125;'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/^[\t]*//g'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/[:]*$//g'</span><span class="token variable">`</span></span><span class="token punctuation">;</span><span class="token keyword">do</span></pre></td></tr><tr><td data-num="71"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$NETWORK_NAME</span> <span class="token operator">!=</span> <span class="token string">'lo'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="72"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_network<span class="token variable">$NETWORK_INDEX</span>]=/usr/local/nagios/libexec/check_network.sh <span class="token variable">$NETWORK_NAME</span>' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="73"></td><td><pre> <span class="token assign-left variable">NETWORK_INDEX</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">expr</span> $NETWORK_INDEX + <span class="token number">1</span> <span class="token variable">`</span></span></pre></td></tr><tr><td data-num="74"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="75"></td><td><pre> <span class="token keyword">done</span></pre></td></tr><tr><td data-num="76"></td><td><pre> </pre></td></tr><tr><td data-num="77"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$IS_LOW_VERSION</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="78"></td><td><pre> <span class="token comment">#低版本</span></pre></td></tr><tr><td data-num="79"></td><td><pre> <span class="token function">sudo</span> start nrpe</pre></td></tr><tr><td data-num="80"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="81"></td><td><pre> <span class="token comment">#高版本</span></pre></td></tr><tr><td data-num="82"></td><td><pre> <span class="token function">sudo</span> systemctl start nrpe.service</pre></td></tr><tr><td data-num="83"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="84"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="85"></td><td><pre></pre></td></tr><tr><td data-num="86"></td><td><pre><span class="token comment">#安装 centos 版本</span></pre></td></tr><tr><td data-num="87"></td><td><pre><span class="token function-name function">INSTALL_CENTOS</span><span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="88"></td><td><pre><span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="89"></td><td><pre> yum <span class="token function">install</span> <span class="token parameter variable">-y</span> gcc glibc glibc-common openssl openssl-devel perl <span class="token function">wget</span></pre></td></tr><tr><td data-num="90"></td><td><pre></pre></td></tr><tr><td data-num="91"></td><td><pre> <span class="token builtin class-name">cd</span> /tmp</pre></td></tr><tr><td data-num="92"></td><td><pre> <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="93"></td><td><pre> <span class="token function">cp</span> <span class="token variable">$INSTALL_HOME</span>/CentOS/nrpe.tar.gz ./</pre></td></tr><tr><td data-num="94"></td><td><pre> <span class="token function">tar</span> xzf nrpe.tar.gz</pre></td></tr><tr><td data-num="95"></td><td><pre></pre></td></tr><tr><td data-num="96"></td><td><pre> <span class="token builtin class-name">cd</span> /tmp/nrpe-nrpe-4.0.3/</pre></td></tr><tr><td data-num="97"></td><td><pre> ./configure --enable-command-args</pre></td></tr><tr><td data-num="98"></td><td><pre> <span class="token function">make</span> all</pre></td></tr><tr><td data-num="99"></td><td><pre></pre></td></tr><tr><td data-num="100"></td><td><pre> <span class="token function">make</span> install-groups-users</pre></td></tr><tr><td data-num="101"></td><td><pre></pre></td></tr><tr><td data-num="102"></td><td><pre> <span class="token function">make</span> <span class="token function">install</span></pre></td></tr><tr><td data-num="103"></td><td><pre></pre></td></tr><tr><td data-num="104"></td><td><pre> <span class="token function">make</span> install-config</pre></td></tr><tr><td data-num="105"></td><td><pre></pre></td></tr><tr><td data-num="106"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token operator">>></span> /etc/services</pre></td></tr><tr><td data-num="107"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token string">'# Nagios services'</span> <span class="token operator">>></span> /etc/services</pre></td></tr><tr><td data-num="108"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token string">'nrpe 5666/tcp'</span> <span class="token operator">>></span> /etc/services</pre></td></tr><tr><td data-num="109"></td><td><pre> </pre></td></tr><tr><td data-num="110"></td><td><pre> <span class="token comment">#判断系统是高版本还是低版本</span></pre></td></tr><tr><td data-num="111"></td><td><pre> <span class="token assign-left variable">VERSION</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">rpm</span> <span class="token parameter variable">-q</span> centos-release<span class="token operator">|</span><span class="token function">cut</span> -d- <span class="token parameter variable">-f3</span><span class="token variable">`</span></span></pre></td></tr><tr><td data-num="112"></td><td><pre> <span class="token comment">#安装 bc 命令</span></pre></td></tr><tr><td data-num="113"></td><td><pre> yum <span class="token parameter variable">-y</span> <span class="token function">install</span> <span class="token function">bc</span></pre></td></tr><tr><td data-num="114"></td><td><pre> <span class="token assign-left variable">IS_LOW_VERSION</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">$VERSION</span> &lt; 7"</span> <span class="token operator">|</span> <span class="token function">bc</span><span class="token variable">`</span></span></pre></td></tr><tr><td data-num="115"></td><td><pre></pre></td></tr><tr><td data-num="116"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$IS_LOW_VERSION</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="117"></td><td><pre> <span class="token comment">#低版本</span></pre></td></tr><tr><td data-num="118"></td><td><pre> <span class="token function">make</span> install-init</pre></td></tr><tr><td data-num="119"></td><td><pre> </pre></td></tr><tr><td data-num="120"></td><td><pre> iptables <span class="token parameter variable">-I</span> INPUT <span class="token parameter variable">-p</span> tcp --destination-port <span class="token number">5666</span> <span class="token parameter variable">-j</span> ACCEPT</pre></td></tr><tr><td data-num="121"></td><td><pre> <span class="token function">service</span> iptables save</pre></td></tr><tr><td data-num="122"></td><td><pre> ip6tables <span class="token parameter variable">-I</span> INPUT <span class="token parameter variable">-p</span> tcp --destination-port <span class="token number">5666</span> <span class="token parameter variable">-j</span> ACCEPT</pre></td></tr><tr><td data-num="123"></td><td><pre> <span class="token function">service</span> ip6tables save</pre></td></tr><tr><td data-num="124"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="125"></td><td><pre> <span class="token comment">#高版本</span></pre></td></tr><tr><td data-num="126"></td><td><pre> <span class="token function">make</span> install-init</pre></td></tr><tr><td data-num="127"></td><td><pre> systemctl <span class="token builtin class-name">enable</span> nrpe.service</pre></td></tr><tr><td data-num="128"></td><td><pre> </pre></td></tr><tr><td data-num="129"></td><td><pre> firewall-cmd <span class="token parameter variable">--zone</span><span class="token operator">=</span>public --add-port<span class="token operator">=</span><span class="token number">5666</span>/tcp</pre></td></tr><tr><td data-num="130"></td><td><pre> firewall-cmd <span class="token parameter variable">--zone</span><span class="token operator">=</span>public --add-port<span class="token operator">=</span><span class="token number">5666</span>/tcp <span class="token parameter variable">--permanent</span></pre></td></tr><tr><td data-num="131"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="132"></td><td><pre> </pre></td></tr><tr><td data-num="133"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sed -i '/^allowed_hosts=/s/$/,<span class="token variable">$SERVER_IP</span>/' /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="134"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="135"></td><td><pre> </pre></td></tr><tr><td data-num="136"></td><td><pre> <span class="token builtin class-name">cd</span> <span class="token variable">$INSTALL_HOME</span></pre></td></tr><tr><td data-num="137"></td><td><pre> <span class="token function">sudo</span> <span class="token function">cp</span> ./sh/* /usr/local/nagios/libexec/</pre></td></tr><tr><td data-num="138"></td><td><pre> <span class="token function">sudo</span> <span class="token function">chmod</span> +xr /usr/local/nagios/libexec/*</pre></td></tr><tr><td data-num="139"></td><td><pre> </pre></td></tr><tr><td data-num="140"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"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' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="141"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="142"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="143"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="144"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \<span class="token variable">$ARG1</span>\$' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="145"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="146"></td><td><pre> <span class="token assign-left variable">NETWORK_INDEX</span><span class="token operator">=</span><span class="token number">1</span></pre></td></tr><tr><td data-num="147"></td><td><pre> <span class="token keyword">for</span> <span class="token for-or-select variable">NETWORK_NAME</span> <span class="token keyword">in</span> <span class="token variable"><span class="token variable">`</span><span class="token function">cat</span> /proc/net/dev <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'&#123;i++; if(i>2)&#123;print $1&#125;&#125;'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/^[\t]*//g'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/[:]*$//g'</span><span class="token variable">`</span></span><span class="token punctuation">;</span><span class="token keyword">do</span></pre></td></tr><tr><td data-num="148"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$NETWORK_NAME</span> <span class="token operator">!=</span> <span class="token string">'lo'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="149"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_network<span class="token variable">$NETWORK_INDEX</span>]=/usr/local/nagios/libexec/check_network.sh <span class="token variable">$NETWORK_NAME</span>' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="150"></td><td><pre> <span class="token assign-left variable">NETWORK_INDEX</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">expr</span> $NETWORK_INDEX + <span class="token number">1</span> <span class="token variable">`</span></span></pre></td></tr><tr><td data-num="151"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="152"></td><td><pre> <span class="token keyword">done</span></pre></td></tr><tr><td data-num="153"></td><td><pre> </pre></td></tr><tr><td data-num="154"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$IS_LOW_VERSION</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="155"></td><td><pre> <span class="token comment">#低版本</span></pre></td></tr><tr><td data-num="156"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">$VERSION</span> &lt; 6"</span> <span class="token operator">|</span> <span class="token function">bc</span><span class="token variable">)</span></span> <span class="token parameter variable">-eq</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="157"></td><td><pre> <span class="token function">service</span> nrpe start</pre></td></tr><tr><td data-num="158"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="159"></td><td><pre> start nrpe</pre></td></tr><tr><td data-num="160"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="161"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="162"></td><td><pre> <span class="token comment">#高版本</span></pre></td></tr><tr><td data-num="163"></td><td><pre> systemctl start nrpe.service</pre></td></tr><tr><td data-num="164"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="165"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="166"></td><td><pre></pre></td></tr><tr><td data-num="167"></td><td><pre><span class="token comment">#安装其它版本</span></pre></td></tr><tr><td data-num="168"></td><td><pre><span class="token function-name function">INSTALL_OTHER</span><span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="169"></td><td><pre><span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="170"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token string">"Not supported at the moment."</span></pre></td></tr><tr><td data-num="171"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="172"></td><td><pre></pre></td></tr><tr><td data-num="173"></td><td><pre><span class="token comment">#根据不同系统安装不同版本</span></pre></td></tr><tr><td data-num="174"></td><td><pre><span class="token function-name function">INSTALL</span><span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="175"></td><td><pre><span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="176"></td><td><pre> <span class="token keyword">if</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqii</span> <span class="token string">"CentOS"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"CentOS"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="177"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'CentOS'</span></pre></td></tr><tr><td data-num="178"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'yum'</span></pre></td></tr><tr><td data-num="179"></td><td><pre> INSTALL_CENTOS</pre></td></tr><tr><td data-num="180"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Red Hat Enterprise Linux Server"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Red Hat Enterprise Linux Server"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="181"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'RHEL'</span></pre></td></tr><tr><td data-num="182"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'yum'</span></pre></td></tr><tr><td data-num="183"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="184"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Aliyun"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Aliyun"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="185"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Aliyun'</span></pre></td></tr><tr><td data-num="186"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'yum'</span></pre></td></tr><tr><td data-num="187"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="188"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Fedora"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Fedora"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="189"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Fedora'</span></pre></td></tr><tr><td data-num="190"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'yum'</span></pre></td></tr><tr><td data-num="191"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="192"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Debian"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Debian"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="193"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Debian'</span></pre></td></tr><tr><td data-num="194"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'apt'</span></pre></td></tr><tr><td data-num="195"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="196"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Ubuntu"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Ubuntu"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="197"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Ubuntu'</span></pre></td></tr><tr><td data-num="198"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'apt'</span></pre></td></tr><tr><td data-num="199"></td><td><pre> INSTALL_UBUNTU</pre></td></tr><tr><td data-num="200"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Raspbian"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Raspbian"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="201"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Raspbian'</span></pre></td></tr><tr><td data-num="202"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'apt'</span></pre></td></tr><tr><td data-num="203"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="204"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="205"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token string">"unknow linux."</span></pre></td></tr><tr><td data-num="206"></td><td><pre> <span class="token builtin class-name">exit</span> <span class="token number">1</span></pre></td></tr><tr><td data-num="207"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="208"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token variable">$DISTRO</span></pre></td></tr><tr><td data-num="209"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="210"></td><td><pre></pre></td></tr><tr><td data-num="211"></td><td><pre>INSTALL</pre></td></tr><tr><td data-num="212"></td><td><pre></pre></td></tr><tr><td data-num="213"></td><td><pre><span class="token builtin class-name">exit</span> <span class="token number">0</span></pre></td></tr></table></figure><h4 id="登录"><a class="anchor" href="#登录">#</a> 登录</h4> <p>地址:<span class="exturl" data-url="aHR0cDovL3huLS1JUC1mcjVjODZseDd6L25hZ2lvcw==">http:// 服务器 IP/nagios</span><br /> 用户名:nagiosadmin<br /> 密码:nagiosadmin</p> @@ -1197,13 +459,7 @@ exit 0 <ol> <li>监控日志未写入 mysql(可能是 ndoutils 服务不正常导致)。采用以下脚本命令解决</li> </ol> -<pre><code class="language-bash">#!/bin/bash -sudo rm -f /usr/local/nagios/var/ndo2db.pid -sudo rm -f /usr/local/nagios/var/ndo.sock -sudo systemctl restart ndo2db.service -sudo systemctl status ndo2db.service -</code></pre> - +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token shebang important">#!/bin/bash</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">sudo</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> /usr/local/nagios/var/ndo2db.pid</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">sudo</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> /usr/local/nagios/var/ndo.sock</pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token function">sudo</span> systemctl restart ndo2db.service</pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token function">sudo</span> systemctl status ndo2db.service</pre></td></tr></table></figure> @@ -1218,107 +474,22 @@ sudo systemctl status ndo2db.service <ol> <li>基础配置</li> </ol> -<pre><code class="language-yaml">port 6379 -requirepass 123456(密码,建议不设置) -vm-enabled no (虚拟内存,内存够的情况下可以不使用) -maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入) -bind 127.0.0.1 (注释掉,否则不能外部连接) -rdbchecksum no(持久化数据检查) -list-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb) -list-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩) -</code></pre> -<pre><code class="language-bash">sysctl vm.overcommit_memory=1 (立即生效) -修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。) -</code></pre> -<ol start="2"> +<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"> <li>禁用透明大页(影响性能)</li> </ol> -<pre><code class="language-bash">需要sudo su 切换到root身份(sudo 没用) -echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled -修改/etc/init.d/redis-server,加入/bin/echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled -</code></pre> -<ol start="3"> +<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"> <li>修复 TCP 警告</li> </ol> -<pre><code class="language-bash">sysctl net.core.somaxconn=1024(立即生效) -修改/etc/sysctl.conf添加net.core.somaxconn=1024 -</code></pre> -<ol start="4"> +<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"> <li>客户端缓冲区限制</li> </ol> -<pre><code class="language-yaml">客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。 -可以三种不同客户端的方式进行设置: -normal -&gt; 正常客户端 -slave -&gt; slave 和 MONITOR 客户端 -pubsub -&gt; 至少订阅了一个 pubsub channel 或 pattern 的客户端 -语法 : -client-output-buffer-limit &lt;class&gt;&lt;hard limit&gt; &lt;soft limit&gt; &lt;soft seconds&gt; -一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。 -例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据, -只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。 -把硬限制和软限制都设置为 0 来禁用该特性 -client-output-buffer-limit normal 0 0 0 -client-output-buffer-limit slave 5gb 512mb 60 -client-output-buffer-limit pubsub 32mb 8mb 60 -</code></pre> -<ol start="5"> +<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-num="7"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit &lt;class<span class="token punctuation">></span>&lt;hard limit<span class="token punctuation">></span> &lt;soft limit<span class="token punctuation">></span> &lt;soft seconds<span class="token punctuation">></span></pre></td></tr><tr><td data-num="8"></td><td><pre>一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。</pre></td></tr><tr><td data-num="9"></td><td><pre>例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,</pre></td></tr><tr><td data-num="10"></td><td><pre>只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。</pre></td></tr><tr><td data-num="11"></td><td><pre>把硬限制和软限制都设置为 0 来禁用该特性</pre></td></tr><tr><td data-num="12"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit normal 0 0 0</pre></td></tr><tr><td data-num="13"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit slave 5gb 512mb 60</pre></td></tr><tr><td data-num="14"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit pubsub 32mb 8mb 60</pre></td></tr></table></figure><ol start="5"> <li>持久化配置</li> </ol> -<pre><code class="language-yaml">---关闭RDB持久化--- -save &quot;&quot; -默认配置如下: -save 900 1 #900秒内有1次更新就持久化 -save 300 10 #300秒内有10次更新就持久化 -save 60 10000 #60秒内有10000次更新就持久化 ----关闭RDB持久化--- -主从同步支持两种策略,即disk和socket方式。 -新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。 -一个RDB文件从master端传到slave端,分为两种情况: -1、支持disk:master端将RDB file写到disk,稍后再传送到slave端; -2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。 -repl-diskless-sync no 默认不使用diskless同步方式 -repl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒 -repl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒 -repl-timeout 3600 设置超时时间 -repl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。 -repl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。 -backlog设置的越大,slave可以失连的时间就越长。 -repl-backlog-ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。 -slave-priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。 -min-slaves-to-write 3 -min-slaves-max-lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。 -</code></pre> -<h4 id="从服务"><a class="anchor" href="#从服务">#</a> 从服务</h4> -<pre><code class="language-yaml">基本配置同主服务一致 -slaveof 127.0.0.1 6379(主redis的ip和端口) -masterauth 123456 (主redis的密码) -可以通过slaveof no one命令将Slaver升级为Maste -bgsave (持久化命令,在redis-cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / -name dump.rd查找) -</code></pre> -<h4 id="相关命令"><a class="anchor" href="#相关命令">#</a> 相关命令</h4> -<pre><code class="language-bash">看状态 -sudo /etc/init.d/redis-server status -看端口 -netstat -nlt|grep 6379 -外部连接 -sudo vim /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉 -重启 -sudo server redis-server restart -查看内存 -free -m -批量删除指定key -redis-cli -n 6 scan 0 match *2020-06-12 count 10000| xargs redis-cli -n 6 del -大量删除key后快速释放被占用的内存 -memory purge -</code></pre> -<h4 id="问题解决"><a class="anchor" href="#问题解决">#</a> 问题解决</h4> -<pre><code class="language-bash">写入问题 -redis-cli config set stop-writes-on-bgsave-error no -sudo vim /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no -修改系统 sudo vim /etc/sysctl.conf加入vm.overcommit_memory=1 -sudo sysctl vm.overcommit_memory=1 -</code></pre> - +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token punctuation">---</span>关闭RDB持久化<span class="token punctuation">---</span></pre></td></tr><tr><td data-num="2"></td><td><pre>save ""</pre></td></tr><tr><td data-num="3"></td><td><pre>默认配置如下:</pre></td></tr><tr><td data-num="4"></td><td><pre>save 900 1 <span class="token comment">#900 秒内有 1 次更新就持久化</span></pre></td></tr><tr><td data-num="5"></td><td><pre>save 300 10 <span class="token comment">#300 秒内有 10 次更新就持久化</span></pre></td></tr><tr><td data-num="6"></td><td><pre>save 60 10000 <span class="token comment">#60 秒内有 10000 次更新就持久化</span></pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token punctuation">---</span>关闭RDB持久化<span class="token punctuation">---</span></pre></td></tr><tr><td data-num="8"></td><td><pre>主从同步支持两种策略,即disk和socket方式。</pre></td></tr><tr><td data-num="9"></td><td><pre>新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。</pre></td></tr><tr><td data-num="10"></td><td><pre>一个RDB文件从master端传到slave端,分为两种情况:</pre></td></tr><tr><td data-num="11"></td><td><pre>1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;</pre></td></tr><tr><td data-num="12"></td><td><pre>2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。</pre></td></tr><tr><td data-num="13"></td><td><pre>repl<span class="token punctuation">-</span>diskless<span class="token punctuation">-</span>sync no 默认不使用diskless同步方式</pre></td></tr><tr><td data-num="14"></td><td><pre>repl<span class="token punctuation">-</span>diskless<span class="token punctuation">-</span>sync<span class="token punctuation">-</span>delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒</pre></td></tr><tr><td data-num="15"></td><td><pre>repl<span class="token punctuation">-</span>ping<span class="token punctuation">-</span>slave<span class="token punctuation">-</span>period 60 slave端向server端发送pings的时间区间设置,默认为10秒</pre></td></tr><tr><td data-num="16"></td><td><pre>repl<span class="token punctuation">-</span>timeout 3600 设置超时时间</pre></td></tr><tr><td data-num="17"></td><td><pre>repl<span class="token punctuation">-</span>disable<span class="token punctuation">-</span>tcp<span class="token punctuation">-</span>nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。</pre></td></tr><tr><td data-num="18"></td><td><pre>repl<span class="token punctuation">-</span>backlog<span class="token punctuation">-</span>size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。</pre></td></tr><tr><td data-num="19"></td><td><pre>backlog设置的越大,slave可以失连的时间就越长。</pre></td></tr><tr><td data-num="20"></td><td><pre>repl<span class="token punctuation">-</span>backlog<span class="token punctuation">-</span>ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。</pre></td></tr><tr><td data-num="21"></td><td><pre>slave<span class="token punctuation">-</span>priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。</pre></td></tr><tr><td data-num="22"></td><td><pre>min<span class="token punctuation">-</span>slaves<span class="token punctuation">-</span>to<span class="token punctuation">-</span>write 3</pre></td></tr><tr><td data-num="23"></td><td><pre>min<span class="token punctuation">-</span>slaves<span class="token punctuation">-</span>max<span class="token punctuation">-</span>lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。</pre></td></tr></table></figure><h4 id="从服务"><a class="anchor" href="#从服务">#</a> 从服务</h4> +<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>slaveof 127.0.0.1 6379(主redis的ip和端口)</pre></td></tr><tr><td data-num="3"></td><td><pre>masterauth 123456 (主redis的密码)</pre></td></tr><tr><td data-num="4"></td><td><pre>可以通过slaveof no one命令将Slaver升级为Maste</pre></td></tr><tr><td data-num="5"></td><td><pre>bgsave (持久化命令,在redis<span class="token punctuation">-</span>cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / <span class="token punctuation">-</span>name dump.rd查找)</pre></td></tr></table></figure><h4 id="相关命令"><a class="anchor" href="#相关命令">#</a> 相关命令</h4> +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>看状态</pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">sudo</span> /etc/init.d/redis-server status</pre></td></tr><tr><td data-num="3"></td><td><pre>看端口</pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token function">netstat</span> -nlt<span class="token operator">|</span><span class="token function">grep</span> <span class="token number">6379</span></pre></td></tr><tr><td data-num="5"></td><td><pre>外部连接</pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token function">sudo</span> <span class="token function">vim</span> /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉</pre></td></tr><tr><td data-num="7"></td><td><pre>重启</pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token function">sudo</span> server redis-server restart</pre></td></tr><tr><td data-num="9"></td><td><pre>查看内存</pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token function">free</span> <span class="token parameter variable">-m</span></pre></td></tr><tr><td data-num="11"></td><td><pre>批量删除指定key</pre></td></tr><tr><td data-num="12"></td><td><pre>redis-cli <span class="token parameter variable">-n</span> <span class="token number">6</span> scan <span class="token number">0</span> match *2020-06-12 count <span class="token number">10000</span><span class="token operator">|</span> <span class="token function">xargs</span> redis-cli <span class="token parameter variable">-n</span> <span class="token number">6</span> del</pre></td></tr><tr><td data-num="13"></td><td><pre>大量删除key后快速释放被占用的内存</pre></td></tr><tr><td data-num="14"></td><td><pre>memory purge</pre></td></tr></table></figure><h4 id="问题解决"><a class="anchor" href="#问题解决">#</a> 问题解决</h4> +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>写入问题</pre></td></tr><tr><td data-num="2"></td><td><pre>redis-cli config <span class="token builtin class-name">set</span> stop-writes-on-bgsave-error no</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">sudo</span> <span class="token function">vim</span> /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no</pre></td></tr><tr><td data-num="4"></td><td><pre>修改系统 <span class="token function">sudo</span> <span class="token function">vim</span> /etc/sysctl.conf加入vm.overcommit_memory<span class="token operator">=</span><span class="token number">1</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token function">sudo</span> <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></table></figure> @@ -1330,21 +501,7 @@ sudo sysctl vm.overcommit_memory=1 <h4 id="使用场景"><a class="anchor" href="#使用场景">#</a> 使用场景</h4> <p>  在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:</p> -<pre><code class="language-yaml">server &#123; - listen port ssl http2; - server_name xxx.com; - ssl_certificate_key /xxx.key; - ssl_certificate /xxx.pem; - proxy_cookie_path ~(.*) &quot;$1; SameSite=None; secure; httponly&quot;; - - location / &#123; - #允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套) - add_header X-Frame-Options ALLOWALL; #允许被所有域名镶套 - proxy_pass http://xxx; - &#125; -&#125; -</code></pre> - +<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 port ssl http2;</pre></td></tr><tr><td data-num="3"></td><td><pre> server_name xxx.com;</pre></td></tr><tr><td data-num="4"></td><td><pre> ssl_certificate_key /xxx.key;</pre></td></tr><tr><td data-num="5"></td><td><pre> ssl_certificate /xxx.pem;</pre></td></tr><tr><td data-num="6"></td><td><pre> proxy_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> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token comment">#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)</span></pre></td></tr><tr><td data-num="10"></td><td><pre> add_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> proxy_pass http<span class="token punctuation">:</span>//xxx;</pre></td></tr><tr><td data-num="12"></td><td><pre> <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> @@ -1468,85 +625,19 @@ X-Frame-Options 三个参数:</p> <li>轮询(默认)</li> </ol> <p>  <em>每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。</em></p> -<pre><code class="language-yaml">upstream my_server &#123; - server 192.168.0.2:8080; - server 192.168.0.3:8080; -&#125; - -server &#123; - listen 80; - server_name 192.168.0.1; - - # Path to the root of your installation - location / &#123; - proxy_pass http://my_server; - &#125; - -&#125; -</code></pre> -<ol start="2"> +<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> server 192.168.0.2<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="3"></td><td><pre> server 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> listen 80;</pre></td></tr><tr><td data-num="8"></td><td><pre> server_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> <span class="token comment"># Path to the root of your installation</span></pre></td></tr><tr><td data-num="11"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="12"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//my_server;</pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="14"></td><td><pre> </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"> <li>weight 权重策略</li> </ol> <p>  <em>weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。</em></p> -<pre><code class="language-yaml">upstream my_server &#123; - server 192.168.0.2:8080 weight=1; - server 192.168.0.3:8080 weight=2; -&#125; - -server &#123; - listen 80; - server_name 192.168.0.1; - - # Path to the root of your installation - location / &#123; - proxy_pass http://my_server; - &#125; - -&#125; -</code></pre> -<ol start="3"> +<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> server 192.168.0.2<span class="token punctuation">:</span>8080 weight=1;</pre></td></tr><tr><td data-num="3"></td><td><pre> server 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> listen 80;</pre></td></tr><tr><td data-num="8"></td><td><pre> server_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> <span class="token comment"># Path to the root of your installation</span></pre></td></tr><tr><td data-num="11"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="12"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//my_server;</pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="14"></td><td><pre> </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"> <li>ip_hash</li> </ol> <p>  <em>每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。</em></p> -<pre><code class="language-yaml">upstream my_server &#123; - ip_hash; - server 192.168.0.2:8080; - server 192.168.0.3:8080; -&#125; - -server &#123; - listen 80; - server_name 192.168.0.1; - - # Path to the root of your installation - location / &#123; - proxy_pass http://my_server; - &#125; - -&#125; -</code></pre> -<ol start="4"> +<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> ip_hash;</pre></td></tr><tr><td data-num="3"></td><td><pre> server 192.168.0.2<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="4"></td><td><pre> server 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> listen 80;</pre></td></tr><tr><td data-num="9"></td><td><pre> server_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> <span class="token comment"># Path to the root of your installation</span></pre></td></tr><tr><td data-num="12"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="13"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//my_server;</pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="15"></td><td><pre> </pre></td></tr><tr><td data-num="16"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><ol start="4"> <li>fair (第三方)</li> </ol> <p>  <em>按后端服务器的响应时间来分配请求,响应时间短的优先分配。</em></p> -<pre><code class="language-yaml">upstream my_server &#123; - server 192.168.0.2:8080; - server 192.168.0.3:8080; - fair; -&#125; - -server &#123; - listen 80; - server_name 192.168.0.1; - - # Path to the root of your installation - location / &#123; - proxy_pass http://my_server; - &#125; - -&#125; -</code></pre> -<ol start="5"> +<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> server 192.168.0.2<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="3"></td><td><pre> server 192.168.0.3<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="4"></td><td><pre> fair;</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> listen 80;</pre></td></tr><tr><td data-num="9"></td><td><pre> server_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> <span class="token comment"># Path to the root of your installation</span></pre></td></tr><tr><td data-num="12"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="13"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//my_server;</pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="15"></td><td><pre> </pre></td></tr><tr><td data-num="16"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><ol start="5"> <li>动静分离</li> </ol> <p>  <em>把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。</em></p> diff --git a/categories/Linux/Shell/index.html b/categories/Linux/Shell/index.html index 3c71eec08..68c7648c2 100644 --- a/categories/Linux/Shell/index.html +++ b/categories/Linux/Shell/index.html @@ -1 +1 @@ -分类:Shell | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:Shell | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/Linux/index.html b/categories/Linux/index.html index dcc9a84b3..35b5dacc4 100644 --- a/categories/Linux/index.html +++ b/categories/Linux/index.html @@ -1 +1 @@ -分类:Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/Linux/服务/Nginx/index.html b/categories/Linux/服务/Nginx/index.html index f45e53eba..9c6dd83ca 100644 --- a/categories/Linux/服务/Nginx/index.html +++ b/categories/Linux/服务/Nginx/index.html @@ -1 +1 @@ -分类:Nginx | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:Nginx | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/Linux/服务/index.html b/categories/Linux/服务/index.html index 5b0ef322a..dd00857d5 100644 --- a/categories/Linux/服务/index.html +++ b/categories/Linux/服务/index.html @@ -1 +1 @@ -分类:服务 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:服务 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/Linux/项目部署/index.html b/categories/Linux/项目部署/index.html index 16c3d2bd0..6dc4da53a 100644 --- a/categories/Linux/项目部署/index.html +++ b/categories/Linux/项目部署/index.html @@ -1 +1 @@ -分类:项目部署 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:项目部署 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/Windows/index.html b/categories/Windows/index.html index 5364c38ad..9061cf028 100644 --- a/categories/Windows/index.html +++ b/categories/Windows/index.html @@ -1 +1 @@ -分类:Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:Windows | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/Windows/工具/index.html b/categories/Windows/工具/index.html index 7ba05a6b3..13105c09a 100644 --- a/categories/Windows/工具/index.html +++ b/categories/Windows/工具/index.html @@ -1 +1 @@ -分类:工具 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:工具 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/index.html b/categories/index.html index b71bbdd57..16e4890da 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1 +1 @@ -全部分类 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +全部分类 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/极空间/Docker/Hexo/index.html b/categories/极空间/Docker/Hexo/index.html index d6f24a022..cdd1bb3df 100644 --- a/categories/极空间/Docker/Hexo/index.html +++ b/categories/极空间/Docker/Hexo/index.html @@ -1 +1 @@ -分类:Hexo | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:Hexo | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/极空间/Docker/index.html b/categories/极空间/Docker/index.html index bda143673..ac2c0ea39 100644 --- a/categories/极空间/Docker/index.html +++ b/categories/极空间/Docker/index.html @@ -1 +1 @@ -分类:Docker | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:Docker | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/极空间/index.html b/categories/极空间/index.html index 617fd4c5a..8269b2d14 100644 --- a/categories/极空间/index.html +++ b/categories/极空间/index.html @@ -1 +1 @@ -分类:极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/生活/index.html b/categories/生活/index.html index 04dd5cd9b..0f8a2b350 100644 --- a/categories/生活/index.html +++ b/categories/生活/index.html @@ -1 +1 @@ -分类:生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:生活 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/生活/心得体会/index.html b/categories/生活/心得体会/index.html index dccf3037d..140c75387 100644 --- a/categories/生活/心得体会/index.html +++ b/categories/生活/心得体会/index.html @@ -1 +1 @@ -分类:心得体会 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:心得体会 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/categories/生活/心情/index.html b/categories/生活/心情/index.html index da5edeba3..5be7ef188 100644 --- a/categories/生活/心情/index.html +++ b/categories/生活/心情/index.html @@ -1 +1 @@ -分类:心情 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +分类:心情 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/feed.json b/feed.json index b706fc6a1..e2eb9d1f2 100644 --- a/feed.json +++ b/feed.json @@ -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": "

# 引言

\n
    \n
  • 所有配置方法和介绍均来至于网络搜索汇总,主要用于方便后期巩固学习。
  • \n
\n

# 何为反向代理

\n
    \n
  • 在介绍反向代理之前,先来了解一下正向代理。
  • \n
\n

__正向代理:__如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。
\n\"991a203be1ec82b36e1f326376617d40.png\"
\n__反向代理:__看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
\n\"1c87e386a0ce624a3949bda443cf346d.png\"

\n
\n

正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果是在服务器用,用户无感知,就是反向代理。

\n
\n

# Nginx 配置文件

\n
    \n
  • \n

    在学习 Nginx 之前,要熟知它的配置文件,毕竟,下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。

    \n
  • \n
  • \n

    Nginx 默认的配置文件是在安装目录下的 conf 目录下,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。完整的配置文件,可以看一下文章最后。修改过 nginx.conf 配置文件,记得要重启 Nginx 服务(☆☆☆☆☆)

    \n
  • \n
  • \n

    配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):

    \n
  • \n
\n
# 主进程叫master,负责管理子进程,子进程叫worker
# worker_processes配置项表示开启几个业务进程,一般和cpu核数有关
worker_processes  1;
events {
    worker_connections  1024;
}
http {
\t# include表示可以引入其他文件,此处表示引入http mime类型
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
\t# 虚拟主机,可以配置多个
    server {
        listen       80;
        server_name  localhost;
        location / {
        \t# 路径匹配之后,哪个目录下去匹配相应的网页,html是相对路径
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
\t}
}

去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:

\n
    \n
  1. 全局块
  2. \n
\n
worker_processes  1;\n
\n

从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

\n

上面这行 worker_processes 配置,是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。

\n
    \n
  1. events 块
  2. \n
\n
events {\n\tworker_connections  1024;\n}\n
\n

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等

\n

上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

\n
    \n
  1. http 块
  2. \n
\n
http {\n    include       mime.types;\n    default_type  application/octet-stream;\n    sendfile        on;\n    keepalive_timeout  65;\n\n    server {\n        listen       80;\n        server_name  localhost;\n\n        location / {\n            root   html;\n            index  index.html index.htm;\n        }\n\n        error_page   500 502 503 504  /50x.html;\n        location = /50x.html {\n            root   html;\n    }\n}\n
\n

这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置

\n

__http 全局块:__http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

\n

__server 块:__这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

\n

__location 块:__这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

\n

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。(☆☆☆☆☆)

\n

# 反向代理配置

\n
    \n
  1. location 配置规则
  2. \n
\n
location [ = | ~ | ~* | ^~ | @ ] /uri {\n\n}\n\n=    :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。\n~    :用于表示 uri 包含正则表达式,并且区分大小写。\n~*   :用于表示 uri 包含正则表达式,并且不区分大小写。\n^~   :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。\n@    : "@" 定义一个命名的 location,使用在内部定向时,例如 error_page\n/uri  :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则\n/    :通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default\n\n☆☆☆☆☆ uri没有“/”结尾时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等。而有“/”结尾时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求\n
\n
    \n
  1. proxy_pass 配置规则
  2. \n
\n
url结尾加上了/,相当于是绝对路径,则Nginx不会把location中匹配的路径部分加入代理uri。\nurl结尾不加/,Nginx则会把匹配的路径部分加入代理uri。\n\n情景1:\nproxy_pass后有/ \n访问地址:http://localhost:8081/WCP.Service/wcp/modeladapter/download/asc.shtml\n最终代理:http://10.194.171.7:13082/modeladapter/download/asc.shtml\nlocation /WCP.Service/wcp/modeladapter/download/ {\n\tproxy_pass   http://10.194.171.7:13082/modeladapter/download/;\n}\n访问地址:http://localhost:8081/model/asc.shtml\n最终代理:http://127.0.0.1:8082/model/asc.shtml\nlocation /model/ {\n\tproxy_pass   http://127.0.0.1:8082/model/;\n}\n\n情景2:\nproxy_pass后有/\n访问地址:http://localhost:8081/model/asc.shtml\n最终代理:http://127.0.0.1:8082/asc.shtml\nlocation /model/ {\n\tproxy_pass   http://127.0.0.1:8082/;\n}\n\n情景3:\nproxy_pass后没有/ \n访问地址:http://localhost:8081/model/asc.shtml\n最终代理:http://127.0.0.1:8082/model/asc.shtml\nlocation /model/ {\n\tproxy_pass   http://127.0.0.1:8082;\n}\n\n情景4\nproxy_pass后没有/ \n访问地址:http://localhost:8081/model/asc.shtml\n最终代理:http://127.0.0.1:8082/AAAmodel/asc.shtml\nlocation /model/ {\n\tproxy_pass   http://127.0.0.1:8082/AAA;\n}\n\n情景5\nproxy_pass后有/\n访问地址:http://localhost:8081/model/asc.shtml\n最终代理:http://127.0.0.1:8082/asc.shtml\nlocation /model {\n\tproxy_pass   http://127.0.0.1:8082/;\n}\n\n情景6\nproxy_pass后有/\n访问地址:http://localhost:8081/modelBBB/asc.shtml\n最终代理:http://127.0.0.1:8082/asc.shtml\nlocation /model {\n\tproxy_pass   http://127.0.0.1:8082/;\n}\n
\n

# Nginx 完整配置文件

\n
#user  nobody;\nworker_processes  1;\n\n#error_log  logs/error.log;\n#error_log  logs/error.log  notice;\n#error_log  logs/error.log  info;\n\n#pid        logs/nginx.pid;\n\nevents {\n    worker_connections  1024;\n}\n\nhttp {\n    include       mime.types;\n    default_type  application/octet-stream;\n\n    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '\n    #                  '$status $body_bytes_sent "$http_referer" '\n    #                  '"$http_user_agent" "$http_x_forwarded_for"';\n\n    #access_log  logs/access.log  main;\n\n    sendfile        on;\n    #tcp_nopush     on;\n\n    #keepalive_timeout  0;\n    keepalive_timeout  65;\n\n    #gzip  on;\n\n    server {\n        listen       80;\n        server_name  localhost;\n\n        #charset koi8-r;\n\n        #access_log  logs/host.access.log  main;\n\n        location / {\n            root   html;\n            index  index.html index.htm;\n        }\n\n        #error_page  404              /404.html;\n\n        # redirect server error pages to the static page /50x.html\n        #\n        error_page   500 502 503 504  /50x.html;\n        location = /50x.html {\n            root   html;\n        }\n\n        # proxy the PHP scripts to Apache listening on 127.0.0.1:80\n        #\n        #location ~ \\.php$ {\n        #    proxy_pass   http://127.0.0.1;\n        #}\n\n        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000\n        #\n        #location ~ \\.php$ {\n        #    root           html;\n        #    fastcgi_pass   127.0.0.1:9000;\n        #    fastcgi_index  index.php;\n        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;\n        #    include        fastcgi_params;\n        #}\n\n        # deny access to .htaccess files, if Apache's document root\n        # concurs with nginx's one\n        #\n        #location ~ /\\.ht {\n        #    deny  all;\n        #}\n    }\n    # another virtual host using mix of IP-, name-, and port-based configuration\n    #\n    #server {\n    #    listen       8000;\n    #    listen       somename:8080;\n    #    server_name  somename  alias  another.alias;\n    #    location / {\n    #        root   html;\n    #        index  index.html index.htm;\n    #    }\n    #}\n    # HTTPS server\n    #\n    #server {\n    #    listen       443 ssl;\n    #    server_name  localhost;\n    #    ssl_certificate      cert.pem;\n    #    ssl_certificate_key  cert.key;\n\n    #    ssl_session_cache    shared:SSL:1m;\n    #    ssl_session_timeout  5m;\n\n    #    ssl_ciphers  HIGH:!aNULL:!MD5;\n    #    ssl_prefer_server_ciphers  on;\n\n    #    location / {\n    #        root   html;\n    #        index  index.html index.htm;\n    #    }\n    #}\n}\n
\n", + "content_html": "

# 引言

\n
    \n
  • 所有配置方法和介绍均来至于网络搜索汇总,主要用于方便后期巩固学习。
  • \n
\n

# 何为反向代理

\n
    \n
  • 在介绍反向代理之前,先来了解一下正向代理。
  • \n
\n

__正向代理:__如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。
\n\"991a203be1ec82b36e1f326376617d40.png\"
\n__反向代理:__看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
\n\"1c87e386a0ce624a3949bda443cf346d.png\"

\n
\n

正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果是在服务器用,用户无感知,就是反向代理。

\n
\n

# Nginx 配置文件

\n
    \n
  • \n

    在学习 Nginx 之前,要熟知它的配置文件,毕竟,下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。

    \n
  • \n
  • \n

    Nginx 默认的配置文件是在安装目录下的 conf 目录下,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。完整的配置文件,可以看一下文章最后。修改过 nginx.conf 配置文件,记得要重启 Nginx 服务(☆☆☆☆☆)

    \n
  • \n
  • \n

    配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):

    \n
  • \n
\n
# 主进程叫 master,负责管理子进程,子进程叫 worker
# worker_processes 配置项表示开启几个业务进程,一般和 cpu 核数有关
worker_processes  1;
events {
    worker_connections  1024;
}
http {
\t# include 表示可以引入其他文件,此处表示引入 http mime 类型
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
\t# 虚拟主机,可以配置多个
    server {
        listen       80;
        server_name  localhost;
        location / {
        \t# 路径匹配之后,哪个目录下去匹配相应的网页,html 是相对路径
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
\t}
}

去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:

\n
    \n
  1. 全局块
  2. \n
\n
worker_processes  1;

从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

\n

上面这行 worker_processes 配置,是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。

\n
    \n
  1. events 块
  2. \n
\n
events {
\tworker_connections  1024;
}

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等

\n

上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

\n
    \n
  1. http 块
  2. \n
\n
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
    }
}

这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置

\n

__http 全局块:__http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

\n

__server 块:__这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

\n

__location 块:__这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

\n

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。(☆☆☆☆☆)

\n

# 反向代理配置

\n
    \n
  1. location 配置规则
  2. \n
\n
location [ = | ~ | ~* | ^~ | @ ] /uri {
}
=    :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
~    :用于表示 uri 包含正则表达式,并且区分大小写。
~*   :用于表示 uri 包含正则表达式,并且不区分大小写。
^~   :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
@    : \"@\" 定义一个命名的 location,使用在内部定向时,例如 error_page
/uri  :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则
/    :通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default
☆☆☆☆☆ uri没有“/”结尾时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等。而有“/”结尾时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求
    \n
  1. proxy_pass 配置规则
  2. \n
\n
url结尾加上了/,相当于是绝对路径,则Nginx不会把location中匹配的路径部分加入代理uri。
url结尾不加/,Nginx则会把匹配的路径部分加入代理uri。
情景1:
proxy_pass后有/ 
访问地址:http://localhost:8081/WCP.Service/wcp/modeladapter/download/asc.shtml
最终代理:http://10.194.171.7:13082/modeladapter/download/asc.shtml
location /WCP.Service/wcp/modeladapter/download/ {
\tproxy_pass   http://10.194.171.7:13082/modeladapter/download/;
}
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/model/asc.shtml
location /model/ {
\tproxy_pass   http://127.0.0.1:8082/model/;
}
情景2:
proxy_pass后有/
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/asc.shtml
location /model/ {
\tproxy_pass   http://127.0.0.1:8082/;
}
情景3:
proxy_pass后没有/ 
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/model/asc.shtml
location /model/ {
\tproxy_pass   http://127.0.0.1:8082;
}
情景4
proxy_pass后没有/ 
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/AAAmodel/asc.shtml
location /model/ {
\tproxy_pass   http://127.0.0.1:8082/AAA;
}
情景5
proxy_pass后有/
访问地址:http://localhost:8081/model/asc.shtml
最终代理:http://127.0.0.1:8082/asc.shtml
location /model {
\tproxy_pass   http://127.0.0.1:8082/;
}
情景6
proxy_pass后有/
访问地址:http://localhost:8081/modelBBB/asc.shtml
最终代理:http://127.0.0.1:8082/asc.shtml
location /model {
\tproxy_pass   http://127.0.0.1:8082/;
}

# Nginx 完整配置文件

\n
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] \"$request\" '
    #                  '$status $body_bytes_sent \"$http_referer\" '
    #                  '\"$http_user_agent\" \"$http_x_forwarded_for\"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \\.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \\.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\\.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}
", "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": "

# 描述

\n
    \n
  • 今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。
  • \n
\n

# 过程

\n
    \n
  • 卸载旧的 nodejs(此命令会卸载掉相关依赖包)
  • \n
\n
sudo apt autoremove --purge nodejs\n
\n
    \n
  • 安装 NodeJS
  • \n
\n
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - && sudo apt-get install -y nodejs\n
\n
    \n
  • 安装 yarn
  • \n
\n
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null\n\necho "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list\n\nsudo apt-get update && sudo apt-get install yarn\n
\n
    \n
  • 初始化 (到项目根目录执行)
  • \n
\n
yarn install\n
\n
    \n
  • 编译(到项目根目录执行,完成后会生成 dist 目录)
  • \n
\n
yarn build\n
\n
    \n
  • 安装 nginx
  • \n
\n
apt install nginx\n
\n
    \n
  • 配置 nginx (编译 /etc/nginx/sites-available/default)
  • \n
\n
server {\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 {\n                proxy_pass http://localhost:8080;\n        }\n\n        location / {\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        }\n\n        location @router {\n                rewrite ^.*$ /index.html last;\n        }\n}\n\n
\n

# 其它

\n
    \n
  • 重新编译前需要先删除 dist 目录
  • \n
\n
rm dist -fr\n\nyarn build\n
\n", + "content_html": "

# 描述

\n
    \n
  • 今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。
  • \n
\n

# 过程

\n
    \n
  • 卸载旧的 nodejs(此命令会卸载掉相关依赖包)
  • \n
\n
sudo apt autoremove --purge nodejs
    \n
  • 安装 NodeJS
  • \n
\n
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - && sudo apt-get install -y nodejs
    \n
  • 安装 yarn
  • \n
\n
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo \"deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main\" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
    \n
  • 初始化 (到项目根目录执行)
  • \n
\n
yarn install
    \n
  • 编译(到项目根目录执行,完成后会生成 dist 目录)
  • \n
\n
yarn build
    \n
  • 安装 nginx
  • \n
\n
apt install nginx
    \n
  • 配置 nginx (编译 /etc/nginx/sites-available/default)
  • \n
\n
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;
        root /var/www/html;
        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        location /api {
                proxy_pass http://localhost:8080;
        }
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                alias /opt/codes/dayu-tools-arbitrage-web/dist/;
                try_files $uri $uri/ @router;
                index index.html index.htm;
        }
        location @router {
                rewrite ^.*$ /index.html last;
        }

# 其它

\n
    \n
  • 重新编译前需要先删除 dist 目录
  • \n
\n
rm dist -fr
yarn build
", "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": "

# 区别:

\n
2>/dev/null\n
\n

意思就是把错误输出到 “黑洞”

\n
>/dev/null 2>&1\n
\n

默认情况是 1,也就是等同于 1>/dev/null 2>&1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞”

\n
2>&1 >/dev/null\n
\n

意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕

\n

# 解释:

\n
    \n
  1. \n

    文件描述符
    \n Linux 系统预留三个文件描述符:0、1 和 2,他们的意义如下所示:
    \n0—— 标准输入(stdin)
    \n略...
    \n1—— 标准输出(stdout)
    \n在当前目录下,有且只有一个文件名称为 a.txt 的文件,这时我们运行这个命令【ls a.txt】, 就会获得一个标准输出 stdout 的输出结果:a.txt
    \n\"\"
    \n2—— 标准错误(stderr)
    \n在当前目录下,有且只有一个文件名称为 a.txt 的文件,我们运行命令【ls b.txt】,我们就会获得一个标准错误 stderr 的输出结果 “ls:无法访问 b.txt:没有这样的文件或目录”。
    \n\"\"

    \n
  2. \n
  3. \n

    重定向
    \n重定向的符号有两个:> 或 >>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举例如下:

    \n
  4. \n
\n
    \n
  • \n

    重定向标准输出 stdout
    \n\"\"
    \n 如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将 a.txt 打印到屏幕。在紧接的 cat 操作后,可以发现本来应该被输出的内容被记录到 stdout.txt 中。

    \n
  • \n
  • \n

    重定向标准错误 stderr
    \n\"\"
    \n 如上图所示,文件描述符 2,标准错误的重定向也是同样的原理被记录在了文件 stderr.txt 这个文件里面了。

    \n
  • \n
  • \n

    可以将 stderr 单独定向到一个文件,stdout 重定向到另一个文件

    \n
  • \n
\n
ls b.txt 2> stderr.txt 1>stdout.txt\n
\n
    \n
  • 也可以将 stderr 和 stdout 重定向到同一个文件
  • \n
\n
ls b.txt > output.txt 2>&1\n
\n
    \n
  • 或采用下面的方法,可以少写几个字,能达到同样的效果
  • \n
\n
ls b.txt &> output.txt\nls b.txt >& output.txt #两个表达式效果一样的\n
\n
    \n
  1. Linux 特殊文件
    \n /dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null 这个设备通常也被称为位桶(bit bucket)或黑洞。
    \n所以,2>/dev/null 的意思就是将标准错误 stderr 删掉。
  2. \n
\n", + "content_html": "

# 区别:

\n
2>/dev/null

意思就是把错误输出到 “黑洞”

\n
>/dev/null 2>&1

默认情况是 1,也就是等同于 1>/dev/null 2>&1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞”

\n
2>&1 >/dev/null

意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕

\n

# 解释:

\n
    \n
  1. \n

    文件描述符
    \n Linux 系统预留三个文件描述符:0、1 和 2,他们的意义如下所示:
    \n0—— 标准输入(stdin)
    \n略...
    \n1—— 标准输出(stdout)
    \n在当前目录下,有且只有一个文件名称为 a.txt 的文件,这时我们运行这个命令【ls a.txt】, 就会获得一个标准输出 stdout 的输出结果:a.txt
    \n\"\"
    \n2—— 标准错误(stderr)
    \n在当前目录下,有且只有一个文件名称为 a.txt 的文件,我们运行命令【ls b.txt】,我们就会获得一个标准错误 stderr 的输出结果 “ls:无法访问 b.txt:没有这样的文件或目录”。
    \n\"\"

    \n
  2. \n
  3. \n

    重定向
    \n重定向的符号有两个:> 或 >>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举例如下:

    \n
  4. \n
\n
    \n
  • \n

    重定向标准输出 stdout
    \n\"\"
    \n 如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将 a.txt 打印到屏幕。在紧接的 cat 操作后,可以发现本来应该被输出的内容被记录到 stdout.txt 中。

    \n
  • \n
  • \n

    重定向标准错误 stderr
    \n\"\"
    \n 如上图所示,文件描述符 2,标准错误的重定向也是同样的原理被记录在了文件 stderr.txt 这个文件里面了。

    \n
  • \n
  • \n

    可以将 stderr 单独定向到一个文件,stdout 重定向到另一个文件

    \n
  • \n
\n
ls b.txt 2> stderr.txt 1>stdout.txt
    \n
  • 也可以将 stderr 和 stdout 重定向到同一个文件
  • \n
\n
ls b.txt > output.txt 2>&1
    \n
  • 或采用下面的方法,可以少写几个字,能达到同样的效果
  • \n
\n
ls b.txt &> output.txt
ls b.txt >& output.txt #两个表达式效果一样的
    \n
  1. Linux 特殊文件
    \n /dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null 这个设备通常也被称为位桶(bit bucket)或黑洞。
    \n所以,2>/dev/null 的意思就是将标准错误 stderr 删掉。
  2. \n
\n", "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": "

# 介绍

\n
    \n
  • ip 直连一般都映射了 5055, 但是直接访问 5055 极空间只提供了 http 协议,如果希望使用 https 协议则必须使用其它端口进行访问。以下方案采用 nginx 反向代理实现,端口使用 10000 举例。
    \n\"\"
  • \n
\n

# 配置

\n
    \n
  1. 需要先把 10000 端口在路由器上做好映射。
  2. \n
  3. 证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度)
  4. \n
  5. http 跳转 https 配置
  6. \n
\n
server {\n\t\tif ($scheme = http) {\n\t\t\trewrite ^(.*)$ https://$host$1 permanent;\n\t\t}\n}\n
\n
    \n
  1. web 端口监听配置
  2. \n
\n
#极空间-web\nserver {\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 "max-age=31536000; includeSubdomains; preload";\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 "1; mode=block";\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 ~(.*) "$1; SameSite=strict; secure; httponly";\n\n\t# Path to the root of your installation\n\tlocation / {\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}\n\n\terror_page  500 502 503 504 /500.html;\n\terror_page  400 404 /500.html;\n\tlocation = /500.html {\n\t\troot /usr/share/nginx/html/; #错误html\n\t}\n}\n
\n

# 问题

\n
    \n
  • 需要开启允许嵌套否则登陆后所有应用都是拒绝访问
  • \n
  • 需要配置 proxy_redirect 替换响应 url,否则会跳转到默认 http 协议的 5055 端口
  • \n
  • 如果配置 proxy_redirect 后无效可能需要清除浏览器缓存(F12 - 网络 - 右键点击 url 区域 - 清除浏览器缓存)
  • \n
\n", + "content_html": "

# 介绍

\n
    \n
  • ip 直连一般都映射了 5055, 但是直接访问 5055 极空间只提供了 http 协议,如果希望使用 https 协议则必须使用其它端口进行访问。以下方案采用 nginx 反向代理实现,端口使用 10000 举例。
    \n\"\"
  • \n
\n

# 配置

\n
    \n
  1. 需要先把 10000 端口在路由器上做好映射。
  2. \n
  3. 证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度)
  4. \n
  5. http 跳转 https 配置
  6. \n
\n
server {
\t\tif ($scheme = http) {
\t\t\trewrite ^(.*)$ https://$host$1 permanent;
\t\t}
}
    \n
  1. web 端口监听配置
  2. \n
\n
#极空间 - web
server {
\tlisten 10000 ssl http2; #ipv4
\tlisten [::]:10000 ssl http2; #ipv6
\tserver_name xxx.xxx.com; #填写自己的域名,主域名或者子域名
\t#include /etc/nginx/conf.d/ssl/ssl_common.conf;
\tssl_certificate_key /etc/nginx/conf.d/ssl/xxx.key;  #加密证书
\tssl_certificate /etc/nginx/conf.d/ssl/xxx.pem;  #加密证书
\tssl_session_timeout 1d;
\tssl_session_cache shared:MozSSL:10m;
\tssl_session_tickets off;
\tssl_protocols TLSv1.2 TLSv1.3;
\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;
\tssl_prefer_server_ciphers on;
   #开启 OCSP stapling
\tssl_stapling on;
\tssl_stapling_verify on;
\tclient_max_body_size 128M;
\tadd_header Strict-Transport-Security \"max-age=31536000; includeSubdomains; preload\";
\tproxy_send_timeout 180s; #设置发送超时时间
   proxy_read_timeout 180s; #设置读取超时时间
\t# Prevent Information leaks
\tproxy_hide_header X-Powered-By;
\tproxy_hide_header Server;
\tproxy_hide_header X-AspNetMvc-Version;
\tproxy_hide_header X-AspNet-Version;
\t# http security headers
\tadd_header X-Content-Type-Options nosniff;
\tadd_header Pragma no-cache;
\tadd_header Cache-Control no-store;
\tadd_header X-XSS-Protection \"1; mode=block\";
\tadd_header Referrer-Policy origin-when-cross-origin;
\tadd_header X-Permitted-Cross-Domain-Policies none;
   add_header X-Frame-Options SAMEORIGIN; #允许同域嵌套
\t# Add Security cookie flags
\tproxy_cookie_path ~(.*) \"$1; SameSite=strict; secure; httponly\";
\t# Path to the root of your installation
\tlocation / {
\t\tproxy_intercept_errors on;
\t\tproxy_max_temp_file_size 0;
\t\tproxy_set_header Host $host;
\t\tproxy_set_header X-Real-IP $remote_addr;
\t\tproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
\t\tproxy_set_header X-Forwarded-Proto $scheme;
  
\t\tproxy_pass http://极空间内网ip:5055; #这里设置你自己要跳转的局域网应用;
\t\tproxy_redirect http://域名:5055/home https://域名:10000/home; #极空间在登陆后会跳转到 http 协议的 5055 端口,所以要在此替换为 https 协议的 10000 端口
\t}
\terror_page  500 502 503 504 /500.html;
\terror_page  400 404 /500.html;
\tlocation = /500.html {
\t\troot /usr/share/nginx/html/; #错误 html
\t}
}

# 问题

\n
    \n
  • 需要开启允许嵌套否则登陆后所有应用都是拒绝访问
  • \n
  • 需要配置 proxy_redirect 替换响应 url,否则会跳转到默认 http 协议的 5055 端口
  • \n
  • 如果配置 proxy_redirect 后无效可能需要清除浏览器缓存(F12 - 网络 - 右键点击 url 区域 - 清除浏览器缓存)
  • \n
\n", "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": "

# 介绍

\n
    \n
  • 青龙面板是一个支持 python3、javascript、shell、typescript 的定时任务管理面板。它支持在线管理脚本、环境变量、配置文件,支持在线查看日志及支持多种方式的消息通知。
  • \n
\n

# 安装

\n
    \n
  • 本文使用的是 whyour/qinglong 的镜像。
  • \n
  • 路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。)
    \n\"\"
  • \n
\n
#青龙面板装载路径\n/ql/data\n#博客装载路径(如果你不部署hexo博客可以不用配置)\n/root/.ssh  #ssh证书文件(如果你不用把hexo推送到git上可以不用配置)\n/blog      #hexo博客编译目录\n/blog/nginx_blog  #nginx上放置博客的目录(例如:/Docker/nginx/html/blog)\n
\n
    \n
  • 端口
    \n\"\"
    \n 4000端口是hexo-admin使用的,如果你不用可以不配置
  • \n
  • 环境
    \n\"\"
  • \n
  • 登录
    \n地址:http:// 极空间 IP:5700
    \n 默认账号:admin
    \n 默认密码:admin
  • \n
\n

# 配置

\n
    \n
  • 我主要用青龙面板跑京东的脚本,所以也只介绍相关的配置方法
  • \n
  • 定时任务 (我使用的是 KingRan/KR 的集合库,以下是拉取命令)
    \n ql repo https://github.com/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp|wskey" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
  • \n
  • 定时规则(我是每 3 小时拉取一次,不要拉取太频繁否则可能被封)
    \n 0 */3 * * *
  • \n
  • 环境变量
  • \n
\n
名称:JD_COOKIE\n值:web京东登陆后按F12在网络tab页中的请求内查找cookie,然后复制pt_key=到pt_pin=等\n
\n
    \n
  • 配置文件 (主要修改和添加以下配置)
  • \n
\n
repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可\nRepoFileExtensions="js py ts"\n钉钉(消息推送)\nexport DD_BOT_TOKEN=\nexport DD_BOT_SECRET=\n##开卡\nexport guaopencard_All="true"\nexport guaopencard_addSku_All="true"\nexport guaopencardRun_All="true"\nexport guaopencard_draw="true"\nexport JD_TRY="true"\nexport exjxbeans="true"\nexport DY_OPENALL="true"\n#抽奖\nexport opencard_draw=3\n#开启脚本依赖文件缺失修复\nexport ec_fix_dep="true" \n#开启脚本依赖文件更新\nexport ec_re_dep="true" \n#清空购物车\nexport JD_CART_REMOVE="true"\nexport JD_CART="true"\n#去掉多余的双十一红包脚本\nexport FLCODE=''\n#加购物车抽奖\nexport RUN_CAR=true\n#停用小额免密支付\nexport JD_PAY_CONTRACT=true\n
\n
    \n
  • 依赖管理
  • \n
\n
#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
\n

# 其它

\n
#配置国内源\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 install xxx\n\n#一般出现这种错误:(缺文件)\nError: Cannot find module './xx'\n那就是拉库命令不完整,请检查或复制完整的拉库命\n\n#Python3依赖安装失败修复(基于Faker一键脚本安装的青龙)\ncurl -sS https://bootstrap.pypa.io/get-pip.py | python3\n
\n", + "content_html": "

# 介绍

\n
    \n
  • 青龙面板是一个支持 python3、javascript、shell、typescript 的定时任务管理面板。它支持在线管理脚本、环境变量、配置文件,支持在线查看日志及支持多种方式的消息通知。
  • \n
\n

# 安装

\n
    \n
  • 本文使用的是 whyour/qinglong 的镜像。
  • \n
  • 路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。)
    \n\"\"
  • \n
\n
#青龙面板装载路径
/ql/data
#博客装载路径(如果你不部署 hexo 博客可以不用配置)
/root/.ssh  #ssh 证书文件(如果你不用把 hexo 推送到 git 上可以不用配置)
/blog      #hexo 博客编译目录
/blog/nginx_blog  #nginx 上放置博客的目录(例如:/Docker/nginx/html/blog)
    \n
  • 端口
    \n\"\"
    \n 4000端口是hexo-admin使用的,如果你不用可以不配置
  • \n
  • 环境
    \n\"\"
  • \n
  • 登录
    \n地址:http:// 极空间 IP:5700
    \n 默认账号:admin
    \n 默认密码:admin
  • \n
\n

# 配置

\n
    \n
  • 我主要用青龙面板跑京东的脚本,所以也只介绍相关的配置方法
  • \n
  • 定时任务 (我使用的是 KingRan/KR 的集合库,以下是拉取命令)
    \n ql repo https://github.com/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp|wskey" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
  • \n
  • 定时规则(我是每 3 小时拉取一次,不要拉取太频繁否则可能被封)
    \n 0 */3 * * *
  • \n
  • 环境变量
  • \n
\n
名称:JD_COOKIE
值:web京东登陆后按F12在网络tab页中的请求内查找cookie,然后复制pt_key=到pt_pin=等
    \n
  • 配置文件 (主要修改和添加以下配置)
  • \n
\n
repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可
RepoFileExtensions=\"js py ts\"
钉钉(消息推送)
export DD_BOT_TOKEN=
export DD_BOT_SECRET=
## 开卡
export guaopencard_All=\"true\"
export guaopencard_addSku_All=\"true\"
export guaopencardRun_All=\"true\"
export guaopencard_draw=\"true\"
export JD_TRY=\"true\"
export exjxbeans=\"true\"
export DY_OPENALL=\"true\"
#抽奖
export opencard_draw=3
#开启脚本依赖文件缺失修复
export ec_fix_dep=\"true\" 
#开启脚本依赖文件更新
export ec_re_dep=\"true\" 
#清空购物车
export JD_CART_REMOVE=\"true\"
export JD_CART=\"true\"
#去掉多余的双十一红包脚本
export FLCODE=''
#加购物车抽奖
export RUN_CAR=true
#停用小额免密支付
export JD_PAY_CONTRACT=true
    \n
  • 依赖管理
  • \n
\n
#nodejs 依赖
crypto-js\t
prettytable\t
dotenv\t
jsdom\t
date-fns\t
tough-cookie\t
tslib\t
ws@7.4.3\t
ts-md5\t
jsdom -g\t
jieba\t
fs\t
form-data\t
json5\t
global-agent\t
png-js\t
@types/node\t
require\t
typescript\t
js-base64\t
axios
#pythone 依赖
requests\t
canvas\t
ping3\t
jieba\t
aiohttp\t
PyExecJS
#Linux 依赖
bizCode
bizMsg
lxml

# 其它

\n
#配置国内源
pip config --global set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config --global set install.trusted-host https://mirrors.aliyun.com
#升级 pip
pip install --upgrade pip
#更新青龙
ql update
#已知要安装的依赖(不安装部分脚本任务会失败)
pnpm install ds
#一键安装所有依赖(基于 Faker 一键脚本安装的青龙
可通过执行/ql/data/scripts下的QLDependency.sh脚本安装,如脚本已经更新则通过下面命令执行
curl -fsSL https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh | sh
#一般出现这种错误:(缺依赖)
Error: Cannot find module 'xx'
执行pnpm install xxx
#一般出现这种错误:(缺文件)
Error: Cannot find module './xx'
那就是拉库命令不完整,请检查或复制完整的拉库命
#Python3 依赖安装失败修复(基于 Faker 一键脚本安装的青龙)
curl -sS https://bootstrap.pypa.io/get-pip.py | python3
", "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": "
    \n
  • valine 评论需要 LeanCloud 支持
  • \n
\n

# LeanCloud 注册

\n
    \n
  1. LeanCloud 网站完成注册。
  2. \n
  3. 创建应用。
    \n\"\"
  4. \n
  5. 名称随便取,方案看自己选择。开发版免费但是有限制,商业版收费无限制。
    \n\"\"
  6. \n
  7. 点击配置按钮进行配置。
    \n\"\"
  8. \n
  9. 点击设置 - 应用凭证可获取 App ID 和 App Key
    \n\"\"
  10. \n
  11. 点击设置 - 安全中心根据自己的需求配置
    \n\"\"
  12. \n
\n

# 修改 Theme.Shoka 配置

\n
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: "var(--color-orange)"\n    friend: "var(--color-aqua)"\n    investor: "var(--color-pink)"\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
\n", + "content_html": "
    \n
  • valine 评论需要 LeanCloud 支持
  • \n
\n

# LeanCloud 注册

\n
    \n
  1. LeanCloud 网站完成注册。
  2. \n
  3. 创建应用。
    \n\"\"
  4. \n
  5. 名称随便取,方案看自己选择。开发版免费但是有限制,商业版收费无限制。
    \n\"\"
  6. \n
  7. 点击配置按钮进行配置。
    \n\"\"
  8. \n
  9. 点击设置 - 应用凭证可获取 App ID 和 App Key
    \n\"\"
  10. \n
  11. 点击设置 - 安全中心根据自己的需求配置
    \n\"\"
  12. \n
\n

# 修改 Theme.Shoka 配置

\n
valine:
  appId: 粘贴5中获取的App ID #Your_appId
  appKey: 粘贴5中获取的App Key #Your_appkey
  placeholder: ヽ(○´∀`)ノ♪欢迎畅所欲言 # Comment box placeholder
  avatar: mp #默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro
  pageSize: 10 # Pagination size
  lang: zh-CN
  visitor: true # Article reading statistic 这个要设置为 false,以免与 leancloud_visitors 突冲 
  NoRecordIP: false # Whether to record the commenter IP
  serverURLs: # When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)
  powerMode: true
  tagMeta:
    visitor: 新朋友
    master: 博主
    friend: 小伙伴
    investor: 金主粑粑
  tagColor:
    master: \"var(--color-orange)\"
    friend: \"var(--color-aqua)\"
    investor: \"var(--color-pink)\"
  tagMember:
    master:
      # - hash of master@email.com
      # - hash of master2@email.com
    friend:
      # - hash of friend@email.com
      # - hash of friend2@email.com
    investor:
      # - hash of investor1@email.com
", "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": "

# 介绍

\n
    \n
  • mariadb 属于 mysql 的一个分支,完全兼容 mysql,使用方式和 mysql 无区别。
  • \n
\n

# 安装

\n
    \n
  • 本文介绍安装的镜像为 linuxserver_mariadb 的 10.5.13-r0-ls45,原则上使用最新版即可
  • \n
  • 配置文件映射
    \n\"\"
  • \n
  • 端口
    \n\"\"
  • \n
  • 环境(MYSQL_ROOT_PASSWORD 为数据库 root 用户密码)
    \n\"\"
  • \n
  • 到此已经可以在内网使用了,连接方法同 mysql 一致
  • \n
\n

# 配置

\n
    \n
  • 此处配置为 nginx 反向代理,配置完成后可在外网连接访问
  • \n
\n
stream {\n\t\n\t#极空间-docker-mariadb\n\tupstream mariadb {\n\t\thash $remote_addr consistent;\n\t\tserver mariadb的ip:端口;\n\t}\n\n\tserver {\n\t\tlisten 监听端口;\n\n\t\tproxy_connect_timeout 30s;\n\t\tproxy_timeout 300s;\n\t\tproxy_pass mariadb;\n\t}\n    \n}\n
\n", + "content_html": "

# 介绍

\n
    \n
  • mariadb 属于 mysql 的一个分支,完全兼容 mysql,使用方式和 mysql 无区别。
  • \n
\n

# 安装

\n
    \n
  • 本文介绍安装的镜像为 linuxserver_mariadb 的 10.5.13-r0-ls45,原则上使用最新版即可
  • \n
  • 配置文件映射
    \n\"\"
  • \n
  • 端口
    \n\"\"
  • \n
  • 环境(MYSQL_ROOT_PASSWORD 为数据库 root 用户密码)
    \n\"\"
  • \n
  • 到此已经可以在内网使用了,连接方法同 mysql 一致
  • \n
\n

# 配置

\n
    \n
  • 此处配置为 nginx 反向代理,配置完成后可在外网连接访问
  • \n
\n
stream {
\t
\t#极空间 - docker-mariadb
\tupstream mariadb {
\t\thash $remote_addr consistent;
\t\tserver mariadb的ip:端口;
\t}
\tserver {
\t\tlisten 监听端口;
\t\tproxy_connect_timeout 30s;
\t\tproxy_timeout 300s;
\t\tproxy_pass mariadb;
\t}
    
}
", "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": "

# 安装

\n
    \n
  • 下载最新版 wordpress 镜像,如极空间无法下载,可到 passerma 网站下载。
  • \n
  • 需要先在 mysql 中创建给 wordpress 使用的库。
  • \n
  • 文件路径映射(目前极空间不能映射到高速盘,否则无法启动)。
    \n\"\"
  • \n
  • 端口映射。
    \n\"\"
  • \n
  • 通过映射的端口访问安装界面(一定要通过最终访问的页面进行安装,否则修改配置比较麻烦。如最终是域名访问,就先把域名解析代理等先配置好,再通过域名访问安装)。
  • \n
\n

# 配置

\n
    \n
  • 如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。
  • \n
\n
if((!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) {\n    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];\n    $_SERVER['HTTPS'] = 'on';\n}\n
\n
    \n
  • 后台安装插件时如果跳转到 ftp 配置,则需要在 wp-config.php 中加入以下代码,并到 wp-content 目录下创建 tmp 目录,最后还需要给 tmp 目录赋予读写权限。
  • \n
\n
define('WP_TEMP_DIR', ABSPATH.'wp-content/tmp');\ndefine('FS_METHOD', 'direct');\ndefine('FS_CHMOD_DIR', 0777);\ndefine('FS_CHMOD_FILE', 0777);\n
\n
    \n
  • 目录和文件所有者、组会自动变为 root,目前我是通过访问页面时通过命令修正。暂时未发现问题,如果不行则只能通过定时任务来定时修正了。需要在 wp-config.php 中加入以下代码。
  • \n
\n
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
\n
    \n
  • 隐藏后台访问需要在 wp-login.php 中加入以下代码,key、value 和 https://www.xxx.com/ 需要修改为自己的。修改后只能通过 https://www.xxx.com/wp-login.php?key=value 访问,其它访问需要登录的页面都会跳转到配置的 https://www.xxx.com/ 地址。
  • \n
\n
if($_GET['key'] != 'value') {\n\theader('Location: https://www.xxx.com/');\n}\n
\n", + "content_html": "

# 安装

\n
    \n
  • 下载最新版 wordpress 镜像,如极空间无法下载,可到 passerma 网站下载。
  • \n
  • 需要先在 mysql 中创建给 wordpress 使用的库。
  • \n
  • 文件路径映射(目前极空间不能映射到高速盘,否则无法启动)。
    \n\"\"
  • \n
  • 端口映射。
    \n\"\"
  • \n
  • 通过映射的端口访问安装界面(一定要通过最终访问的页面进行安装,否则修改配置比较麻烦。如最终是域名访问,就先把域名解析代理等先配置好,再通过域名访问安装)。
  • \n
\n

# 配置

\n
    \n
  • 如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。
  • \n
\n
if((!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
    $_SERVER['HTTPS'] = 'on';
}
    \n
  • 后台安装插件时如果跳转到 ftp 配置,则需要在 wp-config.php 中加入以下代码,并到 wp-content 目录下创建 tmp 目录,最后还需要给 tmp 目录赋予读写权限。
  • \n
\n
define('WP_TEMP_DIR', ABSPATH.'wp-content/tmp');
define('FS_METHOD', 'direct');
define('FS_CHMOD_DIR', 0777);
define('FS_CHMOD_FILE', 0777);
    \n
  • 目录和文件所有者、组会自动变为 root,目前我是通过访问页面时通过命令修正。暂时未发现问题,如果不行则只能通过定时任务来定时修正了。需要在 wp-config.php 中加入以下代码。
  • \n
\n
chown('/var/www/html', 'www-data');
chgrp('/var/www/html', 'www-data');
chmod('/var/www/html/wp-content/plugins', 0777);
chmod('/var/www/html/wp-content/themes', 0777);
chmod('/var/www/html/wp-content/tmp', 0777);
    \n
  • 隐藏后台访问需要在 wp-login.php 中加入以下代码,key、value 和 https://www.xxx.com/ 需要修改为自己的。修改后只能通过 https://www.xxx.com/wp-login.php?key=value 访问,其它访问需要登录的页面都会跳转到配置的 https://www.xxx.com/ 地址。
  • \n
\n
if($_GET['key'] != 'value') {
\theader('Location: https://www.xxx.com/');
}
", "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": "

# 监控端服务安装与配置

\n
    \n
  1. nagios 需要安装主程序 core 和 nrpe(nagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见官网
  2. \n
  3. nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处
  4. \n
  5. etc/objects/commands.cfg 用于保存 nagios 默认监控命令
  6. \n
  7. etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加)
    \n\"\"
  8. \n
  9. etc/objects/hosts 目录下配置需要被监控的主机信息
    \n\"\"
  10. \n
  11. etc/objects/servers 目录下配置需要在被监控主机上执行的监控命令(第 4 项中的命令)
    \n\"\"
  12. \n
\n

# 被监控端服务安装与配置

\n
    \n
  1. 被监控端需要安装 nrpe
  2. \n
  3. 被监控端需要把监控端的命令写入到 nrpe 的配置文件中
  4. \n
  5. 被监控端需要把命令执行脚本放入 libexec 目录中
  6. \n
  7. 被监控端自动安装脚本(可借鉴)
  8. \n
\n
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{\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 "echo >> /etc/services"\n\tsudo sh -c "sudo echo '# Nagios services' >> /etc/services"\n\tsudo sh -c "sudo echo 'nrpe    5666/tcp' >> /etc/services"\n\t\n\t#判断系统是高版本还是低版本\n\tVERSION=`lsb_release -r --short`\n\tIS_LOW_VERSION=`echo "$VERSION < 15" | 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 "echo '[NRPE]' > /etc/ufw/applications.d/nagios"\n\tsudo sh -c "echo 'title=Nagios Remote Plugin Executor' >> /etc/ufw/applications.d/nagios"\n\tsudo sh -c "echo 'description=Allows remote execution of Nagios plugins' >> /etc/ufw/applications.d/nagios"\n\tsudo sh -c "echo 'ports=5666/tcp' >> /etc/ufw/applications.d/nagios"\n\tsudo ufw allow NRPE\n\tsudo ufw reload\n\t\n\tsudo sh -c "sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"\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 "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' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \\$ARG1\\$' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tNETWORK_INDEX=1\n\tfor NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\\t]*//g' | sed 's/[:]*$//g'`;do\n\t\t\tif [ $NETWORK_NAME != 'lo' ]; then\n\t\t\t\t\tsudo sh -c "echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg"\n\t\t\t\t\tNETWORK_INDEX=`expr $NETWORK_INDEX + 1 `\n\t\t\tfi\n\tdone\n\t\n\tif [ $IS_LOW_VERSION = 1 ]; then\n\t\t#低版本\n\t\tsudo start nrpe\n\telse\n\t\t#高版本\n\t\tsudo systemctl start nrpe.service\n\tfi\n}\n\n#安装centos版本\nINSTALL_CENTOS()\n{\n\tyum install -y gcc glibc glibc-common openssl openssl-devel perl wget\n\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/CentOS/nrpe.tar.gz ./\n\ttar xzf nrpe.tar.gz\n\n\tcd /tmp/nrpe-nrpe-4.0.3/\n\t./configure --enable-command-args\n\tmake all\n\n\tmake install-groups-users\n\n\tmake install\n\n\tmake install-config\n\n\techo >> /etc/services\n\techo '# Nagios services' >> /etc/services\n\techo 'nrpe    5666/tcp' >> /etc/services\n\t\n\t#判断系统是高版本还是低版本\n\tVERSION=`rpm -q centos-release|cut -d- -f3`\n\t#安装bc命令\n\tyum -y install bc\n\tIS_LOW_VERSION=`echo "$VERSION < 7" | bc`\n\n\tif [ $IS_LOW_VERSION = 1 ]; then\n\t\t#低版本\n\t\tmake install-init\n\t\t\n\t\tiptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT\n\t\tservice iptables save\n\t\tip6tables -I INPUT -p tcp --destination-port 5666 -j ACCEPT\n\t\tservice ip6tables save\n\telse\n\t\t#高版本\n\t\tmake install-init\n\t\tsystemctl enable nrpe.service\n\t\t\n\t\tfirewall-cmd --zone=public --add-port=5666/tcp\n\t\tfirewall-cmd --zone=public --add-port=5666/tcp --permanent\n\tfi\n\t\n\tsudo sh -c "sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"\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 "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' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \\$ARG1\\$' >> /usr/local/nagios/etc/nrpe.cfg"\n\tsudo sh -c "echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"\n\tNETWORK_INDEX=1\n\tfor NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\\t]*//g' | sed 's/[:]*$//g'`;do\n\t\t\tif [ $NETWORK_NAME != 'lo' ]; then\n\t\t\t\t\tsudo sh -c "echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg"\n\t\t\t\t\tNETWORK_INDEX=`expr $NETWORK_INDEX + 1 `\n\t\t\tfi\n\tdone\n\t\n\tif [ $IS_LOW_VERSION = 1 ]; then\n\t\t#低版本\n\t\tif [ $(echo "$VERSION < 6" | bc) -eq 1 ]; then\n\t\t\tservice nrpe start\n\t\telse\n\t\t\tstart nrpe\n\t\tfi\n\telse\n\t\t#高版本\n\t\tsystemctl start nrpe.service\n\tfi\n}\n\n#安装其它版本\nINSTALL_OTHER()\n{\n\techo "Not supported at the moment."\n}\n\n#根据不同系统安装不同版本\nINSTALL()\n{\n\tif grep -Eqii "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then\n\t\tDISTRO='CentOS'\n        PM='yum'\n\t\tINSTALL_CENTOS\n    elif grep -Eqi "Red Hat Enterprise Linux Server" /etc/issue || grep -Eq "Red Hat Enterprise Linux Server" /etc/*-release; then\n        DISTRO='RHEL'\n        PM='yum'\n\t\tINSTALL_OTHER\n    elif grep -Eqi "Aliyun" /etc/issue || grep -Eq "Aliyun" /etc/*-release; then\n        DISTRO='Aliyun'\n        PM='yum'\n\t\tINSTALL_OTHER\n    elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; then\n        DISTRO='Fedora'\n        PM='yum'\n\t\tINSTALL_OTHER\n    elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then\n        DISTRO='Debian'\n        PM='apt'\n\t\tINSTALL_OTHER\n    elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then\n        DISTRO='Ubuntu'\n        PM='apt'\n\t\tINSTALL_UBUNTU\n    elif grep -Eqi "Raspbian" /etc/issue || grep -Eq "Raspbian" /etc/*-release; then\n        DISTRO='Raspbian'\n        PM='apt'\n\t\tINSTALL_OTHER\n    else\n        echo "unknow linux."\n        exit 1\n    fi\n    echo $DISTRO\n}\n\nINSTALL\n\nexit 0\n
\n

# 登录

\n

地址:http:// 服务器 IP/nagios
\n 用户名:nagiosadmin
\n 密码:nagiosadmin

\n

# 常见问题

\n
    \n
  1. 监控日志未写入 mysql(可能是 ndoutils 服务不正常导致)。采用以下脚本命令解决
  2. \n
\n
#!/bin/bash\nsudo rm -f /usr/local/nagios/var/ndo2db.pid\nsudo rm -f /usr/local/nagios/var/ndo.sock\nsudo systemctl restart ndo2db.service\nsudo systemctl status ndo2db.service\n
\n", + "content_html": "

# 监控端服务安装与配置

\n
    \n
  1. nagios 需要安装主程序 core 和 nrpe(nagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见官网
  2. \n
  3. nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处
  4. \n
  5. etc/objects/commands.cfg 用于保存 nagios 默认监控命令
  6. \n
  7. etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加)
    \n\"\"
  8. \n
  9. etc/objects/hosts 目录下配置需要被监控的主机信息
    \n\"\"
  10. \n
  11. etc/objects/servers 目录下配置需要在被监控主机上执行的监控命令(第 4 项中的命令)
    \n\"\"
  12. \n
\n

# 被监控端服务安装与配置

\n
    \n
  1. 被监控端需要安装 nrpe
  2. \n
  3. 被监控端需要把监控端的命令写入到 nrpe 的配置文件中
  4. \n
  5. 被监控端需要把命令执行脚本放入 libexec 目录中
  6. \n
  7. 被监控端自动安装脚本(可借鉴)
  8. \n
\n
1、请先修改脚本中的服务端IP。
2、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令,弹出选择窗口后选择no。
3、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录,目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。
#!/bin/bash
#服务端 ip
SERVER_IP=10.10.10.121
#安装目录
INSTALL_HOME=`pwd`
#安装 ubuntu 版本
INSTALL_UBUNTU()
{
\tsudo apt-get update
\tsudo apt-get install -y autoconf automake gcc libc6 libmcrypt-dev make libssl-dev wget openssl
\t
\tcd /tmp
\t#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz
\tcp $INSTALL_HOME/Ubuntu/nrpe.tar.gz ./
\ttar xzf nrpe.tar.gz
\tcd /tmp/nrpe-nrpe-4.0.3/
\tsudo ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/
\tsudo make all
\tsudo make install-groups-users
\tsudo make install
\tsudo make install-config
\tsudo sh -c \"echo >> /etc/services\"
\tsudo sh -c \"sudo echo '# Nagios services' >> /etc/services\"
\tsudo sh -c \"sudo echo 'nrpe    5666/tcp' >> /etc/services\"
\t
\t#判断系统是高版本还是低版本
\tVERSION=`lsb_release -r --short`
\tIS_LOW_VERSION=`echo \"$VERSION < 15\" | bc`
\tif [ $IS_LOW_VERSION = 1 ]; then
\t\t#低版本
\t\tsudo make install-init
\telse
\t\t#高版本
\t\tsudo make install-init
\t\tsudo systemctl enable nrpe.service
\tfi
\t
\tsudo mkdir -p /etc/ufw/applications.d
\tsudo sh -c \"echo '[NRPE]' > /etc/ufw/applications.d/nagios\"
\tsudo sh -c \"echo 'title=Nagios Remote Plugin Executor' >> /etc/ufw/applications.d/nagios\"
\tsudo sh -c \"echo 'description=Allows remote execution of Nagios plugins' >> /etc/ufw/applications.d/nagios\"
\tsudo sh -c \"echo 'ports=5666/tcp' >> /etc/ufw/applications.d/nagios\"
\tsudo ufw allow NRPE
\tsudo ufw reload
\t
\tsudo sh -c \"sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg\"
\t
\tcd $INSTALL_HOME
\tsudo cp ./sh/* /usr/local/nagios/libexec/
\tsudo chmod +xr /usr/local/nagios/libexec/*
\t
\tsudo sh -c \"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' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \\$ARG1\\$' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg\"
\tNETWORK_INDEX=1
\tfor NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\\t]*//g' | sed 's/[:]*$//g'`;do
\t\t\tif [ $NETWORK_NAME != 'lo' ]; then
\t\t\t\t\tsudo sh -c \"echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg\"
\t\t\t\t\tNETWORK_INDEX=`expr $NETWORK_INDEX + 1 `
\t\t\tfi
\tdone
\t
\tif [ $IS_LOW_VERSION = 1 ]; then
\t\t#低版本
\t\tsudo start nrpe
\telse
\t\t#高版本
\t\tsudo systemctl start nrpe.service
\tfi
}
#安装 centos 版本
INSTALL_CENTOS()
{
\tyum install -y gcc glibc glibc-common openssl openssl-devel perl wget
\tcd /tmp
\t#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz
\tcp $INSTALL_HOME/CentOS/nrpe.tar.gz ./
\ttar xzf nrpe.tar.gz
\tcd /tmp/nrpe-nrpe-4.0.3/
\t./configure --enable-command-args
\tmake all
\tmake install-groups-users
\tmake install
\tmake install-config
\techo >> /etc/services
\techo '# Nagios services' >> /etc/services
\techo 'nrpe    5666/tcp' >> /etc/services
\t
\t#判断系统是高版本还是低版本
\tVERSION=`rpm -q centos-release|cut -d- -f3`
\t#安装 bc 命令
\tyum -y install bc
\tIS_LOW_VERSION=`echo \"$VERSION < 7\" | bc`
\tif [ $IS_LOW_VERSION = 1 ]; then
\t\t#低版本
\t\tmake install-init
\t\t
\t\tiptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
\t\tservice iptables save
\t\tip6tables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
\t\tservice ip6tables save
\telse
\t\t#高版本
\t\tmake install-init
\t\tsystemctl enable nrpe.service
\t\t
\t\tfirewall-cmd --zone=public --add-port=5666/tcp
\t\tfirewall-cmd --zone=public --add-port=5666/tcp --permanent
\tfi
\t
\tsudo sh -c \"sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg\"
\t
\tcd $INSTALL_HOME
\tsudo cp ./sh/* /usr/local/nagios/libexec/
\tsudo chmod +xr /usr/local/nagios/libexec/*
\t
\tsudo sh -c \"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' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \\$ARG1\\$' >> /usr/local/nagios/etc/nrpe.cfg\"
\tsudo sh -c \"echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg\"
\tNETWORK_INDEX=1
\tfor NETWORK_NAME in `cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\\t]*//g' | sed 's/[:]*$//g'`;do
\t\t\tif [ $NETWORK_NAME != 'lo' ]; then
\t\t\t\t\tsudo sh -c \"echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' >> /usr/local/nagios/etc/nrpe.cfg\"
\t\t\t\t\tNETWORK_INDEX=`expr $NETWORK_INDEX + 1 `
\t\t\tfi
\tdone
\t
\tif [ $IS_LOW_VERSION = 1 ]; then
\t\t#低版本
\t\tif [ $(echo \"$VERSION < 6\" | bc) -eq 1 ]; then
\t\t\tservice nrpe start
\t\telse
\t\t\tstart nrpe
\t\tfi
\telse
\t\t#高版本
\t\tsystemctl start nrpe.service
\tfi
}
#安装其它版本
INSTALL_OTHER()
{
\techo \"Not supported at the moment.\"
}
#根据不同系统安装不同版本
INSTALL()
{
\tif grep -Eqii \"CentOS\" /etc/issue || grep -Eq \"CentOS\" /etc/*-release; then
\t\tDISTRO='CentOS'
        PM='yum'
\t\tINSTALL_CENTOS
    elif grep -Eqi \"Red Hat Enterprise Linux Server\" /etc/issue || grep -Eq \"Red Hat Enterprise Linux Server\" /etc/*-release; then
        DISTRO='RHEL'
        PM='yum'
\t\tINSTALL_OTHER
    elif grep -Eqi \"Aliyun\" /etc/issue || grep -Eq \"Aliyun\" /etc/*-release; then
        DISTRO='Aliyun'
        PM='yum'
\t\tINSTALL_OTHER
    elif grep -Eqi \"Fedora\" /etc/issue || grep -Eq \"Fedora\" /etc/*-release; then
        DISTRO='Fedora'
        PM='yum'
\t\tINSTALL_OTHER
    elif grep -Eqi \"Debian\" /etc/issue || grep -Eq \"Debian\" /etc/*-release; then
        DISTRO='Debian'
        PM='apt'
\t\tINSTALL_OTHER
    elif grep -Eqi \"Ubuntu\" /etc/issue || grep -Eq \"Ubuntu\" /etc/*-release; then
        DISTRO='Ubuntu'
        PM='apt'
\t\tINSTALL_UBUNTU
    elif grep -Eqi \"Raspbian\" /etc/issue || grep -Eq \"Raspbian\" /etc/*-release; then
        DISTRO='Raspbian'
        PM='apt'
\t\tINSTALL_OTHER
    else
        echo \"unknow linux.\"
        exit 1
    fi
    echo $DISTRO
}
INSTALL
exit 0

# 登录

\n

地址:http:// 服务器 IP/nagios
\n 用户名:nagiosadmin
\n 密码:nagiosadmin

\n

# 常见问题

\n
    \n
  1. 监控日志未写入 mysql(可能是 ndoutils 服务不正常导致)。采用以下脚本命令解决
  2. \n
\n
#!/bin/bash
sudo rm -f /usr/local/nagios/var/ndo2db.pid
sudo rm -f /usr/local/nagios/var/ndo.sock
sudo systemctl restart ndo2db.service
sudo systemctl status ndo2db.service
", "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": "

# 主服务

\n
    \n
  1. 基础配置
  2. \n
\n
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
\n
sysctl vm.overcommit_memory=1 (立即生效)\n修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)\n
\n
    \n
  1. 禁用透明大页(影响性能)
  2. \n
\n
需要sudo su 切换到root身份(sudo 没用)\necho never > /sys/kernel/mm/transparent_hugepage/enabled\n修改/etc/init.d/redis-server,加入/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled\n
\n
    \n
  1. 修复 TCP 警告
  2. \n
\n
sysctl net.core.somaxconn=1024(立即生效)\n修改/etc/sysctl.conf添加net.core.somaxconn=1024\n
\n
    \n
  1. 客户端缓冲区限制
  2. \n
\n
客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。\n可以三种不同客户端的方式进行设置:\nnormal ->  正常客户端\nslave  -> slave 和 MONITOR 客户端\npubsub ->  至少订阅了一个 pubsub channel 或 pattern 的客户端\n语法 :\nclient-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>\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
\n
    \n
  1. 持久化配置
  2. \n
\n
---关闭RDB持久化---\nsave ""\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设置的越大,slave可以失连的时间就越长。\nrepl-backlog-ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。\nslave-priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。\nmin-slaves-to-write 3\nmin-slaves-max-lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。\n
\n

# 从服务

\n
基本配置同主服务一致\nslaveof 127.0.0.1 6379(主redis的ip和端口)\nmasterauth 123456 (主redis的密码)\n可以通过slaveof no one命令将Slaver升级为Maste\nbgsave (持久化命令,在redis-cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / -name dump.rd查找)\n
\n

# 相关命令

\n
看状态\nsudo /etc/init.d/redis-server status\n看端口\nnetstat -nlt|grep 6379\n外部连接\nsudo vim /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉\n重启\nsudo server redis-server restart\n查看内存\nfree -m\n批量删除指定key\nredis-cli -n 6 scan 0 match *2020-06-12 count 10000| xargs redis-cli -n 6 del\n大量删除key后快速释放被占用的内存\nmemory purge\n
\n

# 问题解决

\n
写入问题\nredis-cli config set stop-writes-on-bgsave-error no\nsudo vim /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no\n修改系统 sudo vim /etc/sysctl.conf加入vm.overcommit_memory=1\nsudo sysctl vm.overcommit_memory=1\n
\n", + "content_html": "

# 主服务

\n
    \n
  1. 基础配置
  2. \n
\n
port 6379
requirepass 123456(密码,建议不设置)
vm-enabled no (虚拟内存,内存够的情况下可以不使用)
maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)
bind 127.0.0.1 (注释掉,否则不能外部连接)
rdbchecksum no(持久化数据检查)
list-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)
list-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)
sysctl vm.overcommit_memory=1 (立即生效)
修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)
    \n
  1. 禁用透明大页(影响性能)
  2. \n
\n
需要sudo su 切换到root身份(sudo 没用)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
修改/etc/init.d/redis-server,加入/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled
    \n
  1. 修复 TCP 警告
  2. \n
\n
sysctl net.core.somaxconn=1024(立即生效)
修改/etc/sysctl.conf添加net.core.somaxconn=1024
    \n
  1. 客户端缓冲区限制
  2. \n
\n
客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。
可以三种不同客户端的方式进行设置:
normal ->  正常客户端
slave  -> slave 和 MONITOR 客户端
pubsub ->  至少订阅了一个 pubsub channel 或 pattern 的客户端
语法 :
client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>
一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。
例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,
只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。
把硬限制和软限制都设置为 0 来禁用该特性
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 5gb 512mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
    \n
  1. 持久化配置
  2. \n
\n
---关闭RDB持久化---
save \"\"
默认配置如下:
save 900 1 #900 秒内有 1 次更新就持久化
save 300 10 #300 秒内有 10 次更新就持久化
save 60 10000 #60 秒内有 10000 次更新就持久化
---关闭RDB持久化---
主从同步支持两种策略,即disk和socket方式。
新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。
一个RDB文件从master端传到slave端,分为两种情况:
1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;
2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。
repl-diskless-sync no 默认不使用diskless同步方式
repl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒
repl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒
repl-timeout 3600 设置超时时间
repl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。
repl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。
backlog设置的越大,slave可以失连的时间就越长。
repl-backlog-ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。
slave-priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。
min-slaves-to-write 3
min-slaves-max-lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。

# 从服务

\n
基本配置同主服务一致
slaveof 127.0.0.1 6379(主redis的ip和端口)
masterauth 123456 (主redis的密码)
可以通过slaveof no one命令将Slaver升级为Maste
bgsave (持久化命令,在redis-cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / -name dump.rd查找)

# 相关命令

\n
看状态
sudo /etc/init.d/redis-server status
看端口
netstat -nlt|grep 6379
外部连接
sudo vim /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉
重启
sudo server redis-server restart
查看内存
free -m
批量删除指定key
redis-cli -n 6 scan 0 match *2020-06-12 count 10000| xargs redis-cli -n 6 del
大量删除key后快速释放被占用的内存
memory purge

# 问题解决

\n
写入问题
redis-cli config set stop-writes-on-bgsave-error no
sudo vim /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no
修改系统 sudo vim /etc/sysctl.conf加入vm.overcommit_memory=1
sudo sysctl vm.overcommit_memory=1
", "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": "

# 使用场景

\n

  在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:

\n
server {\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 ~(.*) "$1; SameSite=None; secure; httponly";\n\n\tlocation / {\n\t\t#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)\n\t\tadd_header X-Frame-Options ALLOWALL; #允许被所有域名镶套\n\t\tproxy_pass http://xxx;\n\t}\n}\n
\n", + "content_html": "

# 使用场景

\n

  在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:

\n
server {
\tlisten port ssl http2;
\tserver_name xxx.com;
\tssl_certificate_key /xxx.key;
\tssl_certificate /xxx.pem;
\tproxy_cookie_path ~(.*) \"$1; SameSite=None; secure; httponly\";
\tlocation / {
\t\t#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)
\t\tadd_header X-Frame-Options ALLOWALL; #允许被所有域名镶套
\t\tproxy_pass http://xxx;
\t}
}
", "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": "

# nginx 负载均衡配置

\n
    \n
  1. 轮询(默认)
  2. \n
\n

  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

\n
upstream my_server {\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n}\n\nserver {\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / {\n\t\tproxy_pass http://my_server;\n\t}\n\t\n}\n
\n
    \n
  1. weight 权重策略
  2. \n
\n

  weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。

\n
upstream my_server {\n\tserver 192.168.0.2:8080 weight=1;\n\tserver 192.168.0.3:8080 weight=2;\n}\n\nserver {\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / {\n\t\tproxy_pass http://my_server;\n\t}\n\t\n}\n
\n
    \n
  1. ip_hash
  2. \n
\n

  每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

\n
upstream my_server {\n\tip_hash;\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n}\n\nserver {\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / {\n\t\tproxy_pass http://my_server;\n\t}\n\t\n}\n
\n
    \n
  1. fair (第三方)
  2. \n
\n

  按后端服务器的响应时间来分配请求,响应时间短的优先分配。

\n
upstream my_server {\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n\tfair;\n}\n\nserver {\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / {\n\t\tproxy_pass http://my_server;\n\t}\n\t\n}\n
\n
    \n
  1. 动静分离
  2. \n
\n

  把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。

\n", + "content_html": "

# nginx 负载均衡配置

\n
    \n
  1. 轮询(默认)
  2. \n
\n

  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

\n
upstream my_server {
\tserver 192.168.0.2:8080;
\tserver 192.168.0.3:8080;
}
server {
\tlisten 80;
\tserver_name 192.168.0.1;
\t# Path to the root of your installation
\tlocation / {
\t\tproxy_pass http://my_server;
\t}
\t
}
    \n
  1. weight 权重策略
  2. \n
\n

  weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。

\n
upstream my_server {
\tserver 192.168.0.2:8080 weight=1;
\tserver 192.168.0.3:8080 weight=2;
}
server {
\tlisten 80;
\tserver_name 192.168.0.1;
\t# Path to the root of your installation
\tlocation / {
\t\tproxy_pass http://my_server;
\t}
\t
}
    \n
  1. ip_hash
  2. \n
\n

  每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

\n
upstream my_server {
\tip_hash;
\tserver 192.168.0.2:8080;
\tserver 192.168.0.3:8080;
}
server {
\tlisten 80;
\tserver_name 192.168.0.1;
\t# Path to the root of your installation
\tlocation / {
\t\tproxy_pass http://my_server;
\t}
\t
}
    \n
  1. fair (第三方)
  2. \n
\n

  按后端服务器的响应时间来分配请求,响应时间短的优先分配。

\n
upstream my_server {
\tserver 192.168.0.2:8080;
\tserver 192.168.0.3:8080;
\tfair;
}
server {
\tlisten 80;
\tserver_name 192.168.0.1;
\t# Path to the root of your installation
\tlocation / {
\t\tproxy_pass http://my_server;
\t}
\t
}
    \n
  1. 动静分离
  2. \n
\n

  把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。

\n", "tags": [ "Linux", "服务", diff --git a/index.html b/index.html index 080337b29..7657c8b40 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

文章列表

6.1k 6 分钟

# 引言 所有配置方法和介绍均来至于网络搜索汇总,主要用于方便后期巩固学习。 # 何为反向代理 在介绍反向代理之前,先来了解一下正向代理。 __正向代理:__如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问...
1.6k 1 分钟

# 描述 今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。 # 过程 卸载旧的 nodejs(此命令会卸载掉相关依赖包) sudo apt autoremove --purge nodejs 安装 NodeJS curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - &amp;&amp; sudo...
1.1k 1 分钟

# 区别: 2&gt;/dev/null 意思就是把错误输出到 “黑洞” &gt;/dev/null 2&gt;&amp;1 默认情况是 1,也就是等同于 1&gt;/dev/null 2&gt;&amp;1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞” 2&gt;&amp;1 &gt;/dev/null 意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕 #...
68 1 分钟

# 360 独立版小工具 360 全家桶众说纷纭但工具箱还是挺实用的,这波小工具可以单独下载使用,有需要的朋友赶紧下载吧! 下载地址 # 部分工具截图
115 1 分钟

# 介绍 当你经常需要在家远程到公司进行办公,或者开启了很多临时文件、文档、软件需要等到第二天继续之前的工作时,结果系统自行更新并重启了。是不是会让你非常郁闷。关闭系统自行更新就可以轻松解决此类问题。 # 下载 win10 / win11 / 本地
2.4k 2 分钟

# 介绍 ip 直连一般都映射了 5055, 但是直接访问 5055 极空间只提供了 http 协议,如果希望使用 https 协议则必须使用其它端口进行访问。以下方案采用 nginx 反向代理实现,端口使用 10000 举例。 # 配置 需要先把 10000 端口在路由器上做好映射。 证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度) http 跳转 https 配置 server &#123; if ($scheme = http) &#123; rewrite ^(.*)$ https://$host$1...
2.3k 2 分钟

# 介绍 青龙面板是一个支持 python3、javascript、shell、typescript 的定时任务管理面板。它支持在线管理脚本、环境变量、配置文件,支持在线查看日志及支持多种方式的消息通知。 # 安装 本文使用的是 whyour/qinglong 的镜像。 路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。) #青龙面板装载路径 /ql/data #博客装载路径(如果你不部署hexo博客可以不用配置) /root/.ssh...
959 1 分钟

valine 评论需要 LeanCloud 支持 # LeanCloud 注册 到 LeanCloud 网站完成注册。 创建应用。 名称随便取,方案看自己选择。开发版免费但是有限制,商业版收费无限制。 点击配置按钮进行配置。 点击设置 - 应用凭证可获取 App ID 和 App Key 点击设置 - 安全中心根据自己的需求配置 # 修改 Theme.Shoka 配置 valine:  appId: 粘贴5中获取的App ID #Your_appId appKey: 粘贴5中获取的App Key #Your_appkey placeholder: ヽ(○´∀`)ノ♪欢迎畅所欲言...
406 1 分钟

# 介绍 mariadb 属于 mysql 的一个分支,完全兼容 mysql,使用方式和 mysql 无区别。 # 安装 本文介绍安装的镜像为 linuxserver_mariadb 的 10.5.13-r0-ls45,原则上使用最新版即可 配置文件映射 端口 环境(MYSQL_ROOT_PASSWORD 为数据库 root 用户密码) 到此已经可以在内网使用了,连接方法同 mysql 一致 # 配置 此处配置为 nginx 反向代理,配置完成后可在外网连接访问 stream &#123; #极空间-docker-mariadb upstream...
\ No newline at end of file +☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣

文章列表

6k 5 分钟

# 引言 所有配置方法和介绍均来至于网络搜索汇总,主要用于方便后期巩固学习。 # 何为反向代理 在介绍反向代理之前,先来了解一下正向代理。 __正向代理:__如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问...
1.6k 1 分钟

# 描述 今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。 # 过程 卸载旧的 nodejs(此命令会卸载掉相关依赖包) sudo apt autoremove --purge nodejs 安装 NodeJS curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - &amp;&amp; sudo...
1k 1 分钟

# 区别: 2>/dev/null意思就是把错误输出到 “黑洞” >/dev/null 2>&amp;1默认情况是 1,也就是等同于 1&gt;/dev/null 2&gt;&amp;1。意思就是把标准输出重定向到 “黑洞”,还把错误输出 2 重定向到标准输出 1,也就是标准输出和错误输出都进了 “黑洞” 2>&amp;1 >/dev/null意思就是把错误输出 2 重定向到标准出书 1,也就是屏幕,标准输出进了 “黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕 # 解释: 文件描述符 Linux...
68 1 分钟

# 360 独立版小工具 360 全家桶众说纷纭但工具箱还是挺实用的,这波小工具可以单独下载使用,有需要的朋友赶紧下载吧! 下载地址 # 部分工具截图
115 1 分钟

# 介绍 当你经常需要在家远程到公司进行办公,或者开启了很多临时文件、文档、软件需要等到第二天继续之前的工作时,结果系统自行更新并重启了。是不是会让你非常郁闷。关闭系统自行更新就可以轻松解决此类问题。 # 下载 win10 / win11 / 本地
2.3k 2 分钟

# 介绍 ip 直连一般都映射了 5055, 但是直接访问 5055 极空间只提供了 http 协议,如果希望使用 https 协议则必须使用其它端口进行访问。以下方案采用 nginx 反向代理实现,端口使用 10000 举例。 # 配置 需要先把 10000 端口在路由器上做好映射。 证书生成好并放置到 nginx 上。(证书生成方法不做介绍请自行百度) http 跳转 https 配置 server &#123; if ($scheme = http) &#123; rewrite ^(.*)$ https://$host$1...
2.2k 2 分钟

# 介绍 青龙面板是一个支持 python3、javascript、shell、typescript 的定时任务管理面板。它支持在线管理脚本、环境变量、配置文件,支持在线查看日志及支持多种方式的消息通知。 # 安装 本文使用的是 whyour/qinglong 的镜像。 路径映射(由于青龙面板有 nodejs 环境,所以我把 hexo 博客的编译也放置在上面,再把 nginx 的 html 映射过来,这样就可以直接编译发布了。) #青龙面板装载路径/ql/data#博客装载路径(如果你不部署 hexo 博客可以不用配置)/root/.ssh #ssh 证书文件(如果你不用把 hexo...
929 1 分钟

valine 评论需要 LeanCloud 支持 # LeanCloud 注册 到 LeanCloud 网站完成注册。 创建应用。 名称随便取,方案看自己选择。开发版免费但是有限制,商业版收费无限制。 点击配置按钮进行配置。 点击设置 - 应用凭证可获取 App ID 和 App Key 点击设置 - 安全中心根据自己的需求配置 # 修改 Theme.Shoka 配置 valine: appId: 粘贴5中获取的App ID #Your_appId appKey: 粘贴5中获取的App Key #Your_appkey placeholder: ヽ(○´∀`)ノ♪欢迎畅所欲言 #...
406 1 分钟

# 介绍 mariadb 属于 mysql 的一个分支,完全兼容 mysql,使用方式和 mysql 无区别。 # 安装 本文介绍安装的镜像为 linuxserver_mariadb 的 10.5.13-r0-ls45,原则上使用最新版即可 配置文件映射 端口 环境(MYSQL_ROOT_PASSWORD 为数据库 root 用户密码) 到此已经可以在内网使用了,连接方法同 mysql 一致 # 配置 此处配置为 nginx 反向代理,配置完成后可在外网连接访问 stream &#123; #极空间 - docker-mariadb upstream mariadb...
\ No newline at end of file diff --git a/page/2/index.html b/page/2/index.html index d13ebc1f3..29454568c 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -1 +1 @@ -☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
1.2k 1 分钟

# 安装 下载最新版 wordpress 镜像,如极空间无法下载,可到 passerma 网站下载。 需要先在 mysql 中创建给 wordpress 使用的库。 文件路径映射(目前极空间不能映射到高速盘,否则无法启动)。 端口映射。 通过映射的端口访问安装界面(一定要通过最终访问的页面进行安装,否则修改配置比较麻烦。如最终是域名访问,就先把域名解析代理等先配置好,再通过域名访问安装)。 # 配置 如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。 if((!empty(...
101 1 分钟

一年一次的总结时间又到了,这一年前半年平平无奇,后半年惊涛骇浪。中年危机如期而遇,人身的低谷终究还是来了。很沮丧也很无助,但还是要坚强面对。人生起起伏伏,时好时坏,终归还是会好起来的。加油!加油!加油 !
7.3k 7 分钟

# 监控端服务安装与配置 nagios 需要安装主程序 core 和 nrpe(nagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见官网 nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处 etc/objects/commands.cfg 用于保存 nagios 默认监控命令 etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加) etc/objects/hosts...
3.2k 3 分钟

# 主服务 基础配置 port 6379 requirepass 123456(密码,建议不设置) vm-enabled no (虚拟内存,内存够的情况下可以不使用) maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入) bind 127.0.0.1 (注释掉,否则不能外部连接) rdbchecksum no(持久化数据检查) list-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb) list-compress-depth...
366 1 分钟

# 使用场景   在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下: server &#123; listen port ssl http2; server_name xxx.com; ssl_certificate_key /xxx.key; ssl_certificate /xxx.pem; proxy_cookie_path ~(.*) &quot;$1; SameSite=None; secure;...
111 1 分钟

# 简介 PicGo 是一款开源的图床管理工具,十分流行。 PicGo 官方指南:PicGo | PicGo # 配置 安装插件(需要先安装 NodeJS) 图床配置   url 后缀必须用红线圈中的部分,key 在 chevereto 登陆后 api 配置中查找
709 1 分钟

# 前期准备   首先安装好 svn 和 git 工具。 # svn 转 git 1、 到 svn 项目目录右键选中 gitbash 打开窗口,执行获取用户并映射成 git 样式账号命令如下: svn log -q | awk -F '|' '/^r/ &#123;sub(&quot;^ &quot;, &quot;&quot;, $2); sub(&quot; $&quot;, &quot;&quot;, $2); print $2&quot; =...
1.6k 1 分钟

# X-Frame-Options 响应头配置详解   X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在,或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。 X-Frame-Options 三个参数: 1、 DENY   表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。 2、SAMEORIGIN   表示该页面可以在相同域名页面的 frame 中展示。 3、ALLOW-FROM uri   表示该页面可以在指定来源的 frame...
1.1k 1 分钟

# nginx 负载均衡配置 轮询(默认)   每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。 upstream my_server &#123; server 192.168.0.2:8080; server 192.168.0.3:8080; &#125; server &#123; listen 80; server_name 192.168.0.1; # Path to the root of your installation location / &#123; proxy_pass...
\ No newline at end of file +☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
1.2k 1 分钟

# 安装 下载最新版 wordpress 镜像,如极空间无法下载,可到 passerma 网站下载。 需要先在 mysql 中创建给 wordpress 使用的库。 文件路径映射(目前极空间不能映射到高速盘,否则无法启动)。 端口映射。 通过映射的端口访问安装界面(一定要通过最终访问的页面进行安装,否则修改配置比较麻烦。如最终是域名访问,就先把域名解析代理等先配置好,再通过域名访问安装)。 # 配置 如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。 if((!empty(...
101 1 分钟

一年一次的总结时间又到了,这一年前半年平平无奇,后半年惊涛骇浪。中年危机如期而遇,人身的低谷终究还是来了。很沮丧也很无助,但还是要坚强面对。人生起起伏伏,时好时坏,终归还是会好起来的。加油!加油!加油 !
6.7k 6 分钟

# 监控端服务安装与配置 nagios 需要安装主程序 core 和 nrpe(nagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见官网 nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处 etc/objects/commands.cfg 用于保存 nagios 默认监控命令 etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加) etc/objects/hosts...
3.1k 3 分钟

# 主服务 基础配置 port 6379requirepass 123456(密码,建议不设置)vm-enabled no (虚拟内存,内存够的情况下可以不使用)maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)bind 127.0.0.1 (注释掉,否则不能外部连接)rdbchecksum no(持久化数据检查)list-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)list-compress-depth...
356 1 分钟

# 使用场景   在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下: server &#123; listen port ssl http2; server_name xxx.com; ssl_certificate_key /xxx.key; ssl_certificate /xxx.pem; proxy_cookie_path ~(.*) "$1; SameSite=None; secure; httponly"; location /...
111 1 分钟

# 简介 PicGo 是一款开源的图床管理工具,十分流行。 PicGo 官方指南:PicGo | PicGo # 配置 安装插件(需要先安装 NodeJS) 图床配置   url 后缀必须用红线圈中的部分,key 在 chevereto 登陆后 api 配置中查找
709 1 分钟

# 前期准备   首先安装好 svn 和 git 工具。 # svn 转 git 1、 到 svn 项目目录右键选中 gitbash 打开窗口,执行获取用户并映射成 git 样式账号命令如下: svn log -q | awk -F '|' '/^r/ &#123;sub(&quot;^ &quot;, &quot;&quot;, $2); sub(&quot; $&quot;, &quot;&quot;, $2); print $2&quot; =...
1.6k 1 分钟

# X-Frame-Options 响应头配置详解   X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在,或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。 X-Frame-Options 三个参数: 1、 DENY   表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。 2、SAMEORIGIN   表示该页面可以在相同域名页面的 frame 中展示。 3、ALLOW-FROM uri   表示该页面可以在指定来源的 frame...
1.1k 1 分钟

# nginx 负载均衡配置 轮询(默认)   每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。 upstream my_server &#123; server 192.168.0.2:8080; server 192.168.0.3:8080;&#125;server &#123; listen 80; server_name 192.168.0.1; # Path to the root of your installation location / &#123; proxy_pass...
\ No newline at end of file diff --git a/page/3/index.html b/page/3/index.html index 812b5b1af..ab5aefd0f 100644 --- a/page/3/index.html +++ b/page/3/index.html @@ -1 +1 @@ -☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
1.8k 2 分钟

今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 https://api.i-meto.com/meting/api 调用出错了。shoka 主题应该是通过这个网站提取音乐地址、图片等信息。通过断点发现网易播放列表还是能正常获取的,只是列表中的具体音乐、图片无法获取了。于是自己用获取的列表信息组装出正确的 url 问题基本解决。只针对网易播放列表,图片只能使用一张固定的。   解决方法如下:     到 themes\shoka\source\js_app 目录下打开 player.js 文件,在最底部 init (config) 下加入 vendorJs...
268 1 分钟

今天突然发现自己的网站不能访问了。经过一顿排查,发现是家里的外网 ip 变动后 nginx 解析的域名 ip 还是旧 ip 导致的。手动重启 nginx 后恢复正常。但这不是长久之计,如果每次 ip 变动都需要重启一次 nginx,想想都头大。于是查询资料后获得了解决办法,方法如下: location / &#123; resolver 114.114.114.114 valid=60s; #自定义缓存有效时间间隔对变量中的域名进行解析 set $my_server &quot;https://ip:port&quot;; proxy_pass...
179 1 分钟

# 下载工具 protoc-3.19.5-win64.zip # 生成 js 文件 把 xxx.proto 文件拷贝到解压的 protoc-3.19.5-win64\bin 目录下 cmd 到相同的 bin 目录下 执行 protoc.exe --js_out=import_style=commonjs,binary:. ./xxx.proto 命令,就会在 bin 目录下生成 xxx_pb.js 文件
508 1 分钟

今天前端开发跟我反馈用 vue 的 socketio 连接不上后台服务,连接无反应无任何报错。所以不清楚是前端代码问题还是后台服务的问题。由于框架为另一同事搭建,我只负责处理后端业务逻辑部分,所以第一时间我也不清楚具体的原因。于是我找了个第三方的 socket 工具尝试连接,果然有问题。但是只是提示连接不上,无明显错误原因。到后台查看发现有提示 Unknown transport for request 错误,最后通过调试发现 netty-socketio 的库中 AuthorizeHandler 类有段处理 transport 的代码只能接受大写的 WEBSOCKET 或者...
598 1 分钟

# Hexo + Theme.Shoka 安装   安装介绍 # algolia 注册 algolia 不支持国内邮箱注册,而 google 和 github 由于国内被墙也没法使用。所以只能先注册 netlify 然后通过 netlify 注册 algolia。 登录 algolia 后创建一个 index,名字随意记住既可。 点击右上角红点,弹出窗口点 settings 按钮。 点击 API KEYS,获取 appId 和 adminApiKey 填入 hexo 的_config.yml 中 apiKey 暂时不填。 algolia: appId: #Your...
608 1 分钟

# 安装准备 需要先安装好 mysql 数据库 选择版本,1.5 版以前支持中文,之后被维护的团队删除只支持英文 本文介绍使用的是 linuxserver_chevereto 的镜像 需要预先创建好给 chevereto 使用的库、账户、密码 经过测试,使用 surenkid_chevereto 的镜像可以完美支持多国语言,配置同 linuxserver_chevereto 一样 # 容器配置 映射路径(不要放在高速盘,否则会有权限问题) 端口 环境(puid 和 pgid 使用 1000,不要使用 0,否则会报错) # 初始化配置 使用 http:// 极空间...
1.1k 1 分钟

# hexo 博客安装 安装 nodejs 安装 git 安装 hexo(windows 需进入 git bash) npm install -g hexo-cli 初始化博客目录 hexo init blog 进入博客目录 cd blog 初始化 hexo 到博客目录 npm install # shoka 主题安装 下载主题 git clone https://github.com/amehime/hexo-theme-shoka.git ./themes/shoka 卸载 hexo-renderer-marked 以及别的 markdown 文件渲染器 npm un...
\ No newline at end of file +☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
1.8k 2 分钟

今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 https://api.i-meto.com/meting/api 调用出错了。shoka 主题应该是通过这个网站提取音乐地址、图片等信息。通过断点发现网易播放列表还是能正常获取的,只是列表中的具体音乐、图片无法获取了。于是自己用获取的列表信息组装出正确的 url 问题基本解决。只针对网易播放列表,图片只能使用一张固定的。   解决方法如下:     到 themes\shoka\source\js_app 目录下打开 player.js 文件,在最底部 init (config) 下加入 vendorJs...
258 1 分钟

今天突然发现自己的网站不能访问了。经过一顿排查,发现是家里的外网 ip 变动后 nginx 解析的域名 ip 还是旧 ip 导致的。手动重启 nginx 后恢复正常。但这不是长久之计,如果每次 ip 变动都需要重启一次 nginx,想想都头大。于是查询资料后获得了解决办法,方法如下: location / &#123; resolver 114.114.114.114 valid=60s; #自定义缓存有效时间间隔对变量中的域名进行解析 set $my_server "https://ip:port"; proxy_pass...
179 1 分钟

# 下载工具 protoc-3.19.5-win64.zip # 生成 js 文件 把 xxx.proto 文件拷贝到解压的 protoc-3.19.5-win64\bin 目录下 cmd 到相同的 bin 目录下 执行 protoc.exe --js_out=import_style=commonjs,binary:. ./xxx.proto 命令,就会在 bin 目录下生成 xxx_pb.js 文件
508 1 分钟

今天前端开发跟我反馈用 vue 的 socketio 连接不上后台服务,连接无反应无任何报错。所以不清楚是前端代码问题还是后台服务的问题。由于框架为另一同事搭建,我只负责处理后端业务逻辑部分,所以第一时间我也不清楚具体的原因。于是我找了个第三方的 socket 工具尝试连接,果然有问题。但是只是提示连接不上,无明显错误原因。到后台查看发现有提示 Unknown transport for request 错误,最后通过调试发现 netty-socketio 的库中 AuthorizeHandler 类有段处理 transport 的代码只能接受大写的 WEBSOCKET 或者...
588 1 分钟

# Hexo + Theme.Shoka 安装   安装介绍 # algolia 注册 algolia 不支持国内邮箱注册,而 google 和 github 由于国内被墙也没法使用。所以只能先注册 netlify 然后通过 netlify 注册 algolia。 登录 algolia 后创建一个 index,名字随意记住既可。 点击右上角红点,弹出窗口点 settings 按钮。 点击 API KEYS,获取 appId 和 adminApiKey 填入 hexo 的_config.yml 中 apiKey 暂时不填。 algolia: appId: #Your appId...
608 1 分钟

# 安装准备 需要先安装好 mysql 数据库 选择版本,1.5 版以前支持中文,之后被维护的团队删除只支持英文 本文介绍使用的是 linuxserver_chevereto 的镜像 需要预先创建好给 chevereto 使用的库、账户、密码 经过测试,使用 surenkid_chevereto 的镜像可以完美支持多国语言,配置同 linuxserver_chevereto 一样 # 容器配置 映射路径(不要放在高速盘,否则会有权限问题) 端口 环境(puid 和 pgid 使用 1000,不要使用 0,否则会报错) # 初始化配置 使用 http:// 极空间...
1.1k 1 分钟

# hexo 博客安装 安装 nodejs 安装 git 安装 hexo(windows 需进入 git bash) npm install -g hexo-cli 初始化博客目录 hexo init blog 进入博客目录 cd blog 初始化 hexo 到博客目录 npm install # shoka 主题安装 下载主题 git clone https://github.com/amehime/hexo-theme-shoka.git ./themes/shoka 卸载 hexo-renderer-marked 以及别的 markdown 文件渲染器 npm un...
\ No newline at end of file diff --git a/rss.xml b/rss.xml index b19b28fdc..fff803278 100644 --- a/rss.xml +++ b/rss.xml @@ -57,48 +57,21 @@ __反向代理:__看下面原理图,就一目了然。其实客户端对代 <p>配置文件中有很多 #号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):</p> </li> </ul> -<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> # 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> # 虚拟主机,可以配置多个</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> # 路径匹配之后,哪个目录下去匹配相应的网页,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-num="29"></td><td><pre> root html;</pre></td></tr><tr><td data-num="30"></td><td><pre> &#125;</pre></td></tr><tr><td data-num="31"></td><td><pre> &#125;</pre></td></tr><tr><td data-num="32"></td><td><pre>&#125;</pre></td></tr></table></figure><p>去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:</p> +<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> <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> <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> <span class="token comment"># 路径匹配之后,哪个目录下去匹配相应的网页,html 是相对路径</span></pre></td></tr><tr><td data-num="23"></td><td><pre> root html;</pre></td></tr><tr><td data-num="24"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="26"></td><td><pre></pre></td></tr><tr><td data-num="27"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num="28"></td><td><pre> location = /50x.html <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="29"></td><td><pre> root html;</pre></td></tr><tr><td data-num="30"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="31"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="32"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:</p> <ol> <li>全局块</li> </ol> -<pre><code class="language-yaml">worker_processes 1; -</code></pre> -<p>从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。</p> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>worker_processes 1;</pre></td></tr></table></figure><p>从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。</p> <p>上面这行 worker_processes 配置,是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。</p> <ol start="2"> <li>events 块</li> </ol> -<pre><code class="language-yaml">events &#123; - worker_connections 1024; -&#125; -</code></pre> -<p>events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等</p> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>events <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等</p> <p>上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。</p> <ol start="3"> <li>http 块</li> </ol> -<pre><code class="language-yaml">http &#123; - include mime.types; - default_type application/octet-stream; - sendfile on; - keepalive_timeout 65; - - server &#123; - listen 80; - server_name localhost; - - location / &#123; - root html; - index index.html index.htm; - &#125; - - error_page 500 502 503 504 /50x.html; - location = /50x.html &#123; - root html; - &#125; -&#125; -</code></pre> -<p>这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置</p> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>http <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num="3"></td><td><pre> default_type application/octet<span class="token punctuation">-</span>stream;</pre></td></tr><tr><td data-num="4"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num="5"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre> server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="8"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num="9"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num="10"></td><td><pre></pre></td></tr><tr><td data-num="11"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="12"></td><td><pre> root html;</pre></td></tr><tr><td data-num="13"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="15"></td><td><pre></pre></td></tr><tr><td data-num="16"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num="17"></td><td><pre> location = /50x.html <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="18"></td><td><pre> root html;</pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="20"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置</p> <p>__http 全局块:__http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。</p> <p>__server 块:__这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。</p> <p>__location 块:__这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。</p> @@ -107,189 +80,11 @@ __反向代理:__看下面原理图,就一目了然。其实客户端对代 <ol> <li>location 配置规则</li> </ol> -<pre><code class="language-yaml">location [ = | ~ | ~* | ^~ | @ ] /uri &#123; - -&#125; - -=   :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。 -~ :用于表示 uri 包含正则表达式,并且区分大小写。 -~* :用于表示 uri 包含正则表达式,并且不区分大小写。 -^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。 -@ : &quot;@&quot; 定义一个命名的 location,使用在内部定向时,例如 error_page -/uri :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则 -/ :通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default - -☆☆☆☆☆ uri没有“/”结尾时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等。而有“/”结尾时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求 -</code></pre> -<ol start="2"> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>location <span class="token punctuation">[</span> = <span class="token punctuation">|</span> ~ <span class="token punctuation">|</span> ~* <span class="token punctuation">|</span> ^~ <span class="token punctuation">|</span> @ <span class="token punctuation">]</span> /uri <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre>= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。</pre></td></tr><tr><td data-num="6"></td><td><pre>~ :用于表示 uri 包含正则表达式,并且区分大小写。</pre></td></tr><tr><td data-num="7"></td><td><pre>~* :用于表示 uri 包含正则表达式,并且不区分大小写。</pre></td></tr><tr><td data-num="8"></td><td><pre>^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。</pre></td></tr><tr><td data-num="9"></td><td><pre>@ <span class="token punctuation">:</span> "@" 定义一个命名的 location,使用在内部定向时,例如 error_page</pre></td></tr><tr><td data-num="10"></td><td><pre>/uri :不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则</pre></td></tr><tr><td data-num="11"></td><td><pre>/ :通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default</pre></td></tr><tr><td data-num="12"></td><td><pre></pre></td></tr><tr><td data-num="13"></td><td><pre>☆☆☆☆☆ uri没有“/”结尾时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等。而有“/”结尾时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求</pre></td></tr></table></figure><ol start="2"> <li>proxy_pass 配置规则</li> </ol> -<pre><code class="language-yaml">url结尾加上了/,相当于是绝对路径,则Nginx不会把location中匹配的路径部分加入代理uri。 -url结尾不加/,Nginx则会把匹配的路径部分加入代理uri。 - -情景1: -proxy_pass后有/ -访问地址:http://localhost:8081/WCP.Service/wcp/modeladapter/download/asc.shtml -最终代理:http://10.194.171.7:13082/modeladapter/download/asc.shtml -location /WCP.Service/wcp/modeladapter/download/ &#123; - proxy_pass http://10.194.171.7:13082/modeladapter/download/; -&#125; -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/model/asc.shtml -location /model/ &#123; - proxy_pass http://127.0.0.1:8082/model/; -&#125; - -情景2: -proxy_pass后有/ -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/asc.shtml -location /model/ &#123; - proxy_pass http://127.0.0.1:8082/; -&#125; - -情景3: -proxy_pass后没有/ -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/model/asc.shtml -location /model/ &#123; - proxy_pass http://127.0.0.1:8082; -&#125; - -情景4 -proxy_pass后没有/ -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/AAAmodel/asc.shtml -location /model/ &#123; - proxy_pass http://127.0.0.1:8082/AAA; -&#125; - -情景5 -proxy_pass后有/ -访问地址:http://localhost:8081/model/asc.shtml -最终代理:http://127.0.0.1:8082/asc.shtml -location /model &#123; - proxy_pass http://127.0.0.1:8082/; -&#125; - -情景6 -proxy_pass后有/ -访问地址:http://localhost:8081/modelBBB/asc.shtml -最终代理:http://127.0.0.1:8082/asc.shtml -location /model &#123; - proxy_pass http://127.0.0.1:8082/; -&#125; -</code></pre> -<h4 id="nginx完整配置文件"><a class="anchor" href="#nginx完整配置文件">#</a> Nginx 完整配置文件</h4> -<pre><code class="language-yaml">#user nobody; -worker_processes 1; - -#error_log logs/error.log; -#error_log logs/error.log notice; -#error_log logs/error.log info; - -#pid logs/nginx.pid; - -events &#123; - worker_connections 1024; -&#125; - -http &#123; - include mime.types; - default_type application/octet-stream; - - #log_format main '$remote_addr - $remote_user [$time_local] &quot;$request&quot; ' - # '$status $body_bytes_sent &quot;$http_referer&quot; ' - # '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;'; - - #access_log logs/access.log main; - - sendfile on; - #tcp_nopush on; - - #keepalive_timeout 0; - keepalive_timeout 65; - - #gzip on; - - server &#123; - listen 80; - server_name localhost; - - #charset koi8-r; - - #access_log logs/host.access.log main; - - location / &#123; - root html; - index index.html index.htm; - &#125; - - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - error_page 500 502 503 504 /50x.html; - location = /50x.html &#123; - root html; - &#125; - - # proxy the PHP scripts to Apache listening on 127.0.0.1:80 - # - #location ~ \.php$ &#123; - # proxy_pass http://127.0.0.1; - #&#125; - - # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 - # - #location ~ \.php$ &#123; - # root html; - # fastcgi_pass 127.0.0.1:9000; - # fastcgi_index index.php; - # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; - # include fastcgi_params; - #&#125; - - # deny access to .htaccess files, if Apache's document root - # concurs with nginx's one - # - #location ~ /\.ht &#123; - # deny all; - #&#125; - &#125; - # another virtual host using mix of IP-, name-, and port-based configuration - # - #server &#123; - # listen 8000; - # listen somename:8080; - # server_name somename alias another.alias; - # location / &#123; - # root html; - # index index.html index.htm; - # &#125; - #&#125; - # HTTPS server - # - #server &#123; - # listen 443 ssl; - # server_name localhost; - # ssl_certificate cert.pem; - # ssl_certificate_key cert.key; - - # ssl_session_cache shared:SSL:1m; - # ssl_session_timeout 5m; - - # ssl_ciphers HIGH:!aNULL:!MD5; - # ssl_prefer_server_ciphers on; - - # location / &#123; - # root html; - # index index.html index.htm; - # &#125; - #&#125; -&#125; -</code></pre> - ]]> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>url结尾加上了/,相当于是绝对路径,则Nginx不会把location中匹配的路径部分加入代理uri。</pre></td></tr><tr><td data-num="2"></td><td><pre>url结尾不加/,Nginx则会把匹配的路径部分加入代理uri。</pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token key atrule">情景1</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="5"></td><td><pre>proxy_pass后有/ </pre></td></tr><tr><td data-num="6"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/WCP.Service/wcp/modeladapter/download/asc.shtml</pre></td></tr><tr><td data-num="7"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//10.194.171.7<span class="token punctuation">:</span>13082/modeladapter/download/asc.shtml</pre></td></tr><tr><td data-num="8"></td><td><pre>location /WCP.Service/wcp/modeladapter/download/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="9"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//10.194.171.7<span class="token punctuation">:</span>13082/modeladapter/download/;</pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="11"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="12"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/model/asc.shtml</pre></td></tr><tr><td data-num="13"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="14"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/model/;</pre></td></tr><tr><td data-num="15"></td><td><pre><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 key atrule">情景2</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="18"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num="19"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="20"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num="21"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="22"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/;</pre></td></tr><tr><td data-num="23"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="24"></td><td><pre></pre></td></tr><tr><td data-num="25"></td><td><pre>情景3:</pre></td></tr><tr><td data-num="26"></td><td><pre>proxy_pass后没有/ </pre></td></tr><tr><td data-num="27"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="28"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/model/asc.shtml</pre></td></tr><tr><td data-num="29"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="30"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082;</pre></td></tr><tr><td data-num="31"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="32"></td><td><pre></pre></td></tr><tr><td data-num="33"></td><td><pre>情景4</pre></td></tr><tr><td data-num="34"></td><td><pre>proxy_pass后没有/ </pre></td></tr><tr><td data-num="35"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="36"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/AAAmodel/asc.shtml</pre></td></tr><tr><td data-num="37"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="38"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/AAA;</pre></td></tr><tr><td data-num="39"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="40"></td><td><pre></pre></td></tr><tr><td data-num="41"></td><td><pre>情景5</pre></td></tr><tr><td data-num="42"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num="43"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="44"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num="45"></td><td><pre>location /model <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="46"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/;</pre></td></tr><tr><td data-num="47"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="48"></td><td><pre></pre></td></tr><tr><td data-num="49"></td><td><pre>情景6</pre></td></tr><tr><td data-num="50"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num="51"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/modelBBB/asc.shtml</pre></td></tr><tr><td data-num="52"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num="53"></td><td><pre>location /model <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="54"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/;</pre></td></tr><tr><td data-num="55"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><h4 id="nginx完整配置文件"><a class="anchor" href="#nginx完整配置文件">#</a> Nginx 完整配置文件</h4> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#user nobody;</span></pre></td></tr><tr><td data-num="2"></td><td><pre>worker_processes 1;</pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment">#error_log logs/error.log;</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token comment">#error_log logs/error.log notice;</span></pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token comment">#error_log logs/error.log info;</span></pre></td></tr><tr><td data-num="7"></td><td><pre></pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token comment">#pid logs/nginx.pid;</span></pre></td></tr><tr><td data-num="9"></td><td><pre></pre></td></tr><tr><td data-num="10"></td><td><pre>events <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="11"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num="12"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="13"></td><td><pre></pre></td></tr><tr><td data-num="14"></td><td><pre>http <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="15"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num="16"></td><td><pre> default_type application/octet<span class="token punctuation">-</span>stream;</pre></td></tr><tr><td data-num="17"></td><td><pre></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token comment">#log_format main '$remote_addr - $remote_user [$time_local] "$request" '</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token comment"># '$status $body_bytes_sent "$http_referer" '</span></pre></td></tr><tr><td data-num="20"></td><td><pre> <span class="token comment"># '"$http_user_agent" "$http_x_forwarded_for"';</span></pre></td></tr><tr><td data-num="21"></td><td><pre></pre></td></tr><tr><td data-num="22"></td><td><pre> <span class="token comment">#access_log logs/access.log main;</span></pre></td></tr><tr><td data-num="23"></td><td><pre></pre></td></tr><tr><td data-num="24"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token comment">#tcp_nopush on;</span></pre></td></tr><tr><td data-num="26"></td><td><pre></pre></td></tr><tr><td data-num="27"></td><td><pre> <span class="token comment">#keepalive_timeout 0;</span></pre></td></tr><tr><td data-num="28"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num="29"></td><td><pre></pre></td></tr><tr><td data-num="30"></td><td><pre> <span class="token comment">#gzip on;</span></pre></td></tr><tr><td data-num="31"></td><td><pre></pre></td></tr><tr><td data-num="32"></td><td><pre> server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="33"></td><td><pre> listen 80;</pre></td></tr><tr><td data-num="34"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num="35"></td><td><pre></pre></td></tr><tr><td data-num="36"></td><td><pre> <span class="token comment">#charset koi8-r;</span></pre></td></tr><tr><td data-num="37"></td><td><pre></pre></td></tr><tr><td data-num="38"></td><td><pre> <span class="token comment">#access_log logs/host.access.log main;</span></pre></td></tr><tr><td data-num="39"></td><td><pre></pre></td></tr><tr><td data-num="40"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="41"></td><td><pre> root html;</pre></td></tr><tr><td data-num="42"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num="43"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="44"></td><td><pre></pre></td></tr><tr><td data-num="45"></td><td><pre> <span class="token comment">#error_page 404 /404.html;</span></pre></td></tr><tr><td data-num="46"></td><td><pre></pre></td></tr><tr><td data-num="47"></td><td><pre> <span class="token comment"># redirect server error pages to the static page /50x.html</span></pre></td></tr><tr><td data-num="48"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="49"></td><td><pre> error_page 500 502 503 504 /50x.html;</pre></td></tr><tr><td data-num="50"></td><td><pre> location = /50x.html <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="51"></td><td><pre> root html;</pre></td></tr><tr><td data-num="52"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="53"></td><td><pre></pre></td></tr><tr><td data-num="54"></td><td><pre> <span class="token comment"># proxy the PHP scripts to Apache listening on 127.0.0.1:80</span></pre></td></tr><tr><td data-num="55"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="56"></td><td><pre> <span class="token comment">#location ~ \.php$ &#123;</span></pre></td></tr><tr><td data-num="57"></td><td><pre> <span class="token comment"># proxy_pass http://127.0.0.1;</span></pre></td></tr><tr><td data-num="58"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="59"></td><td><pre></pre></td></tr><tr><td data-num="60"></td><td><pre> <span class="token comment"># pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000</span></pre></td></tr><tr><td data-num="61"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="62"></td><td><pre> <span class="token comment">#location ~ \.php$ &#123;</span></pre></td></tr><tr><td data-num="63"></td><td><pre> <span class="token comment"># root html;</span></pre></td></tr><tr><td data-num="64"></td><td><pre> <span class="token comment"># fastcgi_pass 127.0.0.1:9000;</span></pre></td></tr><tr><td data-num="65"></td><td><pre> <span class="token comment"># fastcgi_index index.php;</span></pre></td></tr><tr><td data-num="66"></td><td><pre> <span class="token comment"># fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;</span></pre></td></tr><tr><td data-num="67"></td><td><pre> <span class="token comment"># include fastcgi_params;</span></pre></td></tr><tr><td data-num="68"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="69"></td><td><pre></pre></td></tr><tr><td data-num="70"></td><td><pre> <span class="token comment"># deny access to .htaccess files, if Apache's document root</span></pre></td></tr><tr><td data-num="71"></td><td><pre> <span class="token comment"># concurs with nginx's one</span></pre></td></tr><tr><td data-num="72"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="73"></td><td><pre> <span class="token comment">#location ~ /\.ht &#123;</span></pre></td></tr><tr><td data-num="74"></td><td><pre> <span class="token comment"># deny all;</span></pre></td></tr><tr><td data-num="75"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="76"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="77"></td><td><pre> <span class="token comment"># another virtual host using mix of IP-, name-, and port-based configuration</span></pre></td></tr><tr><td data-num="78"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="79"></td><td><pre> <span class="token comment">#server &#123;</span></pre></td></tr><tr><td data-num="80"></td><td><pre> <span class="token comment"># listen 8000;</span></pre></td></tr><tr><td data-num="81"></td><td><pre> <span class="token comment"># listen somename:8080;</span></pre></td></tr><tr><td data-num="82"></td><td><pre> <span class="token comment"># server_name somename alias another.alias;</span></pre></td></tr><tr><td data-num="83"></td><td><pre> <span class="token comment"># location / &#123;</span></pre></td></tr><tr><td data-num="84"></td><td><pre> <span class="token comment"># root html;</span></pre></td></tr><tr><td data-num="85"></td><td><pre> <span class="token comment"># index index.html index.htm;</span></pre></td></tr><tr><td data-num="86"></td><td><pre> <span class="token comment"># &#125;</span></pre></td></tr><tr><td data-num="87"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="88"></td><td><pre> <span class="token comment"># HTTPS server</span></pre></td></tr><tr><td data-num="89"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="90"></td><td><pre> <span class="token comment">#server &#123;</span></pre></td></tr><tr><td data-num="91"></td><td><pre> <span class="token comment"># listen 443 ssl;</span></pre></td></tr><tr><td data-num="92"></td><td><pre> <span class="token comment"># server_name localhost;</span></pre></td></tr><tr><td data-num="93"></td><td><pre> <span class="token comment"># ssl_certificate cert.pem;</span></pre></td></tr><tr><td data-num="94"></td><td><pre> <span class="token comment"># ssl_certificate_key cert.key;</span></pre></td></tr><tr><td data-num="95"></td><td><pre></pre></td></tr><tr><td data-num="96"></td><td><pre> <span class="token comment"># ssl_session_cache shared:SSL:1m;</span></pre></td></tr><tr><td data-num="97"></td><td><pre> <span class="token comment"># ssl_session_timeout 5m;</span></pre></td></tr><tr><td data-num="98"></td><td><pre></pre></td></tr><tr><td data-num="99"></td><td><pre> <span class="token comment"># ssl_ciphers HIGH:!aNULL:!MD5;</span></pre></td></tr><tr><td data-num="100"></td><td><pre> <span class="token comment"># ssl_prefer_server_ciphers on;</span></pre></td></tr><tr><td data-num="101"></td><td><pre></pre></td></tr><tr><td data-num="102"></td><td><pre> <span class="token comment"># location / &#123;</span></pre></td></tr><tr><td data-num="103"></td><td><pre> <span class="token comment"># root html;</span></pre></td></tr><tr><td data-num="104"></td><td><pre> <span class="token comment"># index index.html index.htm;</span></pre></td></tr><tr><td data-num="105"></td><td><pre> <span class="token comment"># &#125;</span></pre></td></tr><tr><td data-num="106"></td><td><pre> <span class="token comment">#&#125;</span></pre></td></tr><tr><td data-num="107"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure> ]]> 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/ @@ -309,95 +104,29 @@ http &#123; <ul> <li>卸载旧的 nodejs(此命令会卸载掉相关依赖包)</li> </ul> -<pre><code class="language-bash">sudo apt autoremove --purge nodejs -</code></pre> -<ul> +<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> <li>安装 NodeJS</li> </ul> -<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 -</code></pre> -<ul> +<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> <li>安装 yarn</li> </ul> -<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 - -echo &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 - -sudo apt-get update &amp;&amp; sudo apt-get install yarn -</code></pre> -<ul> +<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> <li>初始化 (到项目根目录执行)</li> </ul> -<pre><code class="language-bash">yarn install -</code></pre> -<ul> +<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> <li>编译(到项目根目录执行,完成后会生成 dist 目录)</li> </ul> -<pre><code class="language-bash">yarn build -</code></pre> -<ul> +<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> <li>安装 nginx</li> </ul> -<pre><code class="language-bash">apt install nginx -</code></pre> -<ul> +<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> <li>配置 nginx (编译 /etc/nginx/sites-available/default)</li> </ul> -<pre><code class="language-yaml">server &#123; - listen 80 default_server; - listen [::]:80 default_server; - - # SSL configuration - # - # listen 443 ssl default_server; - # listen [::]:443 ssl default_server; - # - # Note: You should disable gzip for SSL traffic. - # See: https://bugs.debian.org/773332 - # - # Read up on ssl_ciphers to ensure a secure configuration. - # See: https://bugs.debian.org/765782 - # - # Self signed certs generated by the ssl-cert package - # Don't use them in a production server! - # - # include snippets/snakeoil.conf; - - root /var/www/html; - - # Add index.php to the list if you are using PHP - index index.html index.htm index.nginx-debian.html; - - server_name _; - - location /api &#123; - proxy_pass http://localhost:8080; - &#125; - - location / &#123; - # First attempt to serve request as file, then - # as directory, then fall back to displaying a 404. - #try_files $uri $uri/ =404; - alias /opt/codes/dayu-tools-arbitrage-web/dist/; - try_files $uri $uri/ @router; - index index.html index.htm; - &#125; - - location @router &#123; - rewrite ^.*$ /index.html last; -        &#125; -} - -</code></pre> -<h4 id="其它"><a class="anchor" href="#其它">#</a> 其它</h4> +<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;</span></pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token comment"># listen [::]:443 ssl default_server;</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token comment"># Note: You should disable gzip for SSL traffic.</span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token comment"># See: https://bugs.debian.org/773332</span></pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token comment"># Read up on ssl_ciphers to ensure a secure configuration.</span></pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token comment"># See: https://bugs.debian.org/765782</span></pre></td></tr><tr><td data-num="15"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token comment"># Self signed certs generated by the ssl-cert package</span></pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token comment"># Don't use them in a production server!</span></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token comment"># include snippets/snakeoil.conf;</span></pre></td></tr><tr><td data-num="20"></td><td><pre></pre></td></tr><tr><td data-num="21"></td><td><pre> root /var/www/html;</pre></td></tr><tr><td data-num="22"></td><td><pre></pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token comment"># Add index.php to the list if you are using PHP</span></pre></td></tr><tr><td data-num="24"></td><td><pre> index index.html index.htm index.nginx<span class="token punctuation">-</span>debian.html;</pre></td></tr><tr><td data-num="25"></td><td><pre></pre></td></tr><tr><td data-num="26"></td><td><pre> server_name _;</pre></td></tr><tr><td data-num="27"></td><td><pre></pre></td></tr><tr><td data-num="28"></td><td><pre> location /api <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="29"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="30"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="31"></td><td><pre></pre></td></tr><tr><td data-num="32"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="33"></td><td><pre> <span class="token comment"># First attempt to serve request as file, then</span></pre></td></tr><tr><td data-num="34"></td><td><pre> <span class="token comment"># as directory, then fall back to displaying a 404.</span></pre></td></tr><tr><td data-num="35"></td><td><pre> <span class="token comment">#try_files $uri $uri/ =404;</span></pre></td></tr><tr><td data-num="36"></td><td><pre> alias /opt/codes/dayu<span class="token punctuation">-</span>tools<span class="token punctuation">-</span>arbitrage<span class="token punctuation">-</span>web/dist/;</pre></td></tr><tr><td data-num="37"></td><td><pre> try_files $uri $uri/ @router;</pre></td></tr><tr><td data-num="38"></td><td><pre> index index.html index.htm;</pre></td></tr><tr><td data-num="39"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="40"></td><td><pre></pre></td></tr><tr><td data-num="41"></td><td><pre> location @router <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="42"></td><td><pre> rewrite ^.<span class="token important">*$</span> /index.html last;</pre></td></tr><tr><td data-num="43"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="44"></td><td><pre>}</pre></td></tr></table></figure><h4 id="其它"><a class="anchor" href="#其它">#</a> 其它</h4> <ul> <li>重新编译前需要先删除 dist 目录</li> </ul> -<pre><code class="language-bash">rm dist -fr - -yarn build -</code></pre> - ]]> +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">rm</span> dist <span class="token parameter variable">-fr</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">yarn</span> build</pre></td></tr></table></figure> ]]> https://blog.jingxiyuan.cn/2022/11/03/%E4%B8%8A%E7%8F%AD%E4%BA%86/ @@ -422,15 +151,9 @@ yarn build Wed, 02 Nov 2022 16:29:00 +0800 +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#nodejs 依赖</span></pre></td></tr><tr><td data-num="2"></td><td><pre>crypto<span class="token punctuation">-</span>js </pre></td></tr><tr><td data-num="3"></td><td><pre>prettytable </pre></td></tr><tr><td data-num="4"></td><td><pre>dotenv </pre></td></tr><tr><td data-num="5"></td><td><pre>jsdom </pre></td></tr><tr><td data-num="6"></td><td><pre>date<span class="token punctuation">-</span>fns </pre></td></tr><tr><td data-num="7"></td><td><pre>tough<span class="token punctuation">-</span>cookie </pre></td></tr><tr><td data-num="8"></td><td><pre>tslib </pre></td></tr><tr><td data-num="9"></td><td><pre>ws@7.4.3 </pre></td></tr><tr><td data-num="10"></td><td><pre>ts<span class="token punctuation">-</span>md5 </pre></td></tr><tr><td data-num="11"></td><td><pre>jsdom <span class="token punctuation">-</span>g </pre></td></tr><tr><td data-num="12"></td><td><pre>jieba </pre></td></tr><tr><td data-num="13"></td><td><pre>fs </pre></td></tr><tr><td data-num="14"></td><td><pre>form<span class="token punctuation">-</span>data </pre></td></tr><tr><td data-num="15"></td><td><pre>json5 </pre></td></tr><tr><td data-num="16"></td><td><pre>global<span class="token punctuation">-</span>agent </pre></td></tr><tr><td data-num="17"></td><td><pre>png<span class="token punctuation">-</span>js </pre></td></tr><tr><td data-num="18"></td><td><pre>@types/node </pre></td></tr><tr><td data-num="19"></td><td><pre>require </pre></td></tr><tr><td data-num="20"></td><td><pre>typescript </pre></td></tr><tr><td data-num="21"></td><td><pre>js<span class="token punctuation">-</span>base64 </pre></td></tr><tr><td data-num="22"></td><td><pre>axios</pre></td></tr><tr><td data-num="23"></td><td><pre><span class="token comment">#pythone 依赖</span></pre></td></tr><tr><td data-num="24"></td><td><pre>requests </pre></td></tr><tr><td data-num="25"></td><td><pre>canvas </pre></td></tr><tr><td data-num="26"></td><td><pre>ping3 </pre></td></tr><tr><td data-num="27"></td><td><pre>jieba </pre></td></tr><tr><td data-num="28"></td><td><pre>aiohttp </pre></td></tr><tr><td data-num="29"></td><td><pre>PyExecJS</pre></td></tr><tr><td data-num="30"></td><td><pre><span class="token comment">#Linux 依赖</span></pre></td></tr><tr><td data-num="31"></td><td><pre>bizCode</pre></td></tr><tr><td data-num="32"></td><td><pre>bizMsg</pre></td></tr><tr><td data-num="33"></td><td><pre>lxml</pre></td></tr></table></figure><h4 id="其它"><a class="anchor" href="#其它">#</a> 其它</h4> +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#配置国内源</span></pre></td></tr><tr><td data-num="2"></td><td><pre>pip config <span class="token parameter variable">--global</span> <span class="token builtin class-name">set</span> global.index-url https://mirrors.aliyun.com/pypi/simple/</pre></td></tr><tr><td data-num="3"></td><td><pre>pip config <span class="token parameter variable">--global</span> <span class="token builtin class-name">set</span> install.trusted-host https://mirrors.aliyun.com</pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token comment">#升级 pip</span></pre></td></tr><tr><td data-num="6"></td><td><pre>pip <span class="token function">install</span> <span class="token parameter variable">--upgrade</span> pip</pre></td></tr><tr><td data-num="7"></td><td><pre></pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token comment">#更新青龙</span></pre></td></tr><tr><td data-num="9"></td><td><pre>ql update</pre></td></tr><tr><td data-num="10"></td><td><pre></pre></td></tr><tr><td data-num="11"></td><td><pre><span class="token comment">#已知要安装的依赖(不安装部分脚本任务会失败)</span></pre></td></tr><tr><td data-num="12"></td><td><pre><span class="token function">pnpm</span> <span class="token function">install</span> ds</pre></td></tr><tr><td data-num="13"></td><td><pre></pre></td></tr><tr><td data-num="14"></td><td><pre><span class="token comment">#一键安装所有依赖(基于 Faker 一键脚本安装的青龙</span></pre></td></tr><tr><td data-num="15"></td><td><pre>可通过执行/ql/data/scripts下的QLDependency.sh脚本安装,如脚本已经更新则通过下面命令执行</pre></td></tr><tr><td data-num="16"></td><td><pre><span class="token function">curl</span> <span class="token parameter variable">-fsSL</span> https://git.metauniverse-cn.com/https://raw.githubusercontent.com/shufflewzc/QLDependency/main/Shell/QLOneKeyDependency.sh <span class="token operator">|</span> <span class="token function">sh</span></pre></td></tr><tr><td data-num="17"></td><td><pre></pre></td></tr><tr><td data-num="18"></td><td><pre><span class="token comment">#一般出现这种错误:(缺依赖)</span></pre></td></tr><tr><td data-num="19"></td><td><pre>Error: Cannot <span class="token function">find</span> module <span class="token string">'xx'</span></pre></td></tr><tr><td data-num="20"></td><td><pre>执行pnpm <span class="token function">install</span> xxx</pre></td></tr><tr><td data-num="21"></td><td><pre></pre></td></tr><tr><td data-num="22"></td><td><pre><span class="token comment">#一般出现这种错误:(缺文件)</span></pre></td></tr><tr><td data-num="23"></td><td><pre>Error: Cannot <span class="token function">find</span> module <span class="token string">'./xx'</span></pre></td></tr><tr><td data-num="24"></td><td><pre>那就是拉库命令不完整,请检查或复制完整的拉库命</pre></td></tr><tr><td data-num="25"></td><td><pre></pre></td></tr><tr><td data-num="26"></td><td><pre><span class="token comment">#Python3 依赖安装失败修复(基于 Faker 一键脚本安装的青龙)</span></pre></td></tr><tr><td data-num="27"></td><td><pre><span class="token function">curl</span> <span class="token parameter variable">-sS</span> https://bootstrap.pypa.io/get-pip.py <span class="token operator">|</span> python3</pre></td></tr></table></figure> ]]> https://blog.jingxiyuan.cn/2022/10/21/Hexo-Theme-Shoka-Valine%E8%AF%84%E8%AE%BA%E9%85%8D%E7%BD%AE/ @@ -806,37 +350,7 @@ curl -sS https://bootstrap.pypa.io/get-pip.py | python3 <img data-src="https://file.jingxiyuan.cn/images/2022/10/21/2022-10-21-11-54-32204f14d87e95b59e.jpg" alt="" /></li> </ol> <h4 id="修改themeshoka配置"><a class="anchor" href="#修改themeshoka配置">#</a> 修改 Theme.Shoka 配置</h4> -<pre><code class="language-yaml">valine: -  appId: 粘贴5中获取的App ID #Your_appId - appKey: 粘贴5中获取的App Key #Your_appkey - placeholder: ヽ(○´∀`)ノ♪欢迎畅所欲言 # Comment box placeholder - avatar: mp #默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro - pageSize: 10 # Pagination size - lang: zh-CN - visitor: true # Article reading statistic 这个要设置为false,以免与 leancloud_visitors 突冲 - NoRecordIP: false # Whether to record the commenter IP - serverURLs: # When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in) - powerMode: true - tagMeta: - visitor: 新朋友 - master: 博主 - friend: 小伙伴 - investor: 金主粑粑 - tagColor: - master: &quot;var(--color-orange)&quot; - friend: &quot;var(--color-aqua)&quot; - investor: &quot;var(--color-pink)&quot; - tagMember: - master: - # - hash of master@email.com - # - hash of master2@email.com - friend: - # - hash of friend@email.com - # - hash of friend2@email.com - investor: - # - hash of investor1@email.com -</code></pre> - ]]> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token key atrule">valine</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> appId<span class="token punctuation">:</span> 粘贴5中获取的App ID <span class="token comment">#Your_appId</span></pre></td></tr><tr><td data-num="3"></td><td><pre> <span class="token key atrule">appKey</span><span class="token punctuation">:</span> 粘贴5中获取的App Key <span class="token comment">#Your_appkey</span></pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token key atrule">placeholder</span><span class="token punctuation">:</span> ヽ(○´∀`)ノ♪欢迎畅所欲言 <span class="token comment"># Comment box placeholder</span></pre></td></tr><tr><td data-num="5"></td><td><pre> <span class="token key atrule">avatar</span><span class="token punctuation">:</span> mp <span class="token comment">#默认头像设置 Gravatar style : mp, identicon, monsterid, wavatar, robohash, retro</span></pre></td></tr><tr><td data-num="6"></td><td><pre> <span class="token key atrule">pageSize</span><span class="token punctuation">:</span> <span class="token number">10</span> <span class="token comment"># Pagination size</span></pre></td></tr><tr><td data-num="7"></td><td><pre> <span class="token key atrule">lang</span><span class="token punctuation">:</span> zh<span class="token punctuation">-</span>CN</pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token key atrule">visitor</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># Article reading statistic 这个要设置为 false,以免与 leancloud_visitors 突冲 </span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token key atrule">NoRecordIP</span><span class="token punctuation">:</span> <span class="token boolean important">false</span> <span class="token comment"># Whether to record the commenter IP</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token key atrule">serverURLs</span><span class="token punctuation">:</span> <span class="token comment"># When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)</span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token key atrule">powerMode</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token key atrule">tagMeta</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token key atrule">visitor</span><span class="token punctuation">:</span> 新朋友</pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token key atrule">master</span><span class="token punctuation">:</span> 博主</pre></td></tr><tr><td data-num="15"></td><td><pre> <span class="token key atrule">friend</span><span class="token punctuation">:</span> 小伙伴</pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token key atrule">investor</span><span class="token punctuation">:</span> 金主粑粑</pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token key atrule">tagColor</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token key atrule">master</span><span class="token punctuation">:</span> <span class="token string">"var(--color-orange)"</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token key atrule">friend</span><span class="token punctuation">:</span> <span class="token string">"var(--color-aqua)"</span></pre></td></tr><tr><td data-num="20"></td><td><pre> <span class="token key atrule">investor</span><span class="token punctuation">:</span> <span class="token string">"var(--color-pink)"</span></pre></td></tr><tr><td data-num="21"></td><td><pre> <span class="token key atrule">tagMember</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="22"></td><td><pre> <span class="token key atrule">master</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token comment"># - hash of master@email.com</span></pre></td></tr><tr><td data-num="24"></td><td><pre> <span class="token comment"># - hash of master2@email.com</span></pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token key atrule">friend</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="26"></td><td><pre> <span class="token comment"># - hash of friend@email.com</span></pre></td></tr><tr><td data-num="27"></td><td><pre> <span class="token comment"># - hash of friend2@email.com</span></pre></td></tr><tr><td data-num="28"></td><td><pre> <span class="token key atrule">investor</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="29"></td><td><pre> <span class="token comment"># - hash of investor1@email.com</span></pre></td></tr></table></figure> ]]> 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/ @@ -868,25 +382,7 @@ curl -sS https://bootstrap.pypa.io/get-pip.py | python3 <ul> <li>此处配置为 nginx 反向代理,配置完成后可在外网连接访问</li> </ul> -<pre><code class="language-yaml">stream &#123; - - #极空间-docker-mariadb - upstream mariadb &#123; - hash $remote_addr consistent; - server mariadb的ip:端口; - &#125; - - server &#123; - listen 监听端口; - - proxy_connect_timeout 30s; - proxy_timeout 300s; - proxy_pass mariadb; - &#125; - -&#125; -</code></pre> - ]]> +<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> </pre></td></tr><tr><td data-num="3"></td><td><pre> <span class="token comment">#极空间 - docker-mariadb</span></pre></td></tr><tr><td data-num="4"></td><td><pre> upstream mariadb <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="5"></td><td><pre> hash $remote_addr consistent;</pre></td></tr><tr><td data-num="6"></td><td><pre> server mariadb的ip<span class="token punctuation">:</span>端口;</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> server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="10"></td><td><pre> listen 监听端口;</pre></td></tr><tr><td data-num="11"></td><td><pre></pre></td></tr><tr><td data-num="12"></td><td><pre> proxy_connect_timeout 30s;</pre></td></tr><tr><td data-num="13"></td><td><pre> proxy_timeout 300s;</pre></td></tr><tr><td data-num="14"></td><td><pre> proxy_pass mariadb;</pre></td></tr><tr><td data-num="15"></td><td><pre> <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> ]]> 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/ @@ -912,36 +408,16 @@ curl -sS https://bootstrap.pypa.io/get-pip.py | python3 <ul> <li>如需使用 https 访问,需要在 wp-config.php 中加入以下代码,否则资源文件无法访问。</li> </ul> -<pre><code class="language-php">if((!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) &#123; - $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; - $_SERVER['HTTPS'] = 'on'; -&#125; -</code></pre> -<ul> +<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> <li>后台安装插件时如果跳转到 ftp 配置,则需要在 wp-config.php 中加入以下代码,并到 wp-content 目录下创建 tmp 目录,最后还需要给 tmp 目录赋予读写权限。</li> </ul> -<pre><code class="language-php">define('WP_TEMP_DIR', ABSPATH.'wp-content/tmp'); -define('FS_METHOD', 'direct'); -define('FS_CHMOD_DIR', 0777); -define('FS_CHMOD_FILE', 0777); -</code></pre> -<ul> +<figure class="highlight php"><figcaption data-lang="PHP"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">define</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'WP_TEMP_DIR'</span><span class="token punctuation">,</span> <span class="token constant">ABSPATH</span><span class="token operator">.</span><span class="token string single-quoted-string">'wp-content/tmp'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">define</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'FS_METHOD'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'direct'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">define</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'FS_CHMOD_DIR'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token function">define</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'FS_CHMOD_FILE'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr></table></figure><ul> <li>目录和文件所有者、组会自动变为 root,目前我是通过访问页面时通过命令修正。暂时未发现问题,如果不行则只能通过定时任务来定时修正了。需要在 wp-config.php 中加入以下代码。</li> </ul> -<pre><code class="language-php">chown('/var/www/html', 'www-data'); -chgrp('/var/www/html', 'www-data'); -chmod('/var/www/html/wp-content/plugins', 0777); -chmod('/var/www/html/wp-content/themes', 0777); -chmod('/var/www/html/wp-content/tmp', 0777); -</code></pre> -<ul> +<figure class="highlight php"><figcaption data-lang="PHP"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">chown</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'www-data'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">chgrp</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'www-data'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">chmod</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html/wp-content/plugins'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token function">chmod</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html/wp-content/themes'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token function">chmod</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/var/www/html/wp-content/tmp'</span><span class="token punctuation">,</span> <span class="token number">0777</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr></table></figure><ul> <li>隐藏后台访问需要在 wp-login.php 中加入以下代码,key、value 和 https://www.xxx.com/ 需要修改为自己的。修改后只能通过 https://www.xxx.com/wp-login.php?key=value 访问,其它访问需要登录的页面都会跳转到配置的 https://www.xxx.com/ 地址。</li> </ul> -<pre><code class="language-php">if($_GET['key'] != 'value') &#123; - header('Location: https://www.xxx.com/'); -&#125; -</code></pre> - ]]> +<figure class="highlight php"><figcaption data-lang="PHP"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'key'</span><span class="token punctuation">]</span> <span class="token operator">!=</span> <span class="token string single-quoted-string">'value'</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Location: https://www.xxx.com/'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure> ]]> https://blog.jingxiyuan.cn/2022/10/19/%E9%95%BF%E4%BA%86%E4%B8%80%E5%B2%81/ @@ -983,221 +459,7 @@ chmod('/var/www/html/wp-content/tmp', 0777); <li>被监控端需要把命令执行脚本放入 libexec 目录中</li> <li>被监控端自动安装脚本(可借鉴)</li> </ol> -<pre><code class="language-bash">1、请先修改脚本中的服务端IP。 -2、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令,弹出选择窗口后选择no。 -3、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录,目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。 - -#!/bin/bash -#服务端ip -SERVER_IP=10.10.10.121 -#安装目录 -INSTALL_HOME=`pwd` -#安装ubuntu版本 -INSTALL_UBUNTU() -&#123; - sudo apt-get update - sudo apt-get install -y autoconf automake gcc libc6 libmcrypt-dev make libssl-dev wget openssl - - cd /tmp - #wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz - cp $INSTALL_HOME/Ubuntu/nrpe.tar.gz ./ - tar xzf nrpe.tar.gz - - cd /tmp/nrpe-nrpe-4.0.3/ - sudo ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/ - sudo make all - - sudo make install-groups-users - - sudo make install - - sudo make install-config - - sudo sh -c &quot;echo &gt;&gt; /etc/services&quot; - sudo sh -c &quot;sudo echo '# Nagios services' &gt;&gt; /etc/services&quot; - sudo sh -c &quot;sudo echo 'nrpe 5666/tcp' &gt;&gt; /etc/services&quot; - - #判断系统是高版本还是低版本 - VERSION=`lsb_release -r --short` - IS_LOW_VERSION=`echo &quot;$VERSION &lt; 15&quot; | bc` - - if [ $IS_LOW_VERSION = 1 ]; then - #低版本 - sudo make install-init - else - #高版本 - sudo make install-init - sudo systemctl enable nrpe.service - fi - - sudo mkdir -p /etc/ufw/applications.d - sudo sh -c &quot;echo '[NRPE]' &gt; /etc/ufw/applications.d/nagios&quot; - sudo sh -c &quot;echo 'title=Nagios Remote Plugin Executor' &gt;&gt; /etc/ufw/applications.d/nagios&quot; - sudo sh -c &quot;echo 'description=Allows remote execution of Nagios plugins' &gt;&gt; /etc/ufw/applications.d/nagios&quot; - sudo sh -c &quot;echo 'ports=5666/tcp' &gt;&gt; /etc/ufw/applications.d/nagios&quot; - sudo ufw allow NRPE - sudo ufw reload - - sudo sh -c &quot;sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg&quot; - - cd $INSTALL_HOME - sudo cp ./sh/* /usr/local/nagios/libexec/ - sudo chmod +xr /usr/local/nagios/libexec/* - - sudo 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; - sudo sh -c &quot;echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo 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; - sudo 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; - NETWORK_INDEX=1 - for NETWORK_NAME in `cat /proc/net/dev | awk '&#123;i++; if(i&gt;2)&#123;print $1&#125;&#125;' | sed 's/^[\t]*//g' | sed 's/[:]*$//g'`;do - if [ $NETWORK_NAME != 'lo' ]; then - sudo sh -c &quot;echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - NETWORK_INDEX=`expr $NETWORK_INDEX + 1 ` - fi - done - - if [ $IS_LOW_VERSION = 1 ]; then - #低版本 - sudo start nrpe - else - #高版本 - sudo systemctl start nrpe.service - fi -&#125; - -#安装centos版本 -INSTALL_CENTOS() -&#123; - yum install -y gcc glibc glibc-common openssl openssl-devel perl wget - - cd /tmp - #wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz - cp $INSTALL_HOME/CentOS/nrpe.tar.gz ./ - tar xzf nrpe.tar.gz - - cd /tmp/nrpe-nrpe-4.0.3/ - ./configure --enable-command-args - make all - - make install-groups-users - - make install - - make install-config - - echo &gt;&gt; /etc/services - echo '# Nagios services' &gt;&gt; /etc/services - echo 'nrpe 5666/tcp' &gt;&gt; /etc/services - - #判断系统是高版本还是低版本 - VERSION=`rpm -q centos-release|cut -d- -f3` - #安装bc命令 - yum -y install bc - IS_LOW_VERSION=`echo &quot;$VERSION &lt; 7&quot; | bc` - - if [ $IS_LOW_VERSION = 1 ]; then - #低版本 - make install-init - - iptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT - service iptables save - ip6tables -I INPUT -p tcp --destination-port 5666 -j ACCEPT - service ip6tables save - else - #高版本 - make install-init - systemctl enable nrpe.service - - firewall-cmd --zone=public --add-port=5666/tcp - firewall-cmd --zone=public --add-port=5666/tcp --permanent - fi - - sudo sh -c &quot;sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg&quot; - - cd $INSTALL_HOME - sudo cp ./sh/* /usr/local/nagios/libexec/ - sudo chmod +xr /usr/local/nagios/libexec/* - - sudo 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; - sudo sh -c &quot;echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo sh -c &quot;echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - sudo 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; - sudo 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; - NETWORK_INDEX=1 - for NETWORK_NAME in `cat /proc/net/dev | awk '&#123;i++; if(i&gt;2)&#123;print $1&#125;&#125;' | sed 's/^[\t]*//g' | sed 's/[:]*$//g'`;do - if [ $NETWORK_NAME != 'lo' ]; then - sudo sh -c &quot;echo 'command[check_network$NETWORK_INDEX]=/usr/local/nagios/libexec/check_network.sh $NETWORK_NAME' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot; - NETWORK_INDEX=`expr $NETWORK_INDEX + 1 ` - fi - done - - if [ $IS_LOW_VERSION = 1 ]; then - #低版本 - if [ $(echo &quot;$VERSION &lt; 6&quot; | bc) -eq 1 ]; then - service nrpe start - else - start nrpe - fi - else - #高版本 - systemctl start nrpe.service - fi -&#125; - -#安装其它版本 -INSTALL_OTHER() -&#123; - echo &quot;Not supported at the moment.&quot; -&#125; - -#根据不同系统安装不同版本 -INSTALL() -&#123; - if grep -Eqii &quot;CentOS&quot; /etc/issue || grep -Eq &quot;CentOS&quot; /etc/*-release; then - DISTRO='CentOS' - PM='yum' - INSTALL_CENTOS - elif grep -Eqi &quot;Red Hat Enterprise Linux Server&quot; /etc/issue || grep -Eq &quot;Red Hat Enterprise Linux Server&quot; /etc/*-release; then - DISTRO='RHEL' - PM='yum' - INSTALL_OTHER - elif grep -Eqi &quot;Aliyun&quot; /etc/issue || grep -Eq &quot;Aliyun&quot; /etc/*-release; then - DISTRO='Aliyun' - PM='yum' - INSTALL_OTHER - elif grep -Eqi &quot;Fedora&quot; /etc/issue || grep -Eq &quot;Fedora&quot; /etc/*-release; then - DISTRO='Fedora' - PM='yum' - INSTALL_OTHER - elif grep -Eqi &quot;Debian&quot; /etc/issue || grep -Eq &quot;Debian&quot; /etc/*-release; then - DISTRO='Debian' - PM='apt' - INSTALL_OTHER - elif grep -Eqi &quot;Ubuntu&quot; /etc/issue || grep -Eq &quot;Ubuntu&quot; /etc/*-release; then - DISTRO='Ubuntu' - PM='apt' - INSTALL_UBUNTU - elif grep -Eqi &quot;Raspbian&quot; /etc/issue || grep -Eq &quot;Raspbian&quot; /etc/*-release; then - DISTRO='Raspbian' - PM='apt' - INSTALL_OTHER - else - echo &quot;unknow linux.&quot; - exit 1 - fi - echo $DISTRO -&#125; - -INSTALL - -exit 0 -</code></pre> -<h4 id="登录"><a class="anchor" href="#登录">#</a> 登录</h4> +<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> <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> <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> </pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token builtin class-name">cd</span> /tmp</pre></td></tr><tr><td data-num="17"></td><td><pre> <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> <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> <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> <span class="token builtin class-name">cd</span> /tmp/nrpe-nrpe-4.0.3/</pre></td></tr><tr><td data-num="22"></td><td><pre> <span class="token function">sudo</span> ./configure --enable-command-args --with-ssl-lib<span class="token operator">=</span>/usr/lib/x86_64-linux-gnu/</pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> all</pre></td></tr><tr><td data-num="24"></td><td><pre></pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> install-groups-users</pre></td></tr><tr><td data-num="26"></td><td><pre></pre></td></tr><tr><td data-num="27"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> <span class="token function">install</span></pre></td></tr><tr><td data-num="28"></td><td><pre></pre></td></tr><tr><td data-num="29"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> install-config</pre></td></tr><tr><td data-num="30"></td><td><pre></pre></td></tr><tr><td data-num="31"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo >> /etc/services"</span></pre></td></tr><tr><td data-num="32"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sudo echo '# Nagios services' >> /etc/services"</span></pre></td></tr><tr><td data-num="33"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sudo echo 'nrpe 5666/tcp' >> /etc/services"</span></pre></td></tr><tr><td data-num="34"></td><td><pre> </pre></td></tr><tr><td data-num="35"></td><td><pre> <span class="token comment">#判断系统是高版本还是低版本</span></pre></td></tr><tr><td data-num="36"></td><td><pre> <span class="token assign-left variable">VERSION</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span>lsb_release <span class="token parameter variable">-r</span> <span class="token parameter variable">--short</span><span class="token variable">`</span></span></pre></td></tr><tr><td data-num="37"></td><td><pre> <span class="token assign-left variable">IS_LOW_VERSION</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">$VERSION</span> &lt; 15"</span> <span class="token operator">|</span> <span class="token function">bc</span><span class="token variable">`</span></span></pre></td></tr><tr><td data-num="38"></td><td><pre></pre></td></tr><tr><td data-num="39"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$IS_LOW_VERSION</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="40"></td><td><pre> <span class="token comment">#低版本</span></pre></td></tr><tr><td data-num="41"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> install-init</pre></td></tr><tr><td data-num="42"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="43"></td><td><pre> <span class="token comment">#高版本</span></pre></td></tr><tr><td data-num="44"></td><td><pre> <span class="token function">sudo</span> <span class="token function">make</span> install-init</pre></td></tr><tr><td data-num="45"></td><td><pre> <span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> nrpe.service</pre></td></tr><tr><td data-num="46"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="47"></td><td><pre> </pre></td></tr><tr><td data-num="48"></td><td><pre> <span class="token function">sudo</span> <span class="token function">mkdir</span> <span class="token parameter variable">-p</span> /etc/ufw/applications.d</pre></td></tr><tr><td data-num="49"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo '[NRPE]' > /etc/ufw/applications.d/nagios"</span></pre></td></tr><tr><td data-num="50"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'title=Nagios Remote Plugin Executor' >> /etc/ufw/applications.d/nagios"</span></pre></td></tr><tr><td data-num="51"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'description=Allows remote execution of Nagios plugins' >> /etc/ufw/applications.d/nagios"</span></pre></td></tr><tr><td data-num="52"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'ports=5666/tcp' >> /etc/ufw/applications.d/nagios"</span></pre></td></tr><tr><td data-num="53"></td><td><pre> <span class="token function">sudo</span> ufw allow NRPE</pre></td></tr><tr><td data-num="54"></td><td><pre> <span class="token function">sudo</span> ufw reload</pre></td></tr><tr><td data-num="55"></td><td><pre> </pre></td></tr><tr><td data-num="56"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sed -i '/^allowed_hosts=/s/$/,<span class="token variable">$SERVER_IP</span>/' /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="57"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="58"></td><td><pre> </pre></td></tr><tr><td data-num="59"></td><td><pre> <span class="token builtin class-name">cd</span> <span class="token variable">$INSTALL_HOME</span></pre></td></tr><tr><td data-num="60"></td><td><pre> <span class="token function">sudo</span> <span class="token function">cp</span> ./sh/* /usr/local/nagios/libexec/</pre></td></tr><tr><td data-num="61"></td><td><pre> <span class="token function">sudo</span> <span class="token function">chmod</span> +xr /usr/local/nagios/libexec/*</pre></td></tr><tr><td data-num="62"></td><td><pre> </pre></td></tr><tr><td data-num="63"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"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' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="64"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="65"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="66"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="67"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \<span class="token variable">$ARG1</span>\$' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="68"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="69"></td><td><pre> <span class="token assign-left variable">NETWORK_INDEX</span><span class="token operator">=</span><span class="token number">1</span></pre></td></tr><tr><td data-num="70"></td><td><pre> <span class="token keyword">for</span> <span class="token for-or-select variable">NETWORK_NAME</span> <span class="token keyword">in</span> <span class="token variable"><span class="token variable">`</span><span class="token function">cat</span> /proc/net/dev <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'&#123;i++; if(i>2)&#123;print $1&#125;&#125;'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/^[\t]*//g'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/[:]*$//g'</span><span class="token variable">`</span></span><span class="token punctuation">;</span><span class="token keyword">do</span></pre></td></tr><tr><td data-num="71"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$NETWORK_NAME</span> <span class="token operator">!=</span> <span class="token string">'lo'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="72"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_network<span class="token variable">$NETWORK_INDEX</span>]=/usr/local/nagios/libexec/check_network.sh <span class="token variable">$NETWORK_NAME</span>' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="73"></td><td><pre> <span class="token assign-left variable">NETWORK_INDEX</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">expr</span> $NETWORK_INDEX + <span class="token number">1</span> <span class="token variable">`</span></span></pre></td></tr><tr><td data-num="74"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="75"></td><td><pre> <span class="token keyword">done</span></pre></td></tr><tr><td data-num="76"></td><td><pre> </pre></td></tr><tr><td data-num="77"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$IS_LOW_VERSION</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="78"></td><td><pre> <span class="token comment">#低版本</span></pre></td></tr><tr><td data-num="79"></td><td><pre> <span class="token function">sudo</span> start nrpe</pre></td></tr><tr><td data-num="80"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="81"></td><td><pre> <span class="token comment">#高版本</span></pre></td></tr><tr><td data-num="82"></td><td><pre> <span class="token function">sudo</span> systemctl start nrpe.service</pre></td></tr><tr><td data-num="83"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="84"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="85"></td><td><pre></pre></td></tr><tr><td data-num="86"></td><td><pre><span class="token comment">#安装 centos 版本</span></pre></td></tr><tr><td data-num="87"></td><td><pre><span class="token function-name function">INSTALL_CENTOS</span><span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="88"></td><td><pre><span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="89"></td><td><pre> yum <span class="token function">install</span> <span class="token parameter variable">-y</span> gcc glibc glibc-common openssl openssl-devel perl <span class="token function">wget</span></pre></td></tr><tr><td data-num="90"></td><td><pre></pre></td></tr><tr><td data-num="91"></td><td><pre> <span class="token builtin class-name">cd</span> /tmp</pre></td></tr><tr><td data-num="92"></td><td><pre> <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="93"></td><td><pre> <span class="token function">cp</span> <span class="token variable">$INSTALL_HOME</span>/CentOS/nrpe.tar.gz ./</pre></td></tr><tr><td data-num="94"></td><td><pre> <span class="token function">tar</span> xzf nrpe.tar.gz</pre></td></tr><tr><td data-num="95"></td><td><pre></pre></td></tr><tr><td data-num="96"></td><td><pre> <span class="token builtin class-name">cd</span> /tmp/nrpe-nrpe-4.0.3/</pre></td></tr><tr><td data-num="97"></td><td><pre> ./configure --enable-command-args</pre></td></tr><tr><td data-num="98"></td><td><pre> <span class="token function">make</span> all</pre></td></tr><tr><td data-num="99"></td><td><pre></pre></td></tr><tr><td data-num="100"></td><td><pre> <span class="token function">make</span> install-groups-users</pre></td></tr><tr><td data-num="101"></td><td><pre></pre></td></tr><tr><td data-num="102"></td><td><pre> <span class="token function">make</span> <span class="token function">install</span></pre></td></tr><tr><td data-num="103"></td><td><pre></pre></td></tr><tr><td data-num="104"></td><td><pre> <span class="token function">make</span> install-config</pre></td></tr><tr><td data-num="105"></td><td><pre></pre></td></tr><tr><td data-num="106"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token operator">>></span> /etc/services</pre></td></tr><tr><td data-num="107"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token string">'# Nagios services'</span> <span class="token operator">>></span> /etc/services</pre></td></tr><tr><td data-num="108"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token string">'nrpe 5666/tcp'</span> <span class="token operator">>></span> /etc/services</pre></td></tr><tr><td data-num="109"></td><td><pre> </pre></td></tr><tr><td data-num="110"></td><td><pre> <span class="token comment">#判断系统是高版本还是低版本</span></pre></td></tr><tr><td data-num="111"></td><td><pre> <span class="token assign-left variable">VERSION</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">rpm</span> <span class="token parameter variable">-q</span> centos-release<span class="token operator">|</span><span class="token function">cut</span> -d- <span class="token parameter variable">-f3</span><span class="token variable">`</span></span></pre></td></tr><tr><td data-num="112"></td><td><pre> <span class="token comment">#安装 bc 命令</span></pre></td></tr><tr><td data-num="113"></td><td><pre> yum <span class="token parameter variable">-y</span> <span class="token function">install</span> <span class="token function">bc</span></pre></td></tr><tr><td data-num="114"></td><td><pre> <span class="token assign-left variable">IS_LOW_VERSION</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">$VERSION</span> &lt; 7"</span> <span class="token operator">|</span> <span class="token function">bc</span><span class="token variable">`</span></span></pre></td></tr><tr><td data-num="115"></td><td><pre></pre></td></tr><tr><td data-num="116"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$IS_LOW_VERSION</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="117"></td><td><pre> <span class="token comment">#低版本</span></pre></td></tr><tr><td data-num="118"></td><td><pre> <span class="token function">make</span> install-init</pre></td></tr><tr><td data-num="119"></td><td><pre> </pre></td></tr><tr><td data-num="120"></td><td><pre> iptables <span class="token parameter variable">-I</span> INPUT <span class="token parameter variable">-p</span> tcp --destination-port <span class="token number">5666</span> <span class="token parameter variable">-j</span> ACCEPT</pre></td></tr><tr><td data-num="121"></td><td><pre> <span class="token function">service</span> iptables save</pre></td></tr><tr><td data-num="122"></td><td><pre> ip6tables <span class="token parameter variable">-I</span> INPUT <span class="token parameter variable">-p</span> tcp --destination-port <span class="token number">5666</span> <span class="token parameter variable">-j</span> ACCEPT</pre></td></tr><tr><td data-num="123"></td><td><pre> <span class="token function">service</span> ip6tables save</pre></td></tr><tr><td data-num="124"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="125"></td><td><pre> <span class="token comment">#高版本</span></pre></td></tr><tr><td data-num="126"></td><td><pre> <span class="token function">make</span> install-init</pre></td></tr><tr><td data-num="127"></td><td><pre> systemctl <span class="token builtin class-name">enable</span> nrpe.service</pre></td></tr><tr><td data-num="128"></td><td><pre> </pre></td></tr><tr><td data-num="129"></td><td><pre> firewall-cmd <span class="token parameter variable">--zone</span><span class="token operator">=</span>public --add-port<span class="token operator">=</span><span class="token number">5666</span>/tcp</pre></td></tr><tr><td data-num="130"></td><td><pre> firewall-cmd <span class="token parameter variable">--zone</span><span class="token operator">=</span>public --add-port<span class="token operator">=</span><span class="token number">5666</span>/tcp <span class="token parameter variable">--permanent</span></pre></td></tr><tr><td data-num="131"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="132"></td><td><pre> </pre></td></tr><tr><td data-num="133"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sed -i '/^allowed_hosts=/s/$/,<span class="token variable">$SERVER_IP</span>/' /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="134"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="135"></td><td><pre> </pre></td></tr><tr><td data-num="136"></td><td><pre> <span class="token builtin class-name">cd</span> <span class="token variable">$INSTALL_HOME</span></pre></td></tr><tr><td data-num="137"></td><td><pre> <span class="token function">sudo</span> <span class="token function">cp</span> ./sh/* /usr/local/nagios/libexec/</pre></td></tr><tr><td data-num="138"></td><td><pre> <span class="token function">sudo</span> <span class="token function">chmod</span> +xr /usr/local/nagios/libexec/*</pre></td></tr><tr><td data-num="139"></td><td><pre> </pre></td></tr><tr><td data-num="140"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"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' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="141"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="142"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="143"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="144"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \<span class="token variable">$ARG1</span>\$' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="145"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="146"></td><td><pre> <span class="token assign-left variable">NETWORK_INDEX</span><span class="token operator">=</span><span class="token number">1</span></pre></td></tr><tr><td data-num="147"></td><td><pre> <span class="token keyword">for</span> <span class="token for-or-select variable">NETWORK_NAME</span> <span class="token keyword">in</span> <span class="token variable"><span class="token variable">`</span><span class="token function">cat</span> /proc/net/dev <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'&#123;i++; if(i>2)&#123;print $1&#125;&#125;'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/^[\t]*//g'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/[:]*$//g'</span><span class="token variable">`</span></span><span class="token punctuation">;</span><span class="token keyword">do</span></pre></td></tr><tr><td data-num="148"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$NETWORK_NAME</span> <span class="token operator">!=</span> <span class="token string">'lo'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="149"></td><td><pre> <span class="token function">sudo</span> <span class="token function">sh</span> <span class="token parameter variable">-c</span> <span class="token string">"echo 'command[check_network<span class="token variable">$NETWORK_INDEX</span>]=/usr/local/nagios/libexec/check_network.sh <span class="token variable">$NETWORK_NAME</span>' >> /usr/local/nagios/etc/nrpe.cfg"</span></pre></td></tr><tr><td data-num="150"></td><td><pre> <span class="token assign-left variable">NETWORK_INDEX</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">expr</span> $NETWORK_INDEX + <span class="token number">1</span> <span class="token variable">`</span></span></pre></td></tr><tr><td data-num="151"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="152"></td><td><pre> <span class="token keyword">done</span></pre></td></tr><tr><td data-num="153"></td><td><pre> </pre></td></tr><tr><td data-num="154"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$IS_LOW_VERSION</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="155"></td><td><pre> <span class="token comment">#低版本</span></pre></td></tr><tr><td data-num="156"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">$VERSION</span> &lt; 6"</span> <span class="token operator">|</span> <span class="token function">bc</span><span class="token variable">)</span></span> <span class="token parameter variable">-eq</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="157"></td><td><pre> <span class="token function">service</span> nrpe start</pre></td></tr><tr><td data-num="158"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="159"></td><td><pre> start nrpe</pre></td></tr><tr><td data-num="160"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="161"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="162"></td><td><pre> <span class="token comment">#高版本</span></pre></td></tr><tr><td data-num="163"></td><td><pre> systemctl start nrpe.service</pre></td></tr><tr><td data-num="164"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="165"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="166"></td><td><pre></pre></td></tr><tr><td data-num="167"></td><td><pre><span class="token comment">#安装其它版本</span></pre></td></tr><tr><td data-num="168"></td><td><pre><span class="token function-name function">INSTALL_OTHER</span><span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="169"></td><td><pre><span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="170"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token string">"Not supported at the moment."</span></pre></td></tr><tr><td data-num="171"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="172"></td><td><pre></pre></td></tr><tr><td data-num="173"></td><td><pre><span class="token comment">#根据不同系统安装不同版本</span></pre></td></tr><tr><td data-num="174"></td><td><pre><span class="token function-name function">INSTALL</span><span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="175"></td><td><pre><span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="176"></td><td><pre> <span class="token keyword">if</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqii</span> <span class="token string">"CentOS"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"CentOS"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="177"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'CentOS'</span></pre></td></tr><tr><td data-num="178"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'yum'</span></pre></td></tr><tr><td data-num="179"></td><td><pre> INSTALL_CENTOS</pre></td></tr><tr><td data-num="180"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Red Hat Enterprise Linux Server"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Red Hat Enterprise Linux Server"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="181"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'RHEL'</span></pre></td></tr><tr><td data-num="182"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'yum'</span></pre></td></tr><tr><td data-num="183"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="184"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Aliyun"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Aliyun"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="185"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Aliyun'</span></pre></td></tr><tr><td data-num="186"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'yum'</span></pre></td></tr><tr><td data-num="187"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="188"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Fedora"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Fedora"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="189"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Fedora'</span></pre></td></tr><tr><td data-num="190"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'yum'</span></pre></td></tr><tr><td data-num="191"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="192"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Debian"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Debian"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="193"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Debian'</span></pre></td></tr><tr><td data-num="194"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'apt'</span></pre></td></tr><tr><td data-num="195"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="196"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Ubuntu"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Ubuntu"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="197"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Ubuntu'</span></pre></td></tr><tr><td data-num="198"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'apt'</span></pre></td></tr><tr><td data-num="199"></td><td><pre> INSTALL_UBUNTU</pre></td></tr><tr><td data-num="200"></td><td><pre> <span class="token keyword">elif</span> <span class="token function">grep</span> <span class="token parameter variable">-Eqi</span> <span class="token string">"Raspbian"</span> /etc/issue <span class="token operator">||</span> <span class="token function">grep</span> <span class="token parameter variable">-Eq</span> <span class="token string">"Raspbian"</span> /etc/*-release<span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="201"></td><td><pre> <span class="token assign-left variable">DISTRO</span><span class="token operator">=</span><span class="token string">'Raspbian'</span></pre></td></tr><tr><td data-num="202"></td><td><pre> <span class="token assign-left variable">PM</span><span class="token operator">=</span><span class="token string">'apt'</span></pre></td></tr><tr><td data-num="203"></td><td><pre> INSTALL_OTHER</pre></td></tr><tr><td data-num="204"></td><td><pre> <span class="token keyword">else</span></pre></td></tr><tr><td data-num="205"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token string">"unknow linux."</span></pre></td></tr><tr><td data-num="206"></td><td><pre> <span class="token builtin class-name">exit</span> <span class="token number">1</span></pre></td></tr><tr><td data-num="207"></td><td><pre> <span class="token keyword">fi</span></pre></td></tr><tr><td data-num="208"></td><td><pre> <span class="token builtin class-name">echo</span> <span class="token variable">$DISTRO</span></pre></td></tr><tr><td data-num="209"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="210"></td><td><pre></pre></td></tr><tr><td data-num="211"></td><td><pre>INSTALL</pre></td></tr><tr><td data-num="212"></td><td><pre></pre></td></tr><tr><td data-num="213"></td><td><pre><span class="token builtin class-name">exit</span> <span class="token number">0</span></pre></td></tr></table></figure><h4 id="登录"><a class="anchor" href="#登录">#</a> 登录</h4> <p>地址:<span class="exturl" data-url="aHR0cDovL3huLS1JUC1mcjVjODZseDd6L25hZ2lvcw==">http:// 服务器 IP/nagios</span><br /> 用户名:nagiosadmin<br /> 密码:nagiosadmin</p> @@ -1205,13 +467,7 @@ exit 0 <ol> <li>监控日志未写入 mysql(可能是 ndoutils 服务不正常导致)。采用以下脚本命令解决</li> </ol> -<pre><code class="language-bash">#!/bin/bash -sudo rm -f /usr/local/nagios/var/ndo2db.pid -sudo rm -f /usr/local/nagios/var/ndo.sock -sudo systemctl restart ndo2db.service -sudo systemctl status ndo2db.service -</code></pre> - ]]> +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token shebang important">#!/bin/bash</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">sudo</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> /usr/local/nagios/var/ndo2db.pid</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">sudo</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> /usr/local/nagios/var/ndo.sock</pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token function">sudo</span> systemctl restart ndo2db.service</pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token function">sudo</span> systemctl status ndo2db.service</pre></td></tr></table></figure> ]]> 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/ @@ -1225,107 +481,22 @@ sudo systemctl status ndo2db.service <ol> <li>基础配置</li> </ol> -<pre><code class="language-yaml">port 6379 -requirepass 123456(密码,建议不设置) -vm-enabled no (虚拟内存,内存够的情况下可以不使用) -maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入) -bind 127.0.0.1 (注释掉,否则不能外部连接) -rdbchecksum no(持久化数据检查) -list-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb) -list-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩) -</code></pre> -<pre><code class="language-bash">sysctl vm.overcommit_memory=1 (立即生效) -修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。) -</code></pre> -<ol start="2"> +<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"> <li>禁用透明大页(影响性能)</li> </ol> -<pre><code class="language-bash">需要sudo su 切换到root身份(sudo 没用) -echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled -修改/etc/init.d/redis-server,加入/bin/echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled -</code></pre> -<ol start="3"> +<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"> <li>修复 TCP 警告</li> </ol> -<pre><code class="language-bash">sysctl net.core.somaxconn=1024(立即生效) -修改/etc/sysctl.conf添加net.core.somaxconn=1024 -</code></pre> -<ol start="4"> +<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"> <li>客户端缓冲区限制</li> </ol> -<pre><code class="language-yaml">客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。 -可以三种不同客户端的方式进行设置: -normal -&gt; 正常客户端 -slave -&gt; slave 和 MONITOR 客户端 -pubsub -&gt; 至少订阅了一个 pubsub channel 或 pattern 的客户端 -语法 : -client-output-buffer-limit &lt;class&gt;&lt;hard limit&gt; &lt;soft limit&gt; &lt;soft seconds&gt; -一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。 -例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据, -只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。 -把硬限制和软限制都设置为 0 来禁用该特性 -client-output-buffer-limit normal 0 0 0 -client-output-buffer-limit slave 5gb 512mb 60 -client-output-buffer-limit pubsub 32mb 8mb 60 -</code></pre> -<ol start="5"> +<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-num="7"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit &lt;class<span class="token punctuation">></span>&lt;hard limit<span class="token punctuation">></span> &lt;soft limit<span class="token punctuation">></span> &lt;soft seconds<span class="token punctuation">></span></pre></td></tr><tr><td data-num="8"></td><td><pre>一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。</pre></td></tr><tr><td data-num="9"></td><td><pre>例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,</pre></td></tr><tr><td data-num="10"></td><td><pre>只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。</pre></td></tr><tr><td data-num="11"></td><td><pre>把硬限制和软限制都设置为 0 来禁用该特性</pre></td></tr><tr><td data-num="12"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit normal 0 0 0</pre></td></tr><tr><td data-num="13"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit slave 5gb 512mb 60</pre></td></tr><tr><td data-num="14"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit pubsub 32mb 8mb 60</pre></td></tr></table></figure><ol start="5"> <li>持久化配置</li> </ol> -<pre><code class="language-yaml">---关闭RDB持久化--- -save &quot;&quot; -默认配置如下: -save 900 1 #900秒内有1次更新就持久化 -save 300 10 #300秒内有10次更新就持久化 -save 60 10000 #60秒内有10000次更新就持久化 ----关闭RDB持久化--- -主从同步支持两种策略,即disk和socket方式。 -新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。 -一个RDB文件从master端传到slave端,分为两种情况: -1、支持disk:master端将RDB file写到disk,稍后再传送到slave端; -2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。 -repl-diskless-sync no 默认不使用diskless同步方式 -repl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒 -repl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒 -repl-timeout 3600 设置超时时间 -repl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。 -repl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。 -backlog设置的越大,slave可以失连的时间就越长。 -repl-backlog-ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。 -slave-priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。 -min-slaves-to-write 3 -min-slaves-max-lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。 -</code></pre> -<h4 id="从服务"><a class="anchor" href="#从服务">#</a> 从服务</h4> -<pre><code class="language-yaml">基本配置同主服务一致 -slaveof 127.0.0.1 6379(主redis的ip和端口) -masterauth 123456 (主redis的密码) -可以通过slaveof no one命令将Slaver升级为Maste -bgsave (持久化命令,在redis-cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / -name dump.rd查找) -</code></pre> -<h4 id="相关命令"><a class="anchor" href="#相关命令">#</a> 相关命令</h4> -<pre><code class="language-bash">看状态 -sudo /etc/init.d/redis-server status -看端口 -netstat -nlt|grep 6379 -外部连接 -sudo vim /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉 -重启 -sudo server redis-server restart -查看内存 -free -m -批量删除指定key -redis-cli -n 6 scan 0 match *2020-06-12 count 10000| xargs redis-cli -n 6 del -大量删除key后快速释放被占用的内存 -memory purge -</code></pre> -<h4 id="问题解决"><a class="anchor" href="#问题解决">#</a> 问题解决</h4> -<pre><code class="language-bash">写入问题 -redis-cli config set stop-writes-on-bgsave-error no -sudo vim /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no -修改系统 sudo vim /etc/sysctl.conf加入vm.overcommit_memory=1 -sudo sysctl vm.overcommit_memory=1 -</code></pre> - ]]> +<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token punctuation">---</span>关闭RDB持久化<span class="token punctuation">---</span></pre></td></tr><tr><td data-num="2"></td><td><pre>save ""</pre></td></tr><tr><td data-num="3"></td><td><pre>默认配置如下:</pre></td></tr><tr><td data-num="4"></td><td><pre>save 900 1 <span class="token comment">#900 秒内有 1 次更新就持久化</span></pre></td></tr><tr><td data-num="5"></td><td><pre>save 300 10 <span class="token comment">#300 秒内有 10 次更新就持久化</span></pre></td></tr><tr><td data-num="6"></td><td><pre>save 60 10000 <span class="token comment">#60 秒内有 10000 次更新就持久化</span></pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token punctuation">---</span>关闭RDB持久化<span class="token punctuation">---</span></pre></td></tr><tr><td data-num="8"></td><td><pre>主从同步支持两种策略,即disk和socket方式。</pre></td></tr><tr><td data-num="9"></td><td><pre>新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。</pre></td></tr><tr><td data-num="10"></td><td><pre>一个RDB文件从master端传到slave端,分为两种情况:</pre></td></tr><tr><td data-num="11"></td><td><pre>1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;</pre></td></tr><tr><td data-num="12"></td><td><pre>2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。</pre></td></tr><tr><td data-num="13"></td><td><pre>repl<span class="token punctuation">-</span>diskless<span class="token punctuation">-</span>sync no 默认不使用diskless同步方式</pre></td></tr><tr><td data-num="14"></td><td><pre>repl<span class="token punctuation">-</span>diskless<span class="token punctuation">-</span>sync<span class="token punctuation">-</span>delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒</pre></td></tr><tr><td data-num="15"></td><td><pre>repl<span class="token punctuation">-</span>ping<span class="token punctuation">-</span>slave<span class="token punctuation">-</span>period 60 slave端向server端发送pings的时间区间设置,默认为10秒</pre></td></tr><tr><td data-num="16"></td><td><pre>repl<span class="token punctuation">-</span>timeout 3600 设置超时时间</pre></td></tr><tr><td data-num="17"></td><td><pre>repl<span class="token punctuation">-</span>disable<span class="token punctuation">-</span>tcp<span class="token punctuation">-</span>nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。</pre></td></tr><tr><td data-num="18"></td><td><pre>repl<span class="token punctuation">-</span>backlog<span class="token punctuation">-</span>size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。</pre></td></tr><tr><td data-num="19"></td><td><pre>backlog设置的越大,slave可以失连的时间就越长。</pre></td></tr><tr><td data-num="20"></td><td><pre>repl<span class="token punctuation">-</span>backlog<span class="token punctuation">-</span>ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。</pre></td></tr><tr><td data-num="21"></td><td><pre>slave<span class="token punctuation">-</span>priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。</pre></td></tr><tr><td data-num="22"></td><td><pre>min<span class="token punctuation">-</span>slaves<span class="token punctuation">-</span>to<span class="token punctuation">-</span>write 3</pre></td></tr><tr><td data-num="23"></td><td><pre>min<span class="token punctuation">-</span>slaves<span class="token punctuation">-</span>max<span class="token punctuation">-</span>lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。</pre></td></tr></table></figure><h4 id="从服务"><a class="anchor" href="#从服务">#</a> 从服务</h4> +<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>slaveof 127.0.0.1 6379(主redis的ip和端口)</pre></td></tr><tr><td data-num="3"></td><td><pre>masterauth 123456 (主redis的密码)</pre></td></tr><tr><td data-num="4"></td><td><pre>可以通过slaveof no one命令将Slaver升级为Maste</pre></td></tr><tr><td data-num="5"></td><td><pre>bgsave (持久化命令,在redis<span class="token punctuation">-</span>cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / <span class="token punctuation">-</span>name dump.rd查找)</pre></td></tr></table></figure><h4 id="相关命令"><a class="anchor" href="#相关命令">#</a> 相关命令</h4> +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>看状态</pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">sudo</span> /etc/init.d/redis-server status</pre></td></tr><tr><td data-num="3"></td><td><pre>看端口</pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token function">netstat</span> -nlt<span class="token operator">|</span><span class="token function">grep</span> <span class="token number">6379</span></pre></td></tr><tr><td data-num="5"></td><td><pre>外部连接</pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token function">sudo</span> <span class="token function">vim</span> /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉</pre></td></tr><tr><td data-num="7"></td><td><pre>重启</pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token function">sudo</span> server redis-server restart</pre></td></tr><tr><td data-num="9"></td><td><pre>查看内存</pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token function">free</span> <span class="token parameter variable">-m</span></pre></td></tr><tr><td data-num="11"></td><td><pre>批量删除指定key</pre></td></tr><tr><td data-num="12"></td><td><pre>redis-cli <span class="token parameter variable">-n</span> <span class="token number">6</span> scan <span class="token number">0</span> match *2020-06-12 count <span class="token number">10000</span><span class="token operator">|</span> <span class="token function">xargs</span> redis-cli <span class="token parameter variable">-n</span> <span class="token number">6</span> del</pre></td></tr><tr><td data-num="13"></td><td><pre>大量删除key后快速释放被占用的内存</pre></td></tr><tr><td data-num="14"></td><td><pre>memory purge</pre></td></tr></table></figure><h4 id="问题解决"><a class="anchor" href="#问题解决">#</a> 问题解决</h4> +<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>写入问题</pre></td></tr><tr><td data-num="2"></td><td><pre>redis-cli config <span class="token builtin class-name">set</span> stop-writes-on-bgsave-error no</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">sudo</span> <span class="token function">vim</span> /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no</pre></td></tr><tr><td data-num="4"></td><td><pre>修改系统 <span class="token function">sudo</span> <span class="token function">vim</span> /etc/sysctl.conf加入vm.overcommit_memory<span class="token operator">=</span><span class="token number">1</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token function">sudo</span> <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></table></figure> ]]> 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/ @@ -1340,21 +511,7 @@ sudo sysctl vm.overcommit_memory=1 Fri, 14 Oct 2022 17:13:00 +0800 +<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 port ssl http2;</pre></td></tr><tr><td data-num="3"></td><td><pre> server_name xxx.com;</pre></td></tr><tr><td data-num="4"></td><td><pre> ssl_certificate_key /xxx.key;</pre></td></tr><tr><td data-num="5"></td><td><pre> ssl_certificate /xxx.pem;</pre></td></tr><tr><td data-num="6"></td><td><pre> proxy_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> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token comment">#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)</span></pre></td></tr><tr><td data-num="10"></td><td><pre> add_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> proxy_pass http<span class="token punctuation">:</span>//xxx;</pre></td></tr><tr><td data-num="12"></td><td><pre> <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> ]]> https://blog.jingxiyuan.cn/2022/10/12/%E4%BD%BF%E7%94%A8picgo%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%88%B0chevereto/ @@ -1477,85 +634,19 @@ X-Frame-Options 三个参数:</p> <li>轮询(默认)</li> </ol> <p>  <em>每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。</em></p> -<pre><code class="language-yaml">upstream my_server &#123; - server 192.168.0.2:8080; - server 192.168.0.3:8080; -&#125; - -server &#123; - listen 80; - server_name 192.168.0.1; - - # Path to the root of your installation - location / &#123; - proxy_pass http://my_server; - &#125; - -&#125; -</code></pre> -<ol start="2"> +<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> server 192.168.0.2<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="3"></td><td><pre> server 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> listen 80;</pre></td></tr><tr><td data-num="8"></td><td><pre> server_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> <span class="token comment"># Path to the root of your installation</span></pre></td></tr><tr><td data-num="11"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="12"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//my_server;</pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="14"></td><td><pre> </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"> <li>weight 权重策略</li> </ol> <p>  <em>weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。</em></p> -<pre><code class="language-yaml">upstream my_server &#123; - server 192.168.0.2:8080 weight=1; - server 192.168.0.3:8080 weight=2; -&#125; - -server &#123; - listen 80; - server_name 192.168.0.1; - - # Path to the root of your installation - location / &#123; - proxy_pass http://my_server; - &#125; - -&#125; -</code></pre> -<ol start="3"> +<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> server 192.168.0.2<span class="token punctuation">:</span>8080 weight=1;</pre></td></tr><tr><td data-num="3"></td><td><pre> server 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> listen 80;</pre></td></tr><tr><td data-num="8"></td><td><pre> server_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> <span class="token comment"># Path to the root of your installation</span></pre></td></tr><tr><td data-num="11"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="12"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//my_server;</pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="14"></td><td><pre> </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"> <li>ip_hash</li> </ol> <p>  <em>每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。</em></p> -<pre><code class="language-yaml">upstream my_server &#123; - ip_hash; - server 192.168.0.2:8080; - server 192.168.0.3:8080; -&#125; - -server &#123; - listen 80; - server_name 192.168.0.1; - - # Path to the root of your installation - location / &#123; - proxy_pass http://my_server; - &#125; - -&#125; -</code></pre> -<ol start="4"> +<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> ip_hash;</pre></td></tr><tr><td data-num="3"></td><td><pre> server 192.168.0.2<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="4"></td><td><pre> server 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> listen 80;</pre></td></tr><tr><td data-num="9"></td><td><pre> server_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> <span class="token comment"># Path to the root of your installation</span></pre></td></tr><tr><td data-num="12"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="13"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//my_server;</pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="15"></td><td><pre> </pre></td></tr><tr><td data-num="16"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><ol start="4"> <li>fair (第三方)</li> </ol> <p>  <em>按后端服务器的响应时间来分配请求,响应时间短的优先分配。</em></p> -<pre><code class="language-yaml">upstream my_server &#123; - server 192.168.0.2:8080; - server 192.168.0.3:8080; - fair; -&#125; - -server &#123; - listen 80; - server_name 192.168.0.1; - - # Path to the root of your installation - location / &#123; - proxy_pass http://my_server; - &#125; - -&#125; -</code></pre> -<ol start="5"> +<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> server 192.168.0.2<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="3"></td><td><pre> server 192.168.0.3<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="4"></td><td><pre> fair;</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> listen 80;</pre></td></tr><tr><td data-num="9"></td><td><pre> server_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> <span class="token comment"># Path to the root of your installation</span></pre></td></tr><tr><td data-num="12"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="13"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//my_server;</pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="15"></td><td><pre> </pre></td></tr><tr><td data-num="16"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><ol start="5"> <li>动静分离</li> </ol> <p>  <em>把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。</em></p> diff --git a/tags/2-1/index.html b/tags/2-1/index.html index d3f07ff63..375d74895 100644 --- a/tags/2-1/index.html +++ b/tags/2-1/index.html @@ -1 +1 @@ -标签:2>&1 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:2>&1 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/360小工具/index.html b/tags/360小工具/index.html index 0fd280cbd..2beecac25 100644 --- a/tags/360小工具/index.html +++ b/tags/360小工具/index.html @@ -1 +1 @@ -标签:360小工具 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:360小工具 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/Hexo-admin/index.html b/tags/Hexo-admin/index.html index f9a46f9e1..7a365d1a5 100644 --- a/tags/Hexo-admin/index.html +++ b/tags/Hexo-admin/index.html @@ -1 +1 @@ -标签:Hexo-admin | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:Hexo-admin | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/Hexo/index.html b/tags/Hexo/index.html index 805aa7621..639d7f098 100644 --- a/tags/Hexo/index.html +++ b/tags/Hexo/index.html @@ -1 +1 @@ -标签:Hexo | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:Hexo | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/NodeJS/index.html b/tags/NodeJS/index.html index fd8473066..ad8acd049 100644 --- a/tags/NodeJS/index.html +++ b/tags/NodeJS/index.html @@ -1 +1 @@ -标签:NodeJS | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:NodeJS | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/PicGo/index.html b/tags/PicGo/index.html index f794b266c..f96c8f5e0 100644 --- a/tags/PicGo/index.html +++ b/tags/PicGo/index.html @@ -1 +1 @@ -标签:PicGo | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:PicGo | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/Shell/index.html b/tags/Shell/index.html index a0126cbc2..5d845a343 100644 --- a/tags/Shell/index.html +++ b/tags/Shell/index.html @@ -1 +1 @@ -标签:Shell | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:Shell | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/Shoka/index.html b/tags/Shoka/index.html index a47ebffe1..931e2fa01 100644 --- a/tags/Shoka/index.html +++ b/tags/Shoka/index.html @@ -1 +1 @@ -标签:Shoka | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:Shoka | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/Valine/index.html b/tags/Valine/index.html index dbc597957..37d48fa55 100644 --- a/tags/Valine/index.html +++ b/tags/Valine/index.html @@ -1 +1 @@ -标签:Valine | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:Valine | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/Windows10/index.html b/tags/Windows10/index.html index cb22f6e9a..1bf197910 100644 --- a/tags/Windows10/index.html +++ b/tags/Windows10/index.html @@ -1 +1 @@ -标签:Windows10 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:Windows10 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/Windows11/index.html b/tags/Windows11/index.html index 9ee3d85bf..c920943ed 100644 --- a/tags/Windows11/index.html +++ b/tags/Windows11/index.html @@ -1 +1 @@ -标签:Windows11 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:Windows11 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/Wordpress/index.html b/tags/Wordpress/index.html index e1be7b0ad..4a904abaf 100644 --- a/tags/Wordpress/index.html +++ b/tags/Wordpress/index.html @@ -1 +1 @@ -标签:Wordpress | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:Wordpress | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/algolia/index.html b/tags/algolia/index.html index 1cc8712cc..341d12e31 100644 --- a/tags/algolia/index.html +++ b/tags/algolia/index.html @@ -1 +1 @@ -标签:algolia | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:algolia | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/chevereto/index.html b/tags/chevereto/index.html index 08235bc30..30d9c5ccb 100644 --- a/tags/chevereto/index.html +++ b/tags/chevereto/index.html @@ -1 +1 @@ -标签:chevereto | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:chevereto | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/cookie/index.html b/tags/cookie/index.html index 660b34605..fb382e707 100644 --- a/tags/cookie/index.html +++ b/tags/cookie/index.html @@ -1 +1 @@ -标签:cookie | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:cookie | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/docker/index.html b/tags/docker/index.html index b1c51336f..f5b0f1e7f 100644 --- a/tags/docker/index.html +++ b/tags/docker/index.html @@ -1 +1 @@ -标签:docker | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:docker | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/git/index.html b/tags/git/index.html index 324f65b7a..414d6f472 100644 --- a/tags/git/index.html +++ b/tags/git/index.html @@ -1 +1 @@ -标签:git | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:git | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/https/index.html b/tags/https/index.html index 09f616088..8792f7430 100644 --- a/tags/https/index.html +++ b/tags/https/index.html @@ -1 +1 @@ -标签:https | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:https | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/iframe/index.html b/tags/iframe/index.html index 8158b4097..2f0565da1 100644 --- a/tags/iframe/index.html +++ b/tags/iframe/index.html @@ -1 +1 @@ -标签:iframe | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:iframe | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/index.html b/tags/index.html index a2aca72c9..e4a55f037 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1 +1 @@ -全部标签 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +全部标签 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/js/index.html b/tags/js/index.html index a7d77c49b..656471390 100644 --- a/tags/js/index.html +++ b/tags/js/index.html @@ -1 +1 @@ -标签:js | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:js | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/mariadb/index.html b/tags/mariadb/index.html index 8eb0083c0..a6ffa0dbd 100644 --- a/tags/mariadb/index.html +++ b/tags/mariadb/index.html @@ -1 +1 @@ -标签:mariadb | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:mariadb | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/mysql/index.html b/tags/mysql/index.html index c05974b20..0b8a440c8 100644 --- a/tags/mysql/index.html +++ b/tags/mysql/index.html @@ -1 +1 @@ -标签:mysql | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:mysql | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/nagios/index.html b/tags/nagios/index.html index 6a8725654..95862ee90 100644 --- a/tags/nagios/index.html +++ b/tags/nagios/index.html @@ -1 +1 @@ -标签:nagios | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:nagios | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/netty/index.html b/tags/netty/index.html index 7c2bcbe30..3a8371ce2 100644 --- a/tags/netty/index.html +++ b/tags/netty/index.html @@ -1 +1 @@ -标签:netty | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:netty | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/nginx/index.html b/tags/nginx/index.html index c55b59ad6..39055d402 100644 --- a/tags/nginx/index.html +++ b/tags/nginx/index.html @@ -1 +1 @@ -标签:nginx | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:nginx | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/protobuf/index.html b/tags/protobuf/index.html index e98280d4c..3211594e2 100644 --- a/tags/protobuf/index.html +++ b/tags/protobuf/index.html @@ -1 +1 @@ -标签:protobuf | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:protobuf | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/redis/index.html b/tags/redis/index.html index 3d5e21ad7..c551d0826 100644 --- a/tags/redis/index.html +++ b/tags/redis/index.html @@ -1 +1 @@ -标签:redis | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:redis | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/socketIO/index.html b/tags/socketIO/index.html index de9abf284..c0a3bea35 100644 --- a/tags/socketIO/index.html +++ b/tags/socketIO/index.html @@ -1 +1 @@ -标签:socketIO | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:socketIO | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/svn/index.html b/tags/svn/index.html index 17b157012..71fb75bc8 100644 --- a/tags/svn/index.html +++ b/tags/svn/index.html @@ -1 +1 @@ -标签:svn | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:svn | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/vue/index.html b/tags/vue/index.html index e8b8f4578..5d59b27bd 100644 --- a/tags/vue/index.html +++ b/tags/vue/index.html @@ -1 +1 @@ -标签:vue | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:vue | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/web/index.html b/tags/web/index.html index fd26e1db6..436d2f92c 100644 --- a/tags/web/index.html +++ b/tags/web/index.html @@ -1 +1 @@ -标签:web | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:web | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/yarn/index.html b/tags/yarn/index.html index 0de30b0ba..ad4dfcd6d 100644 --- a/tags/yarn/index.html +++ b/tags/yarn/index.html @@ -1 +1 @@ -标签:yarn | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:yarn | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/博客/index.html b/tags/博客/index.html index caf5868d6..c51ea0c1d 100644 --- a/tags/博客/index.html +++ b/tags/博客/index.html @@ -1 +1 @@ -标签:博客 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:博客 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/反向代理/index.html b/tags/反向代理/index.html index df6c40e79..2e6884bf0 100644 --- a/tags/反向代理/index.html +++ b/tags/反向代理/index.html @@ -1 +1 @@ -标签:反向代理 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:反向代理 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/图床/index.html b/tags/图床/index.html index f57beed29..0fb2d3f2d 100644 --- a/tags/图床/index.html +++ b/tags/图床/index.html @@ -1 +1 @@ -标签:图床 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:图床 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/图片上传/index.html b/tags/图片上传/index.html index 6cdc717cb..3eba1a2d4 100644 --- a/tags/图片上传/index.html +++ b/tags/图片上传/index.html @@ -1 +1 @@ -标签:图片上传 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:图片上传 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/定时任务/index.html b/tags/定时任务/index.html index 666b54dfd..0de74776e 100644 --- a/tags/定时任务/index.html +++ b/tags/定时任务/index.html @@ -1 +1 @@ -标签:定时任务 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:定时任务 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/心情/index.html b/tags/心情/index.html index 4a54cd2da..a90f8a989 100644 --- a/tags/心情/index.html +++ b/tags/心情/index.html @@ -1 +1 @@ -标签:心情 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:心情 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/搜索/index.html b/tags/搜索/index.html index deb60a35c..ad984787b 100644 --- a/tags/搜索/index.html +++ b/tags/搜索/index.html @@ -1 +1 @@ -标签:搜索 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:搜索 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/服务监控/index.html b/tags/服务监控/index.html index 30bb98ea2..de8543b36 100644 --- a/tags/服务监控/index.html +++ b/tags/服务监控/index.html @@ -1 +1 @@ -标签:服务监控 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:服务监控 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/极空间/index.html b/tags/极空间/index.html index cbdc255bf..0c5d45153 100644 --- a/tags/极空间/index.html +++ b/tags/极空间/index.html @@ -1 +1 @@ -标签:极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:极空间 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/背景音乐/index.html b/tags/背景音乐/index.html index 5bc081ff2..a470b8a02 100644 --- a/tags/背景音乐/index.html +++ b/tags/背景音乐/index.html @@ -1 +1 @@ -标签:背景音乐 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:背景音乐 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/自动更新/index.html b/tags/自动更新/index.html index 478a51832..1bcb5d8dc 100644 --- a/tags/自动更新/index.html +++ b/tags/自动更新/index.html @@ -1 +1 @@ -标签:自动更新 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:自动更新 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/评论/index.html b/tags/评论/index.html index 0c7e82c8f..ef9fe7f03 100644 --- a/tags/评论/index.html +++ b/tags/评论/index.html @@ -1 +1 @@ -标签:评论 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:评论 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/负载均衡/index.html b/tags/负载均衡/index.html index b5214a02c..6f0cb3ede 100644 --- a/tags/负载均衡/index.html +++ b/tags/负载均衡/index.html @@ -1 +1 @@ -标签:负载均衡 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:负载均衡 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/踩坑/index.html b/tags/踩坑/index.html index ee7fa269f..7873851bd 100644 --- a/tags/踩坑/index.html +++ b/tags/踩坑/index.html @@ -1 +1 @@ -标签:踩坑 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:踩坑 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/郁闷/index.html b/tags/郁闷/index.html index d834edf74..1a369344b 100644 --- a/tags/郁闷/index.html +++ b/tags/郁闷/index.html @@ -1 +1 @@ -标签:郁闷 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:郁闷 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file diff --git a/tags/青龙面板/index.html b/tags/青龙面板/index.html index 0e7527ecf..63493c739 100644 --- a/tags/青龙面板/index.html +++ b/tags/青龙面板/index.html @@ -1 +1 @@ -标签:青龙面板 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file +标签:青龙面板 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣
\ No newline at end of file