【Nginx37】Nginx学习:SSL模块(一)简单配置与指令介绍
Nginx学习:SSL模块(一)简单配置与指令介绍
又是一个重点模块,SSL 模块,其实就是我们常见的 HTTPS 所需要的配置模块。HTTPS 的重要性不用多说了吧,现在所有的 App、小程序 都强制要求是 HTTPS 的,即使是网站开发,百度也明确了对 HTTPS 的收录会更好。也就是说,HTTPS 已经成为了事实上的正式环境协议标准。
在 Nginx 中,使用 ngx_http_ssl_module 来配置 HTTPS 其实非常简单,不过首先要确认这个模块是否安装了,默认情况下,它是不会自动安装的,需要我们在编译时加上 --with-http_ssl_module 来进行安装。不过现在不管是面板工具还是各种安装教程,都会建议并直接安装上这个模块。
它的配置指令比较多,我们先来配置一套并测试一下,然后了解一下所有的配置指令。下篇文章再拿一套配置进行简单地分析。
先准备证书,这个证书如果要按正式的来说,我们应该去证书提供商那里买的,当然也有一些免费的。或者使用 宝塔面板 之类的工具也有提供免费的 Let's Encrypt 证书。在这里我们进行本地演示,就直接生成证书好了。
[root@localhost article.http.d]# openssl req -new -nodes -newkey rsa:2048 -keyout 37.key -out 37.csr
Generating a RSA private key
......................+++++
..............+++++
writing new private key to '37.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:[root@localhost article.http.d]# openssl x509 -req -days 365 -in 37.csr -signkey 37.key -out 37.crt
Signature ok
subject=C = XX, L = Default City, O = Default Company Ltd
Getting Private key[root@localhost article.http.d]# ll 37*
-rw-r--r-- 1 root root 172 Sep 22 09:13 37.conf
-rw-r--r-- 1 root root 1115 Sep 22 09:15 37.crt
-rw-r--r-- 1 root root 952 Sep 22 09:14 37.csr
-rw------- 1 root root 1704 Sep 22 09:08 37.key 使用 openssl 命令,生成的 csr 和 key 是我们需要的东西。如果你是从云服务商那里买的或者找的免费申请的,在收到邮件下载之后,获得的也是这两个文件。
然后我们就直接用它们进行配置吧。
server{listen 8037;listen 443 ssl;root html;ssl_certificate /etc/nginx/article.http.d/37.crt;ssl_certificate_key /etc/nginx/article.http.d/37.key;} 上面这个配置,我们指定 listen 443 ,并加了 ssl 参数,表示这个端口使用 SSL 监听。然后通过两个配置指令指定证书,这里可以写绝对路径也可以写相对路径,如果是相对路径,就是找的 Nginx 运行 prefix 目录。
就这么简单,配完了。接下来访问一下 https://192.168.56.88/ 吧。

这是什么情况?为啥访问不了呢?其实呀,我们自己生成的证书是没有经过 CA 认证的,这个 CA 的概念就是一个中介信任机构。如果我们从网上买的证书,会经过一些指定的 CA 机构认证。浏览器也会通过这些 CA 机构来判断你的证书是不是合法的,如果没有 CA 认证,就说明这个证书的来源不明,可能不是正规的或者被篡改了。因此,浏览器的安全机制就会出现这样的提示。
我们只需要忽略并确认继续访问之后就可以直接打开了,但是浏览器地址栏上的 https 这几个字符会有个删除斜杠,表示这个链接是有问题的(或者有个小红锁之类的)。大家可以自己看看哦。
普通的 8037 端口还是可以通过 http 访问的,我们也可以在 listen 8037 后面加上 ssl 参数,让 8037 也走 HTTPS 。并且 WireShark 查看效果。
先来看看普通情况下的 WireShark 抓包情况。

数据是明文的。接下来,添加 ssl 参数 listen 8037 ssl; ,重载配置后使用 https 进行访问。

很明显,连接建立时就出现 TLVS 连接了,结果也是乱码的加密信息了。
接下来我们再测试一下,使用普通的 http 协议是不是能访问带 ssl 的端口呢?抱歉,直接 400 错误了,错误信息也非常清楚。
// 访问普通 http://192.168.56.88:8037/
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.23.0</center>
</body>
</html> 如果去掉 ssl ,但是又直接使用 https 访问呢?会直接报出这样的错误信息。
// 访问 https://192.168.56.88:8037/
Error: write EPROTO 140347956612328:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER:../../../../src/third_party/boringssl/src/ssl/tls_record.cc:242: 好了,一套简单的 HTTPS 配置我们就完成了。
其实从上面也可以看出,最核心的三个配置指令,就可以完成整个 HTTPS 相关的配置。不过,整个 SSL 的配置远不止这些,虽说其它的可能并不常用吧,但不妨碍我们了解一下。大部分配置在官方文档中显示都只能在 http、server 下配置,但有些其实也可以配置在 location 里面。下面我们就一个一个先看看这些配置信息的介绍。
配置指令
ssl
开启或关闭 ssl 。
ssl on | off; 默认 off ,该指令在版本 1.15.0 中已过时,应该使用 listen 指令的 ssl 参数。(新版本的就不要用这个啦~)
ssl_buffer_size
设置用于发送数据的缓冲区大小。
ssl_buffer_size size; 默认情况下,缓冲区大小为 16k,这对应于发送大响应时的最小开销。为了最小化第一个字节的时间,使用较小的值可能是有益的。一般不需要去设置这个。
ssl_certificate
为给定的虚拟服务器指定带有 PEM 格式证书的文件。
ssl_certificate file; 如果除了主证书之外还应指定中间证书,则应按以下顺序在同一文件中指定它们:首先是主证书,然后是中间证书。 PEM 格式的密钥可以放在同一个文件中。
从 1.11.0 版本开始,可以多次指定该指令以加载不同类型的证书,例如 RSA 和 ECDSA。只有 OpenSSL 1.0.2 或更高版本支持不同证书的单独证书链。对于旧版本,只能使用一个证书链。从 1.15.9 版本开始,在使用 OpenSSL 1.0.2 或更高版本时,可以在文件名中使用变量。请注意,使用变量意味着将为每次 SSL 握手加载证书,这可能会对性能产生负面影响。
可以指定值 data:$variable 来代替文件 (1.15.10),它从变量加载证书而不使用中间文件。请注意,不恰当地使用此语法可能会产生安全隐患,例如将密钥数据写入错误日志。应该记住,由于最大互操作性的 HTTPS 协议限制,虚拟服务器应该侦听不同的 IP 地址。
ssl_certificate_key
为给定的虚拟服务器指定具有 PEM 格式的密钥的文件。
ssl_certificate_key file; 可以指定值 engine:name:id 代替文件 (1.7.9),该文件从 OpenSSL 引擎名称加载具有指定 id 的密钥。可以指定值 data:$variable 代替文件 (1.15.10),该文件从变量加载密钥而不使用中间文件。请注意,不恰当地使用此语法可能会产生安全隐患,例如将密钥数据写入错误日志。
从版本 1.15.9 开始,在使用 OpenSSL 1.0.2 或更高版本时,可以在文件名中使用变量。
ssl_ciphers
指定启用的加密算法。
ssl_ciphers HIGH:!aNULL:!MD5; 加密算法以 OpenSSL 库可以理解的格式指定。可以使用“openssl ciphers”命令查看完整列表。之前的 nginx 版本默认使用不同的加密算法。
ssl_client_certificate
如果启用了 ssl_stapling,则指定一个带有 PEM 格式的可信 CA 证书的文件,用于验证客户端证书和 OCSP 响应。
ssl_client_certificate file; 证书列表将发送给客户。如果不需要,可以使用 ssl_trusted_certificate 指令。
ssl_conf_command
设置任意 OpenSSL 配置命令。
ssl_conf_command name value; 使用 OpenSSL 1.0.2 或更高版本时支持该指令。可以在同一级别上指定多个 ssl_conf_command 指令,当且仅当当前级别上没有定义 ssl_conf_command 指令时,这些指令才从先前的配置级别继承。请注意,直接配置 OpenSSL 可能会导致意外行为。
ssl_crl
指定用于验证客户端证书的 PEM 格式的已撤销证书 (CRL) 文件。
ssl_crl file; ssl_dhparam
为 DHE 密码指定具有 DH 参数的文件。
ssl_dhparam file; 默认情况下未设置任何参数,因此不会使用 DHE 密码。在 1.11.0 版本之前,默认使用内置参数。
ssl_early_data
启用或禁用 TLS 1.3 早期数据。
ssl_early_data on | off; 默认值是 off ,在早期数据中发送的请求会受到重放攻击。为了防止在应用层受到此类攻击,应使用 $ssl_early_data 变量。使用 OpenSSL 1.1.1 或更高版本 (1.15.4) 和 BoringSSL 时支持该指令。
ssl_ecdh_curve
指定 ECDHE 密码的曲线。
ssl_ecdh_curve curve; 默认值是 auto ,使用 OpenSSL 1.0.2 或更高版本时,可以指定多条曲线 (1.11.0),特殊值 auto (1.11.0) 指示 nginx 在使用 OpenSSL 1.0.2 或更高版本或使用旧版本的 prime256v1 时使用内置于 OpenSSL 库中的列表。
在 1.11.0 版本之前,默认使用 prime256v1 曲线。当使用 OpenSSL 1.0.2 或更高版本时,该指令设置服务器支持的曲线列表。因此,为了使 ECDSA 证书发挥作用,重要的是包含证书中使用的曲线。
ssl_ocsp
启用客户端证书链的 OCSP 验证。
ssl_ocsp on | off | leaf; 默认值是 off ,leaf 参数仅启用客户端证书的验证。使 OCSP 验证正常工作,应将 ssl_verify_client 指令设置为 on 或可选。要解析 OCSP 响应程序主机名,还应指定解析器指令。
ssl_ocsp_cache
为 OCSP 验证设置存储客户端证书状态的缓存的名称和大小。
ssl_ocsp_cache off | [shared:name:size]; 默认值是 off ,缓存在所有工作进程之间共享。同名缓存可用于多个虚拟服务器。off 参数禁止使用缓存。
ssl_ocsp_responder
覆盖“授权信息访问”证书扩展中指定的 OCSP 响应者的 URL,以验证客户端证书。
ssl_ocsp_responder url; 仅支持“http://”OCSP 响应。
ssl_password_file
指定一个包含密钥密码短语的文件,其中每个密码短语在单独的行中指定。
ssl_password_file file; 加载密钥时会依次尝试密码短语。
ssl_prefer_server_ciphers
指定在使用 SSLv3 和 TLS 协议时,服务器加密算法应优先于客户端加密算法。
ssl_prefer_server_ciphers on | off; 默认值 off 。
ssl_protocols
启用指定的协议。
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3]; 默认值是 TLSv1 TLSv1.1 TLSv1.2 ,TLSv1.1 和 TLSv1.2 参数(1.1.13、1.0.12)仅在使用 OpenSSL 1.0.1 或更高版本时有效。TLSv1.3 参数 (1.13.0) 仅在使用 OpenSSL 1.1.1 或更高版本时有效。
ssl_reject_handshake
如果启用,服务器块中的 SSL 握手将被拒绝。
ssl_reject_handshake on | off; 默认 off 。
ssl_session_cache
设置存储会话参数的缓存的类型和大小。
ssl_session_cache off | none | [builtin[:size]] [shared:name:size]; 它的参数意义是:
off 严格禁止使用会话缓存:nginx 明确告诉客户端会话可能不会被重用。
none 温和地禁止使用会话缓存:nginx 告诉客户端会话可以被重用,但实际上并没有将会话参数存储在缓存中。
builtin OpenSSL 中内置的缓存;仅由一个工作进程使用。缓存大小在会话中指定。如果未给出大小,则等于 20480 个会话。使用内置缓存会导致内存碎片。
shared 所有工作进程之间共享的缓存。缓存大小以字节为单位指定;一兆字节可以存储大约 4000 个会话。每个共享缓存都应该有一个任意名称。同名缓存可用于多个虚拟服务器。
两种缓存类型可以同时使用,例如:
ssl_session_cache builtin:1000 shared:SSL:10m; 但是只使用没有内置缓存的共享缓存应该更有效。
ssl_session_ticket_key
使用用于加密和解密 TLS 会话票证的密钥设置文件。
ssl_session_ticket_key file; 如果必须在多个服务器之间共享相同的密钥,则该指令是必需的。默认情况下,使用随机生成的密钥。
如果指定了多个密钥,则仅第一个密钥用于加密 TLS 会话票证。这允许配置密钥轮换,例如:
ssl_session_ticket_key current.key;
ssl_session_ticket_key previous.key; 该文件必须包含 80 或 48 字节的随机数据,根据文件大小,使用 AES256(对于 80 字节密钥,1.11.8)或 AES128(对于 48 字节密钥)进行加密。
ssl_session_tickets
通过 TLS 会话票证启用或禁用会话恢复。
ssl_session_tickets on | off; 默认 on 。
ssl_session_timeout
指定客户端可以重用会话参数的时间。
ssl_session_timeout time; 默认 5m 。
ssl_stapling
启用或禁用服务器对 OCSP 响应的装订。
ssl_stapling on | off; 默认 off ,要使 OCSP 装订工作,应该知道服务器证书颁发者的证书。如果 ssl_certificate 文件不包含中间证书,则服务器证书颁发者的证书应存在于 ssl_trusted_certificate 文件中。对于 OCSP 响应程序主机名的解析,还应指定解析器指令。
ssl_stapling_file
设置后,将从指定文件中获取装订的 OCSP 响应,而不是查询服务器证书中指定的 OCSP 响应者。
ssl_stapling_file file; 该文件应采用“openssl ocsp”命令生成的 DER 格式。
ssl_stapling_responder
覆盖“授权信息访问”证书扩展中指定的 OCSP 响应者的 URL。
ssl_stapling_responder url; 仅支持“http://”OCSP 响应。
ssl_stapling_verify
启用或禁用服务器对 OCSP 响应的验证。
ssl_stapling_verify on | off; 默认值 off ,为了使验证工作,服务器证书颁发者的证书、根证书和所有中间证书应使用 ssl_trusted_certificate 指令配置为受信任的。
ssl_trusted_certificate
如果启用了 ssl_stapling,则指定一个带有 PEM 格式的可信 CA 证书的文件,用于验证客户端证书和 OCSP 响应。
ssl_trusted_certificate file; 与 ssl_client_certificate 设置的证书相反,这些证书的列表不会发送给客户端。
ssl_verify_client
启用客户端证书的验证。验证结果存储在 $ssl_client_verify 变量中。
ssl_verify_client on | off | optional | optional_no_ca; 默认值 off 。可选 optional 参数 (0.8.7+) 请求客户端证书并验证证书是否存在。
optional_no_ca 参数(1.3.8、1.2.5)请求客户端证书,但不要求它由受信任的 CA 证书签名。这适用于 nginx 外部的服务执行实际证书验证的情况。证书的内容可通过 $ssl_client_cert 变量访问。
ssl_verify_depth
在客户端证书链中设置验证深度。
ssl_verify_depth number; 默认 1 。
总结
上面的配置是不是很多看着都很懵圈啊?如果是的话,那么咱们水平其实差不多,很多我也不知道是啥意思。但是就像前面说的,本着了解的态度来学习嘛。当然,最核心的那三个,也就是最上面我们配置的那三个还是需要了解的。还好,一个是要在 listen 后面跟上一个 ssl 参数,表示开启这个端口的 SSL 访问。另外两个就是指定密钥文件的地址。这三个配置说实话,真不复杂,也非常好记。
下篇文章我们将继续 SSL 的学习,主要是继续介绍 SSL 模块的错误状态码、变量信息以及分析一下宝塔生成的 SSL 配置是什么内容。
参考文档:
http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_conf_command
相关文章:
【Nginx37】Nginx学习:SSL模块(一)简单配置与指令介绍
Nginx学习:SSL模块(一)简单配置与指令介绍 又是一个重点模块,SSL 模块,其实就是我们常见的 HTTPS 所需要的配置模块。HTTPS 的重要性不用多说了吧,现在所有的 App、小程序 都强制要求是 HTTPS 的࿰…...
CompletableFuture 异步调用,获取返回值
ExecutorService executor new ThreadPoolExecutor(8, 16, 60,TimeUnit.MINUTES,new ArrayBlockingQueue<>(100));Random randomnew Random(10);//模拟查询用户列表List<User> listselectUsers();//需要执行的任务列表// 任务列表List<CompletableFuture<Us…...
excel利用正则匹配和替换指定内容
上班中, 突然接到电话, 屋里的上司大人发来个excel, 说要替换里面x-x-xxx列的内容为x栋x单元xxx. 大致表格如下, 原表格我就不发了 身为程序猿的我, 肯定第一就想到了 正则! 打开excel-开始-查找和替换, 我擦, 只能完全匹配和替换 比如一次只能替换1-1- -> 为1栋1单元 1-2…...
IPv4首部格式
IPv4首部格式 IPv4数据报的首部格式及其内容是实现IPv4协议各种功能的基础。 在TCPIP标准中,各种数据格式常常以32比特(即4字节)为单位来描述。 IPv4首部格式图 ## IPv4数据报的组成 主要由固定部分(20字节)可变部分(最大40字节) - 固定部分是指每个IPv4数据报都必…...
点云从入门到精通技术详解100篇-基于 3D 激光雷达的车厢冻煤存量检测
目录 前言 研究意义 研究现状(Research status) 3D 激光雷达检测技术研究现状...
idea使用MyBatisX插件
1.MyBatisX功能 (1).实现mapper和xml的跳转 (2).自动生成java文件,比如mapper、service、dao、pojo 2.安装MyBatisX插件 install后然后重启idea即可 3.使用MyBatieX实现mapper和xml跳转 (1).点击mapper中的红色图标即可跳转到对应的xml方…...
Open3D(C++) 最小二乘拟合平面(间接平差法)
目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 1、原理概述 通过传统最小二乘法对点云数据进行平面拟合时,可将误差只归因于一个方向上,本文假设误差只存在于 Z Z...
Linux中搭建coturn服务器
1、下载coturn源码 git clone https://github.com/coturn/coturn.git2、进入到coturn路径下,执行一下命令。 ./configure出现以下错误: 问题1:ERROR: OpenSSL Crypto development libraries are not installed properly in required locati…...
【Proteus仿真】【Arduino单片机】SG90舵机控制
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用SG90舵机等。 主要功能: 系统运行后,舵机开始运行。 二、软件设计 /* 作者:嗨小易(QQ&#x…...
程序员有哪些规避风险的合法兼职渠道?
近期,承德程序员事件冲上热搜,这对许多程序员的心灵是多么大的伤害啊! 人人自危,大家开始顾虑自己接私活、找兼职的方式和前景了。毕竟,谁也不想”辛辛苦苦几十年,一把回到解放前“。那有什么办法既可以接私…...
OpenGL_Learn04
我这边并不是教程,只是学习记录,方便后面回顾,代码均是100%可以运行成功的。 1. 渐变三角形 #include <glad/glad.h> #include <GLFW/glfw3.h>#include <iostream> #include <cmath>void framebuffer_size_callba…...
【嵌入式】HC32F07X CAN通讯配置和使用配置不同缓冲器以连续发送
一 背景说明 使用小华(华大)的MCU HC32F07X实现 CAN 通讯配置和使用 二 原理分析 【1】CAN原理说明(参考文章《CAN通信详解》): CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现…...
Linux的常见指令(一)
目录 一、文件 二、常见指令 1、pwd 2、ls 1、ls -a 2、ls -l 3、ls -i 编辑 3、touch 4、mkdir 5、cd 6、rmdir 和 rm 7、man 8、cp 一、文件 目录和文件是在磁盘上建立的,空文件是在磁盘上占用空间的(文件包括文件内容和文件的各种属…...
Jenkins 参数动态获取目录里面的内容
Jenkins 参数动态获取目录里面的内容 假如我们想把一个目录下面的tar.gz文件作为jenkins参数,这个目录会实时更新,每次运行job的时候需要把目录里面的文件作为输入,这时候我们可以使用jenkins自带的Active Choices Parameter参数 在参数中写…...
centos 搭建内网ntp时间服务器
在 CentOS 搭建内网 NTP 时间服务器,你可以按照以下步骤操作: 安装 NTP 服务: 打开终端并以 root 用户身份登录。使用以下命令安装 NTP 服务: sudo yum install ntp配置 NTP 服务器: 打开 NTP 配置文件 /etc/ntp.conf&…...
FreeRTOS-消息队列的使用
1. 定义队列传输的内容和队列结构体对象 使用 xQueueHandle结构体创建对象 typedef struct {u8 TaskNum;u8 Cmd;u8 * buf;}QueueObject_t;xQueueHandle xQueue NULL; 2. 调用xQueueCreate API创建队列 xQueueCreate()函数:用于创建一个消息队列。 QueueHan…...
喜欢 Android 14 的 14 个理由
和去年 8 月中旬发布的 Android 13 正式版不同,今年的 Android 14 正式版延后到了 10 月 4 日——也就是 Pixel 8 系列发布的同一天。原因我们似乎也能从 Google 宣传新特性中略窥一二: 除了明确表示会率先向特定 Pixel 机型推送的 AI 壁纸生成…...
图解系列--路由器和它庞大的功能
03.01 何为路由器 路由器是指主要负责 OSI参考模型中网络层的处理工作,并根据路由表信息在不同的网络 之间转发IP 分组的网络硬件(图3-1)。这里的网络一般是指IP 子网,也可以称为广播域。此外,现在的路由器还会搭载其他各种各样的功能。 0…...
DBeaver 23.2.3发布,带来多项增强和修复
数据库管理工具DBeaver最新版本23.2.3已经发布。这个版本带来了一系列的增强和修复,提升了用户的使用体验和工作效率。 以下是DBeaver 23.2.3版本的一些亮点功能: 数据编辑器方面的改进: Excel (XLSX) 导出现在支持列自动拟合,…...
Proteus仿真--基于51单片机的按键选播电子音乐(仿真文件+程序)
本文主要介绍基于51单片机的按键选播电子音乐(完整仿真源文件及代码见文末链接) 本设计中包括一个按键和一个喇叭,点击按键可以切换选择播放不同的音乐 仿真图如下 其中点击按键K1进行音乐选播选择切换 仿真运行视频 Proteus仿真--基于5…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...
