nginx的基本使用与其日志
文章目录
- 1.nginx编译安装脚本
- 2.nginx平滑升级,以及其步骤
- 3.nginx核心配置,及实现nginx多虚拟主机
- 4.nginx日志格式定制
- 5.nginx反向代理及https安全加密
- 6.基于LNMP和Redis的phpmyadmin的会话保持,以及其完整步骤
1.nginx编译安装脚本
#编译安装脚本
#!/bin/bash
nginx_version=1.20.2
nginx_file=nginx-${nginx_version}.tar.gz
cpu=`lscpu | grep "^CPU(s):" | tr -d ' '|awk -F':' '{ print $2 }'`
install_dir=/data/web
user=nginx
group=nginx
url=https://nginx.org/download
. /etc/os-release
if [[ $ID =~ rhel|rocky|centos ]];thensystemctl disable --now firewalldyum install gcc make gcc-c++ wget pcre-devel openssl-devel zlib-devel -y
elif [[ $ID =~ 'ubuntu' ]];thenapt updateapt install gcc make gcc-c++ wget pcre-devel openssl-devel zlib-devel -y
else echo "不支持此系统,退出!"exit
fi
if [ ! -f ${nginx_file} ];thenwget ${url}/${nginx_file} #下载nginx
fi
useradd -s /sbin/nologin ${user}
mkdir -p ${install_dir}
chown ${user}.${group} -R ${install_dir}
tar zxf ${nginx_file} -C /usr/local/src #解压缩下载的nginx
cd /usr/local/src/nginx-${nginx_version} #进入下载的nginx目录
./configure --prefix=${install_dir} --without-http_rewrite_module --without-http_gzip_module --user=${user} --group=${group} --pid-path=${install_dir}/run/nginx.pid --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module #检查当前的环境是否满足要安装软件的依赖关系
make -j ${cpu}&& make install #编译&&安装
echo "PATH=${install_dir}/sbin:${PATH}" > /etc/profile.d/nginx.sh
ln -s ${install_dir}/sbin/nginx /usr/sbin
echo "`hostname -I | cut -d ' ' -f1`" > ${install_dir}/html/index.html #创建web站点到初始页面
cat > /usr/lib/systemd/system/nginx.service <<EOF
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=${install_dir}/run/nginx.pid
ExecStartPre=/usr/bin/rm -f ${install_dir}/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now nginx &> /dev/null
echo "安装成功!,并启动服务"
echo "请访问:http://`hostname -I | cut -d ' ' -f1`"
2.nginx平滑升级,以及其步骤
#平滑升级脚本
#!/bin/bash
old_version=1.20.1
new_version=1.22.1
nginx_file=nginx-${new_version}.tar.gz
cpu=`lscpu | grep "^CPU(s):" | tr -d ' '|awk -F':' '{ print $2 }'`
install_dir=/data/web
user=nginx
group=nginx
url=https://nginx.org/download/
if [ ! -f ${nginx_file} ];thenwget ${url}${nginx_file} #下载nginx
fi
tar zxf ${nginx_file} -C /usr/local/src #解压缩下载的nginx
cd /usr/local/src/nginx-${new_version} #进入下载的nginx目录
./configure --prefix=${install_dir} --without-http_rewrite_module --without-http_gzip_module --user=${user} --group=${group} --pid-path=${install_dir}/run/nginx.pid --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module #检查当前的环境是否满足要安装软件的依赖关系
make -j ${cpu}
mv ${install_dir}/sbin/nginx ${install_dir}/sbin/nginx.old
cp /usr/local/src/nginx-${new_version}/objs/nginx ${install_dir}/sbin/
kill -s USR2 `cat ${install_dir}/run/nginx.pid`
kill -s WINCH `cat ${install_dir}/run/nginx.pid.oldbin`
kill -s QUIT `cat ${install_dir}/run/nginx.pid.oldbin`
步骤
- 将旧Nginx二进制文件换成新Nginx程序文件(注意先备份)
- 向master进程发送USR2信号
- master进程修改pid文件名加上后缀.oldbin,成为nginx.pid.oldbin
- master进程用新Nginx文件启动新master进程成为旧master的子进程,系统中将有新旧两个Nginx
- 主进程共同提供Web服务,当前新的请求仍然由旧Nginx的worker进程进行处理,将新生成的master
- 进程的PID存放至新生成的pid文件nginx.pid
- 向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止
- 向旧master进程发送QUIT信号,关闭老master,并删除Nginx.pid.oldbin文件
- 如果发现升级有问题,可以回滚∶向老master发送HUP,向新master发送QUIT
3.nginx核心配置,及实现nginx多虚拟主机
[root@server ~]# vim /etc/nginx/nginx.conf
user nginx nginx; #nginx的启动用户/组
worker_processes auto; #启动工作进程数数量
error_log /var/log/nginx/error.log; #nginx的错误日志路径
pid /run/nginx.pid; #Nginx的PID路径
include /usr/share/nginx/modules/*.conf;
#events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
events {worker_connections 1024; #设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为(worker_connections * worker_processes)/2
}
#http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。
http {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 /var/log/nginx/access.log main; ##nginx的成功日志路径以及其使用的日志格式sendfile on;#作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。tcp_nopush on;tcp_nodelay on;keepalive_timeout 65; #长连接超时时间,单位是秒types_hash_max_size 2048;include /etc/nginx/mime.types;default_type application/octet-stream;include /etc/nginx/conf.d/*.conf;
#设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供web服务server {listen 80 default_server; #配置ipv4格式server监听的端口listen [::]:80 default_server; #配置ipv6格式server监听的端口server_name _; #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。root /usr/share/nginx/html; #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。include /etc/nginx/default.d/*.conf; #导入其他路径的配置文件location / {#location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的配置也是在location模块中配置。}error_page 404 /404.html; #错误页面的文件名称location = /40x.html { #location处理对应的不同错误码的页面定义到/40x.html}error_page 500 502 503 504 /50x.html; #错误页面的文件名称location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html}}
#加密相关
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
#和邮件相关的配置
#mail {
# ...
# } mail 协议相关配置段
#stream {
# ...
# } stream 服务器相关配置段
多虚拟主机配置:
[root@server~]# vim conf.sh
#!/bin/bash
port=80
root_dir=/data/html
yum install nginx -y
cat > /etc/nginx/conf.d/web.conf << EOF
server{listen ${port};server_name www.web.com;root ${root_dir}/web/;
}
EOF
cat > /etc/nginx/conf.d/app.conf << EOF
server {listen ${port};server_name www.app.com;root ${root_dir}/app/;
}
EOF
mkdir -p ${root_dir}/{web,app}
chown -R nginx.nginx ${root_dir}
echo " this is website" > /data/html/web/index.html
echo " this is appsite" > /data/html/app/index.html
[root@server~]# nginx -s reload
[root@client ~]# echo "10.0.0.6 www.app.com" >> /etc/hosts
[root@client ~]# echo "10.0.0.6 www.web.com" >> /etc/hosts
[root@client ~]# curl www.app.comthis is appsite
[root@client ~]# curl www.web.comthis is website
4.nginx日志格式定制
log_format json '{"@timestamp":"$time_iso8601",''"server_host":"$server_addr",''"client_host":"$remote_addr",''"size":$body_bytes_sent,''"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",''"upstreamhost":"$upstream_addr",' '"http_url":"$host$uri",''"xff":"$http_x_forwarded_for",''"referer":"$http_referer",''"tcp_xff":"$proxy_protocol_addr",''"http_user_agent":"$http_user_agent",''"status":"$status"}';
主配置文件定义日志类型
在/etc/nginx/conf.d/web.conf中进行引用该日志文件格式
[root@server ~]# cat /etc/nginx/conf.d/web.conf
server{listen 80;server_name www.web.com;root /data/html/web/;access_log /var/log/nginx/web.log json;
}
在客户端进行触发访问操作,并在服务器端观察日志生成情况
[root@client ~]# curl www.web.com
[root@server ~]# tail -f /var/log/nginx/web.log
5.nginx反向代理及https安全加密
https加密实现
创建证书脚本:
#!/bin/bash
CA_SUBJECT="/O=lll/CN=ca.lll.com"
SUBJECT="/C=CN/ST=HB/L=HB/O=lll/CN=www.lll.com"
SERIAL=34
EXPIRE=203006
FILE=lll.com
openssl req -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 365 -out ca.crt
openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key -subj $SUBJECT -out ${FILE}.csr
openssl x509 -req -in ${FILE}.csr -CA ca.crt -CAkey ca.key -set_serial $SERIAL -days $EXPIRE -out ${FILE}.crt
chmod 600 ${FILE}.key ca.key
[root@centos8 pki]# cat lll.com.crt ca.crt > www.lll.com.crt
[root@centos8 pki]# mv lll.com.key www.lll.com.key
[root@centos8 pki]# cat /etc/nginx/conf.d/web.conf
server{listen 80;listen 443;ssl_certificate /etc/ssl/pki/www.lll.com.crt;ssl_certificate_key /etc/ssl/pki/www.lll.com.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name www.web.com;root /data/html/web/;access_log /data/html/web/log/access_web.log json;}
在本机电脑更改hosts文件指向该server的地址,并用浏览器进行访问即可
nginx反向代理简单实现
反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。
[root@proxy_server ~]# vim /etc/nginx/conf.d/web.conf
server{listen 80;server_name www.web.com;location /{proxy_pass http://10.0.0.4;}
}
[root@proxy_server ~]# nginx -s reload
[root@server ~]# yum install httpd -y
[root@server ~]# echo `hostnamectl` > /var/www/html/index.html
[root@client ~]# echo "10.0.0.6 www.web.com" >> /etc/hosts
[root@client ~]# curl www.web.com
6.基于LNMP和Redis的phpmyadmin的会话保持,以及其完整步骤
使用的环境为Ubuntu22.04
[root@ubuntu2004 ~]# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
1.安装包
[root@ubuntu2004 ~]#apt install nginx mysql-server php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-intl php8.1-xml php8.1-zip php-redis redis-server -y
2.对php.ini进行配置
[root@ubuntu2004 ~]#vim /etc/php/8.1/fpm/php.inidate.timezone = Asia/Shanghaipost_max_size = 8Mupload_max_filesize = 100Mdisplay_errors = Onerror_log = syslog
extension=redis.so
3.对www.conf进行配置
[root@ubuntu2004 ~]#vim /etc/php/8.1/fpm/pool.d/www.conf
user = www-data
group = www-data
listen = 127.0.0.1:9000
pm.status_path = /php-status
ping.path = /ping
access.log = log/$pool.access.log
slowlog = log/$pool.log.slow
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://127.0.0.1:6379" #指定Redis地址
4.创建日志文件配置并授权
[root@ubuntu2004 ~]# mkdir -p /usr/log
[root@ubuntu2004 ~]# touch /usr/log/www.access.log
[root@ubuntu2004 ~]# chmod 644 /usr/log/www.access.log
[root@ubuntu2004 ~]# chown www-data:www-data /usr/log/www.access.log
5.配置数据库创建用户
[root@ubuntu2004 ~]# mysql
mysql> create user admin@'127.0.0.1' identified with mysql_native_password by '123456';
mysql> grant all on *.* to admin@'127.0.0.1';
mysql> quit;
6.创建nginx文件
[root@ubuntu2004 ~]# vim /etc/nginx/conf.d/test.conf
server{listen 80;server_name 10.0.0.5;root /data/www;index index.php;client_max_body_size 20m;location ~ \.php$|/ping|/status {root /data/www;fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;include fastcgi_params;}}
7.启动服务
[root@ubuntu2004 ~]# systemctl restart nginx.service redis-server.service mysql.service php8.1-fpm.service
8.进行验证
9.下载phpmyadmin
[root@ubuntu2004 ~]# wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
[root@ubuntu2004 ~]# unzip phpMyAdmin-5.2.0-all-languages.zip
[root@ubuntu2004 ~]# mv phpMyAdmin-5.2.0-all-languages/* /data/www
[root@ubuntu2004 ~]# cp /data/www/config.sample.inc.php config.inc.php
[root@ubuntu2004 ~]# vim /data/www/config.inc.php
$cfg['Servers'][$i]['host'] = '127.0.0.1';
10.测试网站是否注销
[root@ubuntu2004 ~]# redis-cli
127.0.0.1:6379> keys *
1) "PHPREDIS_SESSION:i5m1ikcn641d7f3mvpo3mnh1i7"
127.0.0.1:6379> type "PHPREDIS_SESSION:i5m1ikcn641d7f3mvpo3mnh1i7"
string#删除session然后刷新浏览器看是否注销
127.0.0.1:6379> flushall
OK
相关文章:

nginx的基本使用与其日志
文章目录 1.nginx编译安装脚本2.nginx平滑升级,以及其步骤3.nginx核心配置,及实现nginx多虚拟主机4.nginx日志格式定制5.nginx反向代理及https安全加密6.基于LNMP和Redis的phpmyadmin的会话保持,以及其完整步骤 1.nginx编译安装脚本 #编译安…...

linux | 苹果OpenCL(提高应用软件如游戏、娱乐以及科研和医疗软件的运行速度和响应)
点击上方"蓝字"关注我们 01、引言 >>> OpenCL 1.0 于 2008 年 11 月发布。 OpenCL 是为个人电脑、服务器、移动设备以及嵌入式设备的多核系统提供并行编程开发的底层 API。OpenCL 的编程语言类似于 C 语言。其可以用于包含 CPU、GPU 以及来自主流制造商如 …...
算法-UKF中Sigma点生成
void UKF::MakeSigmaPoints() {Eigen::VectorXd x_aug_ Eigen::VectorXd(n_x_);x_aug_.head(n_x_) x_;Eigen::MatrixXd P_aug Eigen::MatrixXd::Zero(n_x_, n_x_);// 转成正定矩阵P_aug pdefinite_svd(P_);// LLT分解Eigen::MatrixXd L P_aug.llt().matrixL();sigma_point…...

精选五款热门骨传导耳机分享,让你避免踩坑的陷阱
因为骨传导耳机独特的佩戴方式和声音的传播方式,受到了小耳、油耳以及运动爱好者的的喜爱,但也由于市面上的骨传导耳机品牌越来越多,很多朋友不知道该怎么选择,今天我挑选出市面上体验感较好,各方面比较出色的骨传导给…...

「字符串」前缀函数|KMP匹配:规范化next数组 / LeetCode 28(C++)
概述 为什么大家总觉得KMP难?难的根本就不是这个算法本身。 在互联网上你可以见到八十种KMP算法的next数组定义和模式串回滚策略,把一切都懂得特别混乱。很多时候初学者的难点根本不在于这个算法本身,而是它令人痛苦的百花齐放的定义。 有…...

python人工智能002:jupyter基本使用
小知识:将jupyter修改为中文,修改用户变量, 注意是用户变量,不是系统变量 新增用户变量 变量名:LANG 变量值:zh_CN.UTF8 然后重启jupyter 上一章的软件安装完成之后,就可以创建文件夹来学习写…...
Linux使用 firewalld管理防火墙命令
Linux 发行版中使用的动态防火墙管理工具。使用 firewalld,你可以查看防火墙状态、当前配置的规则以及开放的端口。以下是一些常用的 firewalld 命令来管理和查看防火墙状态及端口配置。 1. 查看防火墙状态 检查 firewalld 是否正在运行 sudo systemctl status f…...

二叉树(三)
一、二叉树的遍历 二叉树遍历是按照某种特定的规则,依次对二叉树中的结点进行相应的操作,并且每个结点只操作一次。 1.前序遍历(先根遍历) 前序遍历(Preorder Traversal也叫先序遍历)——根、左子树、右…...

05--kubernetes组件与安装
前言:终于写到kubernetes(k8s),容器编排工具不止k8s一个,它的优势在于搭建集群,也是传统运维和云计算运维的第一道门槛,这里会列出两种安装方式,详细步骤会在下文列出,文…...
EmguCV学习笔记 VB.Net和C# 下的OpenCv开发 C# 目录
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...
探索TensorFlow:深度学习的未来
标题:探索TensorFlow:深度学习的未来 在当今快速发展的人工智能领域,TensorFlow无疑是最耀眼的明珠之一。TensorFlow是由Google Brain团队开发的一个开源机器学习框架,它以其强大的灵活性、易用性和高效的性能,迅速成…...

探索地理空间分析的新世界:Geopandas的魔力
文章目录 探索地理空间分析的新世界:Geopandas的魔力背景:为何选择Geopandas?这个库是什么?如何安装这个库?五个简单的库函数使用方法场景应用:Geopandas在实际工作中的应用常见bug及解决方案总结 探索地理…...

如何为网站申请免费SSL证书?
一、准备阶段 确定证书类型: 对于大多数个人博客和小型企业网站,DV(域名验证)SSL证书已足够使用,因为它仅验证域名所有权,成本较低且验证快速。准备域名: 确保你拥有一个有效的域名,…...

Java项目集成RocketMQ
文章目录 1.调整MQ的配置1.进入bin目录2.关闭broker和namesrv3.查看进程确认关闭4.编辑配置文件broker.conf,配置brokerIP15.开放端口109116.重新启动1.进入bin目录2.启动mqnamesrv和mqbroker1.启动 NameServer 并将输出重定向到 mqnamesrv.log2.**启动 Broker 并将…...
如何将 Bamboo agent 能力迁移到极狐GitLab tag 上?
极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...
正则表达式入门:Python ‘ re ‘ 模块详解
正则表达式(Regular Expression,简称 re)是一种强大而灵活的工具,广泛用于字符串匹配、替换和分割等操作,尤其在处理网页爬虫数据时非常有用。Python 提供了 " re " 模块来支持正则表达式的使用,…...
thinkphp8.0+aliapy(支付宝)pc网站支付
环境:宝塔-centOS8.5,php8.3 第一步:安装alipay v3版本的安装依赖包; composer require alipaysdk/openapi:dev第二步:根据官方文档,把支付相关的类引用进来; <?php declare (strict_types 1);namespace app\p…...

高速信号的眼图、加重、均衡
目录 高速信号的眼图、加重、均衡眼图加重均衡线性均衡器CTLE判决反馈均衡器DFE 高速信号的眼图、加重、均衡 眼图 通常用示波器观察接收信号波形的眼图来分析码间串扰和噪声对系统性能的影响,从而估计系统优劣程度,因而眼图分析是高速互连系统信号完整…...

2024年PMP考前冲刺必背的学习笔记,整理好给你!
项目的四大特点:临时性、独特性、变革驱动性和创造商业价值。 项目管理:将知识、技能、工具与技术应用于项目活动,以满足项目的要求 Pestle:P政治,E经济,S社会,T技术,L法律,E环境 …...
增加服务器带宽可以提高资源加载速度吗?
答案是可以的 ,增加服务器带宽通常能够提高资源加速速度。带宽是服务器与互联网之间传输数据的速率,它决定了在单位时间内可以传输的数据量。以下是增加带宽如何提高资源加速速度的几个方面: 1.更快的数据传输:带宽增加后…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...