Rootop 服务器运维与web架构

2020-07-06
发表者 Venus
nginx rtmp模块生成hls文件已关闭评论

nginx rtmp模块生成hls文件

rtmp配置

rtmp
{
	server
	{
		listen 1935;
	
		application app1
		{
			live on;
			#record all;
			#record_path /tmp/rec;
		
			hls on; #开启hls转换
			hls_path /tmp/hls; #hls保存目录
			hls_fragment 10s; #10秒一个ts文件
			hls_playlist_length 10m; #文件索引m3u8记录时长,可以是s秒,m分。

			access_log logs/rtmp-access.log combined;
		}
	}
}

在listen监听在非1935端口时,通过obs studio往nginx中推流(rtmp://192.168.1.142/app1),指定了”串流秘钥”后会提示错误,不指定的话,生成的ts文件没有包含串流秘钥的字符串做为文件名的前缀。
后来换回默认的1935端口后才可以。

2020-06-28
发表者 Venus
InnoDB: Error: log file /usr/local/mysql/data/ib_logfile0 is of different size 0 134217728 bytes已关闭评论

InnoDB: Error: log file /usr/local/mysql/data/ib_logfile0 is of different size 0 134217728 bytes

200622 15:20:32 [Note] Plugin 'FEDERATED' is disabled.
200622 15:20:32 InnoDB: The InnoDB memory heap is disabled
200622 15:20:32 InnoDB: Mutexes and rw_locks use GCC atomic builtins
200622 15:20:32 InnoDB: Compressed tables use zlib 1.2.11
200622 15:20:32 InnoDB: Using Linux native AIO
200622 15:20:32 InnoDB: Initializing buffer pool, size = 256.0M
200622 15:20:32 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file /usr/local/mysql/data/ib_logfile0 is of different size 0 134217728 bytes
InnoDB: than specified in the .cnf file 0 67108864 bytes!
200622 15:20:32 [ERROR] Plugin 'InnoDB' init function returned error.
200622 15:20:32 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
200622 15:20:32 [ERROR] Unknown/unsupported storage engine: InnoDB
200622 15:20:32 [ERROR] Aborting

提示说ib_logfile0文件的大小与 .cnf配置文件中的配置 67108864 大小不一致,导致启动失败。

解决方法:
1、可以修改mysql配置文件中 innodb_log_file_size 的值为 134217728/1024/1024 = 128 Mb,再测试启动mysql,如果不行继续下面方法2。
2、删除或备份mysql数据目录下的 ib_logfile 开头的文件,再启动mysql。

mysql> show variables like '%innodb_log%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| innodb_log_buffer_size      | 16777216 |
| innodb_log_checksums        | ON       |
| innodb_log_compressed_pages | ON       |
| innodb_log_file_size        | 50331648 |
| innodb_log_files_in_group   | 2        |
| innodb_log_group_home_dir   | ./       |
| innodb_log_write_ahead_size | 8192     |
+-----------------------------+----------+
7 rows in set (0.00 sec)

# innodb_log_files_in_group 参数控制redo log文件个数,ib_logfile[0-1]
# innodb_log_file_size 控制redo log文件大小

# 解释
ib_logfile用于事务日志,也叫redo log,有了它,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失。
还有一个日志叫undo log,
它有两个作用:
1、提供事务回滚
2、多个行版本控制(MVCC)(事务隔离级别里有这个概念)
在数据更新时,不仅写redo log,也写对应的undo log,如果因为某些原因导致事务失败,可以通过undo log回滚。

2020-06-19
发表者 Venus
centos下为nginx添加modsecurity安全模块已关闭评论

centos下为nginx添加modsecurity安全模块

官网:https://www.modsecurity.org/download.html

先安装modsecurity,再编译nginx模块
# modsecurity依赖几个包实现某些功能

[root@localhost ~]# yum install -y gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel pcre-devel lmdb-devel libxml2-devel ssdeep-devel lua-devel libtool autoconf automake

# 安装modsecurity

[root@localhost ~]# wget -c https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.4/modsecurity-v3.0.4.tar.gz
[root@localhost ~]# tar zxvf modsecurity-v3.0.4.tar.gz 
[root@localhost ~]# cd modsecurity-v3.0.4
[root@localhost modsecurity-v3.0.4]# ./configure 
[root@localhost modsecurity-v3.0.4]# make
[root@localhost modsecurity-v3.0.4]# make install
[root@localhost modsecurity-v3.0.4]# cp modsecurity.conf-recommended /usr/local/modsecurity/modsecurity.conf
[root@localhost modsecurity-v3.0.4]# cp unicode.mapping /usr/local/modsecurity/

默认会安装到/usr/local/modsecurity/

# 下载安全规则

[root@localhost ~]# git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
[root@localhost ~]# cd owasp-modsecurity-crs/
[root@localhost owasp-modsecurity-crs]# cp -r rules/ /usr/local/modsecurity/
[root@localhost owasp-modsecurity-crs]# cp crs-setup.conf.example /usr/local/modsecurity/crs-setup.conf

# 下载nginx modsecurity模块

[root@localhost ~]# git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

# 查看nginx原编译参数

[root@localhost nginx-1.17.9]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.17.9
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=../ModSecurity-nginx/

# 重新编译nginx,添加modsecurity模块

[root@localhost nginx-1.17.9]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=../ModSecurity-nginx/
[root@localhost nginx-1.17.9]# make
[root@localhost nginx-1.17.9]# make install

# 虚拟主机配置

server
{
  server_name admin.local;

  listen 80;

  access_log  /usr/local/nginx/logs/admin_access.log;
  error_log   /usr/local/nginx/logs/admin_error.log;

  modsecurity on;
  modsecurity_rules_file /usr/local/modsecurity/modsecurity.conf;
  
  location /
  {
     proxy_pass http://127.0.0.1:10102;
  }
}

# 配置 /usr/local/modsecurity/modsecurity.conf

# 由 DetectionOnly 改为 On
SecRuleEngine On
# 由 ABIJDEFHZ 改为 ABCDEFHZ
SecAuditLogParts ABCDEFHZ
# 下面3行追加到配置文件
Include /usr/local/modsecurity/crs-setup.conf
Include /usr/local/modsecurity/rules/*.conf
SecAuditLogFormat JSON

保存退出。

SecAuditLogFormat JSON是审计日志改为json格式,便于提取。

审计日志会输出到 /var/log/modsec_audit.log

测试:
可以在url访问中加个参数,如:/login?id=1 and 1=1 ,页面会提示403状态码。
日志中会出现审计日志。

2020-05-18
发表者 Venus
xargs清空文件已关闭评论

xargs清空文件

#目的:
查找指定目录下的日志文件,超过指定大小后就清空

#方法:

find /tmp -size +500M -type f | grep *.log | xargs -I dellist sh -c 'cat /dev/null > dellist'

大部分命令只能在命令行输入参数,不能用管道符传递参数。
xargs命令就是把标准输入做为执行命令的参数。

-I 作用是指定要替换的字符串,也就是把dellist替换为标准输入读取的字符串

2020-05-08
发表者 Venus
mysql导入报@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty错误已关闭评论

mysql导入报@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty错误

从阿里云mysqldump的sql文件导入本地库报错

[root@localhost ~]# mysql -uroot -p$(cat mysql_password.txt) xxx < /home/backup/xxx/xxx2020-05-07-04-00-01.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

原因是阿里云rds自带主从复制,开启了gtid全局事务id用于保证主从复制一致,备份的时候没有忽略gtid,导致导入本地时报错。

方法1、

# 查看当前的gtid
mysql> select @@global.gtid_executed\G;

# 清空本地的gtid
mysql> reset master;
Query OK, 0 rows affected (0.04 sec)

方法2、删掉sql文件中的 SET @@GLOBAL.GTID_PURGED 2行

-- MySQL dump 10.13  Distrib 5.7.17, for linux-glibc2.5 (x86_64)
--
-- Host: rm-xxx.mysql.rds.aliyuncs.com    Database: xxx
-- ------------------------------------------------------
-- Server version       5.7.25-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;

--
-- GTID state at the beginning of the backup 
--

SET @@GLOBAL.GTID_PURGED='6822560b-3659-11e8-afba-7cd30adaf22a:1-33310212,
79abd425-3659-11e8-8eeb-7cd30adaf28e:1-36989543';

方法3、

/usr/local/mysql/bin/mysqldump --set-gtid-purged=OFF
加上--set-gtid-purged=OFF参数再备份,这样就忽略。