博客 (70)

http {
    ...

    lua_shared_dict cpu_cache 1m;  # 定义共享字典用于缓存 CPU 使用率
    access_by_lua_block {
        local cpu_cache = ngx.shared.cpu_cache
        local cache_time = cpu_cache:get("cache_time") or 0
        local current_time = ngx.now()

        if current_time - cache_time > 5 then  -- 每 5 秒更新一次
            local cpu_info = io.popen("top -bn1 | grep 'Cpu(s)'"):read("*all")
            local cpu_usage = cpu_info:match("(%d+%.%d+) id")  -- 获取空闲 CPU 百分比
            local cpu_used = 100 - tonumber(cpu_usage)  -- 计算使用率

            cpu_cache:set("cpu_usage", cpu_used)
            cpu_cache:set("cache_time", current_time)
        end

        local cpu_usage = cpu_cache:get("cpu_usage")
        ngx.log(ngx.INFO, "CPU 使用率: " .. cpu_usage .. "%")
        -- 将 cpu_usage 发送到远程鉴权接口,可根据服务器压力来决定是否拒绝一些不重要的请求
    }
}

代码解析:

共享字典:使用 lua_shared_dict 定义一个共享字典 cpu_cache,用于存储 CPU 使用率和缓存时间。

获取 CPU 使用率:在 access_by_lua_block 中,检查缓存时间,如果超过 5 秒,则重新获取 CPU 使用率,并更新共享字典。

记录日志:使用 ngx.log 将 CPU 使用率记录到 Nginx 日志中。

注意事项:

确保 Nginx 配置中已经加载了 Lua 模块(如 ngx_http_lua_module)。

根据实际需求调整缓存时间,以平衡性能和数据的实时性。

尝试过使用 ifconfig 或 ip 命令获取网卡流量,在宝塔面板中失败了,怀疑是权限问题,有空再研究。临时方案是鉴权接口定时调用宝塔面板 API 或阿里云控制台 API 来获取 ECS 的 CPU 和带宽使用率。

如何配置 nginx 远程鉴权

xoyozo 1 年前
1,009
  1. 安装依赖

    sudo yum install -y epel-release
    sudo yum install -y lua lua-devel gcc make
  2. 下载安装 LuaRocks

    访问 LuaRocks 的官方网站 获取最新版本的 LuaRocks。你可以使用 wget 命令下载:

    wget https://luarocks.org/releases/luarocks-x.x.x.tar.gz
    tar zxpf luarocks-x.x.x.tar.gz
    cd luarocks-x.x.x
    ./configure && make && sudo make install
  3. 设置环境变量(可选)

    通常,LuaRocks 会自动处理这一步,但如果需要手动设置,可以编辑 ~/.bash_profile 或 ~/.bashrc 文件,添加以下行:

    export PATH=$PATH:/usr/local/bin

    然后运行以下命令使更改生效:

    source ~/.bash_profile
  4. 验证安装

    luarocks --version
xoyozo 1 年前
1,285

首先使用命令查看是否已安装所需要的模块

nginx -V

若没有找到需要的模块,则需要编译安装。但是宝塔面板中安装的 nginx 如果像自行安装的 nginx 一样的方式去编译可能会出问题。宝塔面板有自己的添加模块方式。

在宝塔面板的软件商店找到 nginx,如果已安装则需要先卸载,卸载不会删除已有网站的配置文件(保险起见可以先备份一下),且安装时原有的模块不需要重新填写。

选择编译安装,添加自定义选装模块:

QQ20241211-152109.png

以添加“--with-http_auth_request_module”模块为例,名称按格式填写即可,模块参数填写--with-http_auth_request_module,如添加其它模块,按需填写前置脚本。添加完成后,启用它:

QQ20241211-205622.png

开始安装,等待完成。

xoyozo 1 年前
1,222

要在 Alibaba Cloud Linux 3 上设置开机启动 ossftp,你可以通过创建一个系统服务来实现。以下是具体步骤:

安装 ossftp:

按照阿里云官方文档安装 ossftp。

创建服务文件:

首先,你需要创建一个服务文件。使用以下命令创建一个新的服务文件:

sudo nano /etc/systemd/system/ossftp.service

编辑服务文件:

在打开的编辑器中,添加以下内容:

[Unit]
Description=OSS FTP Service
After=network.target

[Service]
ExecStart=/bin/bash /root/ossftp-1.2.0-linux-mac/start.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target

这里的 ExecStart 指向你的 start.sh 脚本的路径。

保存并退出。

重新加载系统服务:

运行以下命令以重新加载系统服务,使新创建的服务生效:

sudo systemctl daemon-reload

启用服务开机启动:

使用以下命令启用服务,使其在系统启动时自动运行:

sudo systemctl enable ossftp.service

启动服务:

你可以立即启动服务以测试其是否正常工作:

sudo systemctl start ossftp.service

检查服务状态:

使用以下命令检查服务的状态,确保它正在运行:

sudo systemctl status ossftp.service

如果一切设置正确,ossftp 应该会在每次系统启动时自动运行。


如果在你的系统上没有安装 nano 编辑器,你可以使用其他文本编辑器,比如 vi 或 vim。

如果你需要安装 nano,可以使用以下命令:

sudo yum install nano


xoyozo 1 年前
1,571

因 MySQL 8 默认使用 utf8mb4 字符集,如果是从 MySQL 5-7 等低版本迁移的,那么仍然是 utf8(相当于 utf8mb3)。

这在保存字符串时有可能会报错:

An error occurred while saving the entity changes. See the inner exception for details.

Incorrect string value: '\xF0\xA1\x90\x93\xE6\x9D...' for column 'Html' at row 1

即使连接字符串上加上 CharSet=utf8 或 CharSet=utf8mb3 或 CharSet=utf8mb4 也没用。

那么只能把数据库的字符集改为 utf8mb4。


更改字符集和排序方式前必须先备份数据库!


  1. 更改现有数据库的字符集和排序规则

    ALTER DATABASE mydatabase 
    CHARACTER SET utf8mb4 
    COLLATE utf8mb4_unicode_ci;
  2. 更改现有表的字符集和排序规则

    ALTER TABLE mytable 
    CONVERT TO CHARACTER SET utf8mb4 
    COLLATE utf8mb4_unicode_ci;
  3. 更改现有列的字符集和排序规则

    当列单独设置了字符集时执行,未设置的不需要执行,会继承表的字符集

    ALTER TABLE mytable 
    MODIFY mycolumn VARCHAR(255) 
    CHARACTER SET utf8mb4 
    COLLATE utf8mb4_unicode_ci


数据库中可能存在许多表,数据表中可能存在许多列,使用下面的命令可以生成批量执行的命令:

  1. 更改所有表的默认字符集和排序规则

    USE database_name; -- 替换为你的数据库名
    
    SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') 
    FROM information_schema.TABLES 
    WHERE TABLE_SCHEMA = 'database_name'; -- 再次替换为你的数据库名
  2. 更改所有列的字符集和排序规则

    USE database_name; -- 使用你的数据库名
    
    SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` MODIFY `', COLUMN_NAME, '` ', COLUMN_TYPE, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') 
    FROM information_schema.COLUMNS 
    WHERE TABLE_SCHEMA = 'database_name'; -- 使用你的数据库名


另外给出几条查询语句:

  1. 查看特定数据库的字符集和排序规则

    SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
    FROM information_schema.SCHEMATA
    WHERE SCHEMA_NAME = 'your_database_name';
  2. 查看特定表的字符集和排序规则

    SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION
    FROM information_schema.TABLES
    WHERE TABLE_SCHEMA = 'your_database_name';
  3. 查看特定列的字符集和排序规则

    SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME 
    FROM information_schema.COLUMNS 
    WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name';
xoyozo 2 年前
2,959

以以下版本为例

PHP 7.3

sqlsrv 5.6.0


步骤:

  1. 安装 PHP 7.3

  2. 加入微软的源

    curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo
  3. 安装微软 ODBC 驱动、命令行工具及开发包

    yum install msodbcsql mssql-tools unixODBC-devel
  4. 下载 sqlsrc 扩展

    wget http://pecl.php.net/get/sqlsrv-5.6.0.tgz
  5. 解压(注意最好是 wget 直接下载解压的,如果是 SFTP 上传的,用户是 root 编译会出错)

    tar -zxvf sqlsrv-5.6.0.tgz
  6. 进入

    cd sqlsrv-5.6.0
  7. /www/server/php/73/bin/phpize
  8. ./configure --with-php-config=/www/server/php/73/bin/php-config
  9. make && make install
  10. 添加扩展

    echo "extension = sqlsrv.so" >> /www/server/php/73/etc/php.ini
  11. 重新加载配置

    /etc/init.d/php-fpm-73 reload

image.png

http://pecl.php.net/package/sqlsrv

转自 雕木乱 2 年前
3,305
  1. 购买 ECS

  2. 解析域名(非网站域名)、修改实例名称、主机名

  3. 设置阿里云(重要)

  4. 远程连接进入 ECS(若解析未生效可以先用 IP)(若新服默认使用 22 端口,可在阿里云控制台登录系统,或先在安全组临时放行 22 端口)

  5. 修复系统漏洞

  6. 将磁盘挂载到目录(fdisk、df 命令参考:https://xoyozo.net/Blog/Details/SSH

  7. 安装宝塔面板(本文以宝塔面板方案为例,选择任何你喜欢的环境部署方案都行)。可以在阿里云控制台ECS实例页安装扩展程序

  8. 临时放行宝塔面板端口,进入宝塔面板(http方式),或用命令更改宝塔面板端口

  9. 配置面板 SSH、添加新的安全端口、面板设置

  10. 更改 SSH 默认端口(参:https://xoyozo.net/Blog/Details/change-default-port

  11. 安装 nginx、PHP 等

  12. 通过 lua 接入 WAF

  13. 配置 PHP 扩展(Redis、sqlsrv(注意选择兼容的版本)、memcached 及端口)

  14. 创建网站,配置网站(路径、伪静态等)

  15. 迁移网站文件(参:https://xoyozo.net/Blog/Details/SSH

  16. 仔细对比新旧网站的配置文件(特别是 .php 的访问权限,参:https://xoyozo.net/Blog/Details/nginx-location-if

  17. 设置写入目录(使用 rsync 同步的文件会同步用户和权限)

  18. 解析域名(先改 hosts 测试网站功能)

  19. 更改内网其它 ECS 上的 hosts

  20. 关闭原 ECS(能马上发现问题,不然等运行一段时间才发现问题就麻烦点)

  21. 设置 FTP

  22. 迁移“计划任务”

  23. 所有网站和软件的配置文件都要使用 WinMerge 进行对比

  24. 移除“宝塔面板-安全”和“阿里云-ECS-安全组”中不用的端口

  25. 再次检查阿里云设置

  26. 私网中若有 ECS 的 hosts 中域名直接绑定到私网 IP 的,做相应更改

  27. 其它:ERP 添加到期提醒、WAF 增加该 ECS、备份工具增加该 ECS


更多文章:

从零搭建一台阿里云 ECS(Windows Server)并迁移网站

xoyozo 2 年前
3,654

将以下命令保存为 .vbs 文件,打开该文件即可打开 IE:

CreateObject("InternetExplorer.Application").Visible=true


xoyozo 2 年前
1,733

FTP 服务端与客户端之间使用命令端口和数据端口进行通信。

1.png

而主动模式与被动模式的区别是:在数据连接时,服务端是否为主动方。


主动模式(PORT 模式)

2.png

第一步:客户端使用任意 N 端口向服务端 21 端口发送请求,建立连接

第二步:服务端使用 20 端口向客户端任意 M 端口发送请求,传输数据

要求:

服务防火墙开放 21 端口准入,20 端口准出(默认所有端口准出)

客户端设置“允许应用通过防火墙”(将 FTP 客户端程序加入允许)


被动模式(PASV 模式)

3.png

第一步:客户端使用任意 N 端口向服务端 21 端口发送请求,建立连接

第二步:客户端使用任意 M 端口向服务端 P 端口发送请求,传输数据

要求:

服务端设置被动模式端口范围

服务端防火墙开放 21 端口及被动模式范围端口准入

客户端一般不需要设置


xoyozo 2 年前
2,714


本文过程较为复杂,且部分内容已无法实现,建议点击这里查阅最新的操作方法!


前言:本文操作需要你具备浏览器安装和使用扩展插件的能力、以及简单的使用命令行的能力。


第一步:下载视频

首先我使用 Edge 浏览器(Chrome 操作类似,不过安装扩展需要科学上网)。

2023 年初的时候,用 FetchV 这个扩展是非常方便的,它会自动嗅到网页中的视频,即使没有嗅到也可以用录制的方式来保存。

但到了过了一两个月发现 FetchV(及其马甲)经常打不开,或者无法嗅到视频流,更别提录制了。

所以我找到了另一款专业视频下载神器

image.png

当然它的马甲们用法也是大同小异,主界面是这样的:

image.png

开启捕获,同意下载多个文件,然后播放视频,耐心等待。

心急的朋友可以用修改播放速度的扩展(如 视频加速减速控制),例如用 16 倍速,那么一个 16 分钟的视频用 1 分钟就播放完成了。(或者在 F12 的控制台中使用 JS 代码加速:document.querySelector('video').playbackRate = 16; )

等小浮框提示“捕获完成 点击下载”的时候就可以保存到磁盘上了。

image.png


第二步:音频修复

下载后它会有两个 .mp4 文件保存到电脑上,其中较大的是视频部分,较小的是音频部分。

但是有个小问题是,这个音频文件用 Windows 自带播放器播放正常,用 potplayer 等第三方播放器或者一些视频编辑软件播放就会有问题。

我在 Microsoft Store 中找了一款叫 Movie Maker - Video Editor 的应用,

apps.39913.13859945615656852.b1baa2a9-3899-402f-856c-99b5767be0e6.png

在这个软件中添加刚才的只有音轨的视频文件会提示转码,转码后的 .mp4 文件音轨就正常了。

具体步骤是依次点击“Create New Project”,“Add clip”,“Photo/Video”,选择文件后“Transcode”,保存以后默认会在文件名后加上“ (Transcoded).mp4


第三步:音视频合成

接下来是合成视频和音频,将视频文件命名为 v.mp4,音频文件命名为 a.mp4。

FFmpeg 官网下载 Windows 版,然后使用这个命令从音频文件中提取音轨:

ffmpeg -i a.mp4 -vn -acodec copy a.aac

再用这个命令将 v.mp4 的视频和 a.aac 的音频合成一个新的文件

ffmpeg -i v.mp4 -i a.aac -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 output.mp4

相比于其它的视频转换工具,ffmpeg 直接提取合并的速度是极快的。


Tips:

  • 小鹅通中学习过的课程再次打开会从上次关闭的地方开始播放,这会导致捕获不全,可以将进度条手动拖到末尾,这样它会停止播放,再次刷新就会从头开始播放。

  • 浮框中“点击下载”可能没反应,估计是在合成文件,过几秒钟多点几下,不会重复下载。

  • 如果要下载的视频比较长或者比较多,可以像我一样在虚拟机里进行,把视频播放器的音量开到最大,把操作系统的声音关闭。

xoyozo 3 年前
26,285