nginx页面优化及yum安装LNMP

news2024/12/28 18:27:01

文章目录

  • 一.nginx优化
    • 1.版本号
      • 1.1查看版本号
      • 1.2修改版本号
        • 1.2.1修改配置文件
        • 1.2.2修改源码文件,重新编译安装
    • 2.nginx的日志分割
      • 2.1 写日志分割的脚本
      • 2.2给脚本执行权限、执行
      • 2.3创建定时任务可以每个月固定分割一次
    • 3.nginx的页面压缩
      • 3.1配置
      • 3.2验证
    • 4.图片缓存
      • 4.1配置
      • 4.2浏览器页面访问验证
    • 5.连接超时
      • 5.1配置
    • 6.nginx的并发设置
      • 6.1配置
    • 7.防盗链
      • 7.1配置
      • 7.2验证
        • 7.2.1没有none参数验证
  • 二.yum 安装 LNMP
    • 1.安装 nginx
    • 2.安装mysql 5.7 (mariadb)
      • 2.1安装mysql服务
      • 2.2登录mysql
    • 3.安装 php7.2
    • 4.配置 nginx 支持 PHP 解析
    • 5.测试mysql是否能连接成功

一.nginx优化

1.版本号

对版本号进行更改的目的:可以根据nginx的版本号进行破译,因此都会隐藏后端服务应用的真实版本号

1.1查看版本号

#使用本地服务地址查询
curl -I 192.168.198.13
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sun, 25 Jun 2023 01:46:29 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 21 Jun 2023 14:23:30 GMT
Connection: keep-alive
ETag: "649307e2-264"
Accept-Ranges: bytes
#使用nginx命令查询
nginx -v
nginx version: nginx/1.12.2

1.2修改版本号

1.2.1修改配置文件

#切换到nginx的配置文件目录下
cd /usr/local/nginx/
cd conf/
#复制配置文件做备份
cp nginx.conf nginx.conf.bak.2023.3.25
vim nginx.conf
#关闭版本号
在http中添加server_tokens off;
#重启服务
systemctl restart nginx.service

命令查看关闭的版本号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2K8r23gF-1687673546435)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625105119435.png)]

1.2.2修改源码文件,重新编译安装

#切换到配置文件的目录
cd /opt/nginx-1.12.2/src/core/
#进入配置文件,将配置文件的真是版本号进行修改
vim nginx.h
#define NGINX_VERSION      "whd"
#重新编译安装
cd /opt/nginx-1.12.2/
#编译安装
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
#修改配置文件
cd /usr/local/nginx/conf/
vim nginx.conf
#在源码包中重新定义了版本号,则打开版本号并无影响
在http中将off需改为on打开server_tokens on;
 systemctl restart nginx.service

此时F12调出来,F5刷新,如没变化可以清理浏览器缓存再查看,版本号的地方是自己的自定义的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fWASN41a-1687673546436)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625104704166.png)]

使用命令查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-idJVOCf2-1687673546436)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625105018763.png)]

2.nginx的日志分割

为什么做日志分割:nginx不带日志分割的工具,因此所有的日志分割都是以shell脚本的格式来实现日志的分割

2.1 写日志分割的脚本

 vim nginxlog.sh

#!/bin/bash
#获取当前日期 
d=$(date +%Y-%M-%d)
#定义存储目录 
dir="/usr/local/nginx/logs/"
#定义需要分割的日志源文件 
logs_file='/usr/local/nginx/logs/access.log'
logs_error='/usr/local/nginx/logs/error.log'
#定义nginx服务的pid文件 
pid_file='/usr/local/nginx/logs/nginx.pid'
if [ ! -d $dir ]
  then
  mkdir $dir
fi
#移动日志文件access error,重新命名
mv ${logs_file} ${dir}/access${d}.log
mv ${logs_error} ${dir}/error${d}.log
#发送信号,给nginx主程序,让nginx生成新的日志文件 
kill -USR1 $(cat ${pid_file})
#日志文件清理,把30天前的日志,直接清除 
find $dir -mtime +30 -exec rm -rf {} \;

2.2给脚本执行权限、执行

chmod 777 nginxlog.sh 
./nginxlog.sh 
cd /usr/local/nginx/logs/
ls
access2023-14-25.log  access.log           error.log
access_.log           error2023-14-25.log  nginx.pid

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vWelZgQu-1687673546436)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625111615893.png)]

2.3创建定时任务可以每个月固定分割一次

crontab -e -u root
0 0 1 * * /opt/nginxlog.sh

3.nginx的页面压缩

压缩的目的:为了节约宽带,提高访问速度

由ngx_http_gzip_module压缩模块所提供的功能,默认是注释掉的,不压缩,需要人工指定配置

3.1配置

cd /usr/local/nginx/conf/
vim nginx.conf
#找到gzip  on;取消注释并在下面添加
    gzip  on;
    #最小的压缩文件,小与1K就不再压缩了
    gzip_min_length 1k;
    #压缩的缓冲区,4个64K缓冲区
    gzip_buffers 4 64K;
    #压缩版本,默认1.1
    gzip_http_version 1.1;
    #压缩级别1-9,6不大不小,不快不慢,正好
    gzip_comp_level 6;
    #支持前段缓存服务器的压缩功能打开
    gzip_vary on;
    #支持压缩的类型
   gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xmltrss image/jpgmage/ipeg image/png image/gif application/x-httpd-php application/iavascriot application/json;
#检查配置文件、重启服务
nginx -t
systemctl restart nginx

3.2验证

浏览器刷新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FSO7El4J-1687673546437)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625114712810.png)]

4.图片缓存

作用:避免重复访问,导致访问速度变慢,加快访问的时间,主要针对静态页面,动态不设置缓存时间

4.1配置

vim nginx.conf
#在location ~ \.php$下面添加一个新的,location ~*支持正则匹配,\.转义符,以.gif|jpg|jepg|bmp|ico开头的都文件可以压缩
location ~* \.(gif|jpg|jepg|bmp|ico)$ {
#指定根目录的html,就是/usr/local/nginx/html,指定默认静态页面
             root html;
#设定图片缓存时间为1天
             expires 1d;
}

nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
systemctl restart nginx

4.2浏览器页面访问验证

清理缓存,查看304就是缓存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nt0mPy5p-1687673546437)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625120351990.png)]

再次清理缓存就是200,没有缓存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCThxZCw-1687673546437)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625120534846.png)]

再次刷新又会变成304即是加载的缓存

图片缓存一天:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OhHaMDUQ-1687673546437)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625122104181.png)]

5.连接超时

http自带keepalive模式,keepalive为缓存记录时间,(web加大用户访问速度)

web服务器外理完一个请求之后,保持tcp许接,接受到同样的客户端的其他请求时,web服务器就会利用这个未关闭的连接,继续提供相应,不需要再新建连接了keepalive:在一段时间之内保持打开状态,他会占用资源,占用过多资源,影响整体性能。

连接保持,设置取恰当的范围,不可太长(占用资源),不可太短(第二次访问不快)

5.1配置

vim nginx.conf
#keepalive_timeout  65;的意思是指定的tcp连接最多只能保持65秒,在65秒之后,服务器就会关闭连接(nginx默认65秒。一般浏览器都是60秒,可以指定时间,一般60s,如果设置0,nginx就不会在发送包含keepalive的相应头)
#将65修改为60,60s之后关闭连接
keepalive_timeout  60;
#客户端向服务端发送一个完整的请求头的超时时间
client_header_timeout 60;
#客户端向服务端发送一个完整的请求体的超时时间,没有在60s内向web服务器请求发送任何内容,nginx会返回错误代码408——请求超时
client_body_timeout 60;
nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
systemctl restart nginx

6.nginx的并发设置

目的:有很多场景会涉及到高并发,高并发场景是需要进行优化的,需要启动更多的nginx进程,以保证快速响应,处理用户请求,避免阻塞,根据核心数计算:有几个cpu(查看cpu数可以使用命令:cat /proc/cpuinfo | grep processor | wc -l)

nginx工作的核心数和服务器内核之间要么一致,要么是核心数的2倍,如有16个内核,最多给8个,超过8个性能不在提升且会降低稳定性,8个是上限

6.1配置

vim nginx.conf
#指定内核数,本服务器内核是4个,可给4个
worker_processes  4;
#指定工作的内核编号指定第一个和第二个,要么用第一个,要么用第二个(此处cpu是按二进制排列,第一个表示为0001,第二个为0010,第三个为0100,第四个为0000)
worker_cpu_affinity 01 10 100 0;

nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
systemctl restart nginx

7.防盗链

目的:防止别人盗用网站的图片,一旦使用会回复正在盗用图片,不可以用

7.1配置

vim /usr/local/nginx/conf/nginx.conf
location ~ .*\.(gif|jpg|swf|png)$ {
#允许访问不加http直接地址,不加协议请求访问资源,此处*.whd.com whd.com设置信任的网站可以正常使用图片文件
                   valid_referers none blocked www.baidu.com;
#如不是受信任网站                
                   if ( $invalid_referer ) {
#直接返回403
                  return 403;
                }               
}
nginx -t
systemctl restart nginx

cd /usr/local/nginx/html

使用一张6.jpg图片传到当前目录下用于验证

在这里插入图片描述

7.2验证

7.2.1没有none参数验证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JUhrnHoF-1687673546438)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625130834627.png)]
虽然在html中的文件进行了防盗配置,但是还是访问的时候会出来图片,并不是403报错,这是因为:这种形式的访问是直接请求服务器中默认html中的6.jpg文件,是没有头部的(只有二次以上请求才会有referer头部),并且我们在配置文件中添加了[none]这个参数,它的含义就是当我们在没有头部referer时,依然能访问到文件,所以我们配置的防盗链在这个时候是不起作用的。

将none参数去掉验证效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pwxqcFi8-1687673546438)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625134703017.png)]

systemctl restart nginx

再次访问就会有返回错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l2tuwQWA-1687673546439)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230625134741221.png)]

二.yum 安装 LNMP

1.安装 nginx

#使用本地源
[root@test4 yum.repos.d]# vim nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
#yum安装
yum install nginx -y
#查看版本号
nginx -v
nginx version: nginx/1.24.0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jfOKGiGl-1687673546439)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230624202409688.png)]

#开启nginx服务、设置开机自启
systemctl start nginx
systemctl enable nginx

2.安装mysql 5.7 (mariadb)

2.1安装mysql服务

#卸载系统中所有 mariadb 软件包,执行这个命令需要注意数据备份,因为使用这个命令会完全删除 mariadb 系统软件包及其数据。如果您想要保留数据库数据,可以先备份数据,然后再执行卸载命令。
yum remove mariadb* -y

为什么在使用yum安装LNMP时卸载系统中所有 mariadb 软件包:
主要目的是为了避免因为与 MariaDB 相关的包与 MySQL 配置冲突而导致的一些问题。具体来说,MariaDB 是 MySQL 的一个分支,二者在使用时可能会产生兼容性问题。此外,如果两个数据库服务器共用同一个端口号,可能会出现端口争用的问题,导致其中一个数据库系统无法正常工作。
因此,在安装 LNMP 环境时,首先需要卸载掉已经安装的 MariaDB 以避免潜在问题,然后再安装 MySQL 数据库。注意,此步骤需要结合实际情况来判断是否需要执行,如果当前系统中没有安装 MariaDB 或者您打算仍然使用 MariaDB 数据库,则不需要执行此命令。

#使用wget命令指定URL下载文件,此文件是文件是 MySQL 社区版本的安装软件包之一
wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
#使用 RPM 软件包安装 MySQL 社区版本的安装软件包之一
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
#将 mysql-community.repo 文件中所有 gpgcheck=1 的行替换为 gpgcheck=0。这个命令会禁用GPG密钥检查,否则在安装MySQL时,可能会遇到“GPG 错误”提示,导致安装失败。
sed -i 's/gpgcheck=1/gpgcheck=0/' mysql-community.repo
#安装 MySQL 数据库服务器
yum -y install mysql-server

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TT4O8Z7s-1687673546439)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230624202730330.png)]

#开启mysql服务、设置开机自启
systemctl start mysqld.service
systemctl enable mysqld.service
#在日志文件中找出root用户的初始密码
grep "password" /var/log/mysqld.log
2023-06-24T12:28:04.678985Z 1 [Note] A temporary password is generated for root@localhost: Y&fWUtXYU5w.
#MySQL错误日志中查找并提取密码的信息
grep "password" /var/log/mysqld.log | awk '{print $NF}'
Y&fWUtXYU5w.

2.2登录mysql

#登录root用户
mysql -uroot -p
#输入初始密码Y&fWUtXYU5w.  
Enter password:Y&fWUtXYU5w.
 #密码设置要求有 大小写字母、数字和符号 组合
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@123'; 
Query OK, 0 rows affected (0.01 sec)
#设置远程连接权限
mysql> grant all privileges on *.* to root@"%" identified by "Admin@123" with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
#修改后的内容立即生效
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#退出
mysql> exit
Bye
#为了防止每次yum操作都会自动更新,卸载这个软件
yum -y remove mysql57-community-release-el7-10.noarch   

3.安装 php7.2

#安装 EPEL 存储库,为 CentOS/RHEL 系统引入第三方软件包的支持,以扩展 Linux 操作系统的功能和性能。
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
#安装 Webtatic 存储库以获取最新版本的 PHP 和相关扩展包,从而增强系统的功能和性能。
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
#yum安装安装 PHP 7.2 及其常用扩展,并提供对 Web 服务器和数据库的支持,方便用户开发 PHP Web 应用程序。
 yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-redis --skip-broken
 #安装PHP 命令行工具
 sudo yum install php-cli -y
#开启php服务和自启动
systemctl start php-fpm
systemctl enable php-fpm 
 #查看php的版本号
 php -v
PHP 7.2.34 (cli) (built: Oct  1 2020 13:37:37) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.34, Copyright (c) 1999-2018, by Zend Technologies

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TWho7DsF-1687673546439)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230624212026445.png)]

4.配置 nginx 支持 PHP 解析

cd /etc/nginx/conf.d
#修改配置文件
vim default.conf

#第29行-35行取消注释
#将 /scripts 修改为nginx的工作目录
location ~ \.php$ {
         root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastc    gi_script_name;
        include        fastcgi_params;
     }
检测配置文件并重新刷新nginx服务
nginx -t
systemctl restart nginx
cd /usr/share/nginx/html
vim index.php
<?php
phpinfo();
?>

浏览器访问:http://192.168.198.14/index.php

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9j7BwmyV-1687673546440)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230624212633802.png)]

注:此处访问如有访问不出来查看防火墙是否关闭

5.测试mysql是否能连接成功

#进入删除后添加
vim /usr/share/nginx/html/index.php
<?php
$link=mysqli_connect('192.168.198.14','root','Admin@123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

浏览器访问:http://192.168.198.14/index.php

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA通信—千兆网(RTL8211EG)硬件设计

一、硬件布局指南 创造一个低噪音、功率稳定的环境降低EMI/EMC的程度及其对RTL8211E/RTL8211EG的影响简化信号跟踪的路由任务 1.1 布局 RTL8211EG 必须尽可能靠近MAC&#xff08;小于2.5英寸6.35cm&#xff09;连接到RSET引脚的电阻器应靠近RTL8211E/RTL8211EG&#xff08…

jmeter接口测试教程以及接口测试流程详解

目录 前言&#xff1a; 一、Jmeter简介 二、Jmeter安装 三、设置Jmeter语言为中文环境 四、Jmeter主要元件 五、Jmeter元件的作用域和执行顺序 六、Jmeter进行接口测试流程 七、Jmeter进行接口测试流程步骤详解 前言&#xff1a; JMeter是一款功能强大的性能测试工具&…

【算法与数据结构】18、LeetCode四数之和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题的解法借助了【算法与数据结构】15、LeetCode三数之和的算法思想。首先我们进行排序&#xff0c;然…

用实例阐述回溯算法

目录 什么是回溯算法&#xff1f; 基本概念 示例认知 什么时候可以使用回溯算法&#xff1f; 回溯算法经典应用-无向图两节点之间路径 问题描述 回溯过程 代码示例 回溯算法经典应用-四皇后问题 问题描述 四皇后问题解决步骤 Step 1 Step 2 Step 3 Step 4 Step…

ICC2:polygon多边形操作

有时候想画一个环形或者不规则形状的metal shape/blockage,一遇到更新floorplan都要重新画,手工活如果能被脚本替代肯定是最优解,ICC2就提供这样的一组命令有效提高工作效率。 1.创建polygon 先看一下创建polygon的操作: create_poly_rect:提供一组或多组boundary坐标,工…

OpenCL编程指南-5.2数学函数

数学函数 OpenCL C实现了C99规范中描述的数学函数。使用这些数学函数的应用程序需要在代码中包含math.h头文件。这些数学函数可以作为OpenCL内核的内置函数。 对于表5-2和表5-3中的数学函数&#xff0c;我们将使用泛型类型名gentype指示这些函数可以取float、float2、float3、…

【AUTOSAR】CCP协议的代码分析与解读(二)----CCP协议格式和命令代码

CCP协议介绍 CCP的全称是CAN Calibration Protocol (CAN标定协议)&#xff0c;是基于CAN总线的ECU标定协议规范。CCP协议遵从CAN2.0通信规范&#xff0c;支持11位标准与29位扩展标识符。 CCP通信方式 CCP协议采用主从通信方式&#xff0c;如上图所示&#xff0c;其中从设备是…

Visual modflow Flex地下水数值模拟教程

详情点击链接&#xff1a;Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析 一&#xff0c;地下水数值软件的操作流程、建模步骤和所需资料处理 [1] Visual MODFLOW Flex特征[2] Visual MODFLOW Flex软件界面及模块 [3] 地…

详细讲解接口自动化攻略

目录 前言&#xff1a; 为什么要做接口自动化 问题在哪里 全靠参数化 接口间参数传递 测试数据参数化 测试断言 测试管理 导入测试用例 接口执行顺序 使用测试数据集 测试参数配置 运行结果&测试报告 测试套件 前言&#xff1a; 接口自动化是提高测试效率和…

ThreadX在gcc下的移植

本文介绍ThreadX在arm-none-eabi-gcc编译器下的移植方法。 1、ThreadX介绍和源码获取 threadx的介绍和源码获取请参考之前的博文&#xff1a;ThreadX在mdk(AC5)中的移植。 2、准备工作 本篇主要介绍threadx在corex-m7上的移植&#xff0c;编译器使用arm-none-eabi-gcc。 在…

智能井盖传感器:以科技破解城市顽疾

在城市的道路网络中&#xff0c;井盖扮演着重要的角色&#xff0c;用于覆盖下方的管道和设施&#xff0c;然而&#xff0c;由于井盖的老化、损坏或被盗&#xff0c;常常会导致安全问题的发生&#xff0c;如路面塌陷、行人受伤等。井盖的状态监测和维护一直是城市管理者面临的挑…

2023年8月PMP考试,考生需要关注这些!

经PMI和中国国际人才交流基金会研究决定&#xff0c;中国大陆地区2023年第三期PMP认证考试定于8月19日举办。考生须认真阅读下文&#xff0c;知悉考试安排及注意事项&#xff0c;并遵守考试有关规定。 考生须认真阅读下文&#xff0c;知悉考试安排及注意事项&#xff0c;并遵守…

阿里推出了一个集成AI的数据库客户端,霸榜GitHub

背景 &#x1f4d6; 简介    Chat2DB 是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力&#xff0c;能够将自然语…

基于vue的可拖拽设计的报表看板设计器

gitee上的不错项目&#xff0c;基于vue实现的可拖拽的看板设计器可以自由搭配颜色和图标&#xff0c;开发者可以只关注业务数据接口&#xff0c;前端不擅长的人员可以直接轻松上手。 1.可支持的元素 文字&#xff0c;边框&#xff0c;常见图表&#xff0c;柱形图&#xff0c;…

pgsql查询分页不对和属性转json的mapper映射

pgsql查询分页不对和属性转json的mapper映射 第一种&#xff1a; select * from xxx left join (selectarray_agg(jsonb_build_object(labelId,dl.label_id,labelName,dl.label_name)) as labelList,array_agg(dl.label_name) as labelNames,array_agg(dl.label_id) labelIdLi…

使用Python和Selenium自动化爬取 #【端午特别征文】 探索技术极致,未来因你出“粽” # 的投稿文章

文章目录 介绍&#xff1a;界面展示知识点详解导入相关模块设置Chrome驱动程序的路径创建ChromeDriver服务和启动Chrome浏览器发送GET请求获取网页内容模拟向下滚动加载更多内容获取完整的HTML内容关闭浏览器使用正则表达式提取文章信息构建数据表格和导出到Excel 扩展知识点代…

HTTP中的API是什么?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是API&#xf…

活动选择问题|贪婪算法-1

贪婪是一种算法范式&#xff0c;它一点一点地构建解决方案&#xff0c;总是选择下一个提供最明显和最直接好处的部分。贪婪算法用于优化问题。 如果优化问题具有以下属性&#xff0c;则可以使用贪婪解决该问题&#xff1a; 在每一步中&#xff0c;我们都可以做出一个目前看起来…

scrapy学习(scrapy项目学习)

创建scrapy项目 创建爬虫项目 scrapy startproject ss1_miove创建爬虫文件&#xff08;&#xff09; 命令格式&#xff1a;scrapy genspider <爬虫名称> <网站域名> scrapy genspider ss1_scrapy ssr1.scrape.centerscrapy框架的组成 spider文件夹&#xff1a…

ELK之Elasticsearch7.17.4安装(yum方式)和三节点集群配置

一、下载Elasticsearch7.17.4 的rpm包 下载地址&#xff1a; https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-4 二、建立elasticsearch的yum源 vim /etc/yum.repos.d/es.repo [elasticsearch] nameElasticsearch repository for 7.x packages bas…