C++ TinyWebServer项目总结(1. 配置安装)

语雀文档

项目记录会先更新在我的语雀文档 :Webserver

然后再同步发送到CSDN上,有些格式问题实在是懒得改了,可能会导致大家看的不舒服,建议有需要的大家可以看看我的原文。

安装环境

Ubuntu 20.04

mysql Ver 8.0.39-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

下载源码

git clone https://github.com/qinguoyi/TinyWebServer.git

MySQL 配置

安装 MySQL

查看是否已经安装 MySQL:

rpm -qa | grep mysql

无任何显示则未安装。

安装 MySQL:

sudo apt-get install mysql-server

查询 SQL 版本:

mysql --version

初始化配置

sudo mysql_secure_installation

由于在初始化配置时,

默认情况下,由于使用了 auth_socket 进行身份验证,因此跳过为 root 设置密码。如果您希望改为使用密码身份验证,可以使用“ALTER_USER”命令。

因此我们要在后面重新设置密码。

配置过程:

Securing the MySQL server deployment.Connecting to MySQL using a blank password.VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?Press y|Y for Yes, any other key for No: yThere are three levels of password validation policy:LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  filePlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0Skipping password set for root as authentication with auth_socket is used by default.
If you would like to use password authentication instead, this can be done with the "ALTER_USER" command.
See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-user-password-management for more information.By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.Remove anonymous users? (Press y|Y for Yes, any other key for No) : N... skipping.Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.Remove test database and access to it? (Press y|Y for Yes, any other key for No) : n... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.All done! 

检查 MySQL 状态

systemctl status mysql.service

进入 MySQL

设置 MySQL 密码

首先,我们直接使用 sudo 登录数据库,此时不需要输入密码:

sudo mysql -uroot -p

查看当前 MySQL 的密码策略:

SHOW VARIABLES LIKE 'validate_password%';

策略说明:

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |	决定是否使用该插件(及强制/永久强制使用):ON/OFF/FORCE/FORCE_PLUS_PERMANENT
| validate_password_dictionary_file    |        |	插件用于验证密码强度的字典文件路径
| validate_password_length             | 8      |	密码最小长度
| validate_password_mixed_case_count   | 1      |	密码至少要包含的小写字母个数和大写字母个数
| validate_password_number_count       | 1      |	密码至少要包含的数字个数
| validate_password_policy             | MEDIUM |	密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG
| validate_password_special_char_count | 1      |	密码至少要包含的特殊字符数
+--------------------------------------+--------+
7 rows in set (0.02 sec)0/LOW:只检查长度。1/MEDIUM:检查长度、数字、大小写、特殊字符。2/STRONG:检查长度、数字、大小写、特殊字符字典文件。

修改密码为:xxxx(这里的密码格式需要遵照上面的密码策略)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxxx';

ctrl + d 或者输入 quit 退出 SQL。

重启 SQL:

sudo service mysql restart

登录数据库(此时需要输入上面修改的密码):

mysql -uroot -p

创建数据库

建立yourdb库:

create database yourdb;

查看当前数据库:

show database;

创建 user 表:

USE yourdb;
CREATE TABLE user(username char(50) NULL,passwd char(50) NULL
)ENGINE=InnoDB;

添加数据:

INSERT INTO user(username, passwd) VALUES('name', 'passwd');

查看数据库名称和密码:(这步可以不做,不影响后续的部署)

	cd /etc/mysqlsudo vim debian.cnf

修改main.cpp中的数据库初始化信息:

//需要修改的数据库信息,登录名,密码,库名
string user = "root";
string passwd = "xxxx"; // 这里修改为我们设置的MySQL密码
string databasename = "yourdb"; // 这里修改为我们设置的数据库名

编译运行

进入文件夹

cd ~/TinyWebServer

build:

sh ./build.sh

启动server:

./server

查看效果

查询主机 ip 地址,显示主机地址为:(ip)

ifconfig

在浏览器中输入(下面两条选择一条输入就行):

localhost:9006
(ip):9006

即可显示:

压力测试

这里用到了一个压测软件 Webbench,原理参考小白视角:一文读懂社长的TinyWebServer | HU

安装依赖

sudo apt-get install exuberant-ctags

下载源码 && 安装

wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5/
make && sudo make install

运行

在解压目录打开终端运行:

./webbench -c 10001 -t 5 http://127.0.0.1:9006/

效果:

参考文档

  1. 常见问题与解决方案 · Issue #8 · qinguoyi/TinyWebServer
  2. MySQL问题:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements-CSDN博客
  3. MySQL提示ERROR 1698 (28000): Access denied for user ‘root’@’localhost’错误解决办法-腾讯云开发者社区-腾讯云
  4. https://zhuanlan.zhihu.com/p/445362693
  5. c++ 经典服务器开源项目 Tinywebserver的使用与配置(百度智能云服务器安装ubuntu18.04可用公网ip访问)-CSDN博客
  6. WebServer 跑通/运行/测试(详解版)_webserver测试-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405366.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ajax-3

一.图片上传 1.获取图片文件对象 2.使用FormData携带图片文件 const fd new FormData() fd.append(参数名, 值) 3.提交表单数据到服务器,使用图片url网址 二.AJAX原理—XMLHttpRequest 定义:XMLHttpReques(XHR)对象用于与服务器…

SM2前后端加密和解密

一&#xff1a;前端vue 二&#xff1a;后端解密 三&#xff1a;后端详解 3.1maven文件 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.66</version> </dependency&g…

Linux命令学习 -- tar指令

功能&#xff1a;对文件和目录进行打包 格式&#xff1a;tar [参数] [压缩文件名] [要压缩的目录或者文件的名字]常用参数如下&#xff1a; -c &#xff1a;创建一个新的打包文件&#xff1b; -x :对打包文件进行解压缩&#xff1b; -z :gzip 格式进行压缩或者解压&#xff0c;…

Cookie Session Token

什么是会话技术&#xff1f; Cookie 以登录为例&#xff0c;用户在浏览器中将账号密码输入并勾选自动登录&#xff0c;浏览器发送请求&#xff0c;请求头中设置Cookie&#xff1a;userName:张三 ,password:1234aa &#xff0c;若登录成功&#xff0c;服务器将这个cookie保存…

重磅发布!天途多自由度无人机调试台

无人机调试、测试和试飞很容易受空域、场地、环境、失控炸机和操作失误等限制。天途TE55多自由度无人机整机调试台应运而生&#xff01; 突破空域限制 天途TE55多自由度无人机整机调试台&#xff0c;突破场地空域限制&#xff0c;不到0.7平米的空间&#xff0c;即可完成小型无人…

如何使用DataGear零编码快速制作MQTT物联网实时数据看板

DataGear是一个开源免费的数据可视化分析平台&#xff0c;企业版在开源版基础上开发&#xff0c;新增了诸多企业级特性&#xff0c;包括&#xff1a;MySQL及更多部署数据库支持、MQTT/WebSocket/Redis/MongoDB数据集、OAuth2.0/CAS/JWT/LDAP统一登录支持、前后端敏感信息加密传…

每天五分钟深度学习框架pytorch:神经网络工具箱nn的介绍

本文重点 我们前面一章学习了自动求导,这很有用,但是在实际使用中我们基本不会使用,因为这个技术过于底层,我们接下来将学习pytorch中的nn模块,它是构建于autograd之上的神经网络模块,也就是说我们使用pytorch封装好的神经网络层,它自动会具有求导的功能,也就是说这部…

高性能 Web 服务器:让网页瞬间绽放的魔法引擎(下)

目录 一.Nginx 反向代理功能 1.缓存功能 2.http 反向代理负载均衡 二.实现 Nginx 四层负载均衡 三.实现 FastCGI 1.为什么会有FastCGI&#xff1f; 2.什么是PHP-FPM&#xff1f; 3.FastCGI配置指令 4.Nginx与php-fpm在同一服务器 5.Nginx配置转发 6. php的动态扩展模…

探索全光网技术 | 全光网相关厂商的产品解决方案整理 (锐捷系列)

全光网产品解决方案整理-锐捷系列 目录 一、教学场景1、方案概述2、方案需求3、实践案例4、相关产品5、方案价值 二、办公场景1、方案概述2、方案需求3、实践案例4、相关产品5、方案价值 三、宿舍场景1、方案概述2、方案需求3、实践案例4、相关产品5、方案价值 注&#xff1a;本…

你的显卡能不能玩《黑神话:悟空》?

《黑神话&#xff1a;悟空》作为一款备受瞩目的国产单机大作&#xff0c;其对显卡和整体硬件配置的需求较高。根据官方公布的信息&#xff0c;游戏的推荐配置包括GeForce RTX 40系列GPU&#xff0c;以确保在2K或4K分辨率下能够享受到60FPS的全景光追游戏体验。特别是GeForce RT…

2024年新SCI顶刊算法信息获取优化算法IAO优化Transformer-GRU模型的多变量时间序列预测

matlab R2024a以上 一、数据集 ​ ​ 二、2024年新SCI顶刊算法信息获取优化算法IAO 本期介绍了一种名为信息获取优化算法Information acquisition optimizer&#xff0c;IAO的元启发式算法。该算法受人类信息获取行为的启发&#xff0c;由信息收集、信息过滤和评估以及信息分…

C#中客户端直接引用服务端Proto文件

gRPC 客户端是从 .proto 文件生成的具体客户端类型。 具体 gRPC 客户端具有转换为 .proto 文件中 gRPC 服务的方法。 下一步打开【服务引用】 控制面板 选择grpc选项&#xff0c;然后继续 到此配置完成&#xff0c;然后就和服务共用一份protocol文件

图像生成模型基础——Stable Diffusion模型介绍

随着人工智能技术的飞速发展&#xff0c;图像生成技术也取得了显著进步。扩散模型&#xff08;Stable Diffusion&#xff09;因其高效性和稳定性而得到广泛关注&#xff0c;目前的大多数生成模型都是以扩散模型为基础进行改进得到。首先简单介绍一下传统人工智能模型和生成模型…

request.getRequestURI()与request.getRequestURL()的区别

1.返回值的区别&#xff1a; request.getRequestURL() 返回值是一个StringBuffer类型 request.getRequestURI() 返回值是一个String类型 先看 request.getRequestURL() 返回的是一个具体的地址&#xff0c;访问网页的地址 而 request.getRequestURI() 返回的是一个映射地址&a…

VM Ubuntu22.04 ROS2 从头安装

目录 前言安装步骤1 设置编码2 添加ROS2软件源&#xff08;从哪去下载ros2相关软件&#xff09;报错解决方法 3 安装报错解决方法1解决方法2 报错 4 设置环境变量5 Ros2 测试Hello World 发送和监听小海龟键盘控制 成功 Hello World 发送和监听界面成功控制小海龟界面 前言 本…

【java】RuoYiBootstrap多模块版本-新写的接口,用接口工具访问,状态码302,访问不到。打的断点也进不去。其实是Shiro拦截器搞的鬼

【java】RuoYiBootstrap多模块版本-新写的接口&#xff0c;用接口工具访问&#xff0c;状态码302&#xff0c;访问不到。打的断点也进不去 你如果着急&#xff0c;可以直接看《ShiroConfig.java文件源码-过滤器配置-重点代码》 重点 状态码&#xff1a;302访问不到断点进不去 …

FileNotFoundException: XXX (系统找不到指定的文件。)

目录 问题描述 问题分析 问题总结 问题描述 idea引入文件&#xff0c;系统去读取&#xff0c;但是路径的问题报错系统找不到指定文件 String filePath "test.txt"; try {FileInputStream fileInputStream new FileInputStream(filePath); } catch (FileNotFou…

信息搜集--敏感文件Banner

免责声明:本文仅做分享参考... 目录 git安装: git目录结构: 敏感目录泄露 1-git泄露 (1)常规git泄露 scrabble工具 (2)git回滚 (3)git分支 GitHacker工具 (4)git泄露的其他利用 .git重定向问题 2-SVN泄露 dvcs-ripper工具 3-小结 dirsearch目录扫描工具 敏感备…

MySQL修改表属性

一、修改表名 ① 使用DDL语句修改表名 ALTER TABLE 旧表名 RENAME 新表名; ② 使用Navicat修改表名 二、修改列 2.1 修改列名 ① 使用DDL语句修改列名 ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 类型; ② 使用Navicat修改列名 2.2 修改列类型 ① 使用DDL语句修改列类…

C++实现多线程三窗口卖票程序

假设我们有100张门票&#xff0c;有三个售卖窗口&#xff0c;我们希望以多线程的方式将这些票卖出去&#xff0c;这样效率会更高一些。 首先我们需要有一个全局的门票变量。 int tickts 100; 卖票的函数&#xff0c;由于每个窗口卖出一张票都需要花费一些时间&#xff0c;假设…