当前位置: 首页 > news >正文

Nginx 配置 SSL(HTTPS)详解

Nginx作为一款高性能的HTTP和反向代理服务器,自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。

随着互联网安全性的日益重要,HTTPS协议逐渐成为网站加密通信的标配。Nginx作为一款高性能的HTTP和反向代理服务器,自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。

使用Nginx进行反向代理的时候,对于正常的http;流量使用 location 块并且配置 proxy_pass 转发即可,但是如果是https的流量,使用Nginx进行反向代理的时候,直接使用 proxy_pass 会出现各种报错的情况,包括不限于:

  • 502 Bad Getway
  • ERR_SSL_PROTOCOL_ERROR
  • ERR_CONNECTION_RESET

我本身遇到的ERR_SSL_PROTOCOL_ERROR错误比较多,这是因为在配置Nginx的时候,对于443端口本身的侦听没有带上 ssl 关键字,所以会报SSL协议错误,但是如果加上ssl,没有给证书位置,也是不行

对于转发到8080端口,如果配置不对(比如后端服务是http,结果配置了https),会出现502 Bad Getway

  • proxy_pass后边的要写IP地址,不能写域名,否则还要解决域名解析的问题,有据称如果写localhost的,访问速度会变慢,是因为需要访问host文件解析localhost

  • 响应8080端口的server块,也要注意,也要写成侦听ssl,配置好证书位置

    upstream plan-uat {
    server 10.202.159.74:8080 max_fails=3 fail_timeout=10 weight=1;
    }

    server {
    server_name plan-uat.ztoky.cn;
    listen 443 ssl ;
    ssl_certificate ssl/ztoky.cn.crt;
    ssl_certificate_key ssl/ztoky.cn.key;
    access_log logs/plan-uat.ztoky.cn.access.log json;

        location /plan/ {proxy_pass      http://plan-uat/;include         proxy.conf;}
    

    }

检查 linux 服务器上的 nginx 是否安装 ssl 模块
nginx 安装目录,下面有个 sbin 文件夹,来到 sbin 目录下执行 ./nginx -V命令,注意是大写的 V,小写的 v 只会展示 nginx 的版本号信息。执行完出现下图圈红的这些信息说明 ssl 模块已经安装过了。可以忽略下文的 ssl 模块安装的相关内容,直接看 nginx 配置的内容。

cd /usr/local/nginx/sbin
./nginx -V

为 nginx 安装 ssl 模块
如果没有安装 ssl 模块,即使你成功的配置好 https 的相关配置,网站也依旧不能使用 https,会提示诸如:无法提供安全连接、TLS协议不支持等问题。ssl 模块的安装是为了能让后端接口得以使用 https 的方式调用。找到我们的 nginx 安装解压包,我这里是放在 /usr/local/software 目录下,然后执行如下命令进入到 nginx-1.18.0 目录下。

cd /usr/local/nginx-1.18.0

来到 ngixn-1.18.0 目录 然后依次执行如下这命令,配置了 ssl 模块,使用 make 命令重新编译

./configure --with-http_ssl_module
make

进入 objs 目录,会看到 nginx 的可执行文件

注意,不能使用 make install 命令,这样会导致重新安装 nginx,此时当前目录就会出现 objs 目录

替换 nginx 可执行文件,我们使用这个新的 nginx 可执行文件 替换 sbin 目录下的 nginx 可执行文件

cp ./nginx /usr/local/nginx/sbin/

系统会询问你是否覆盖,输入 y 即可,如果覆盖失败,多半是因为你的 nginx 还在启动中,先将 nginx 关闭即可,再次检验是否安装 ssl 模块,进入 nginx 目录

cd /usr/local/nginx/sbin/

执行命令

./nginx -V

此时就能看到 ssl 模块已经安装成功了

准备SSL证书


首先,我们需要准备SSL证书。你可以选择从证书颁发机构(CA)购买商业证书,也可以自己生成自签名证书。自签名证书虽然免费,但不会被浏览器信任,仅适用于测试环境。

如果你选择购买商业证书,通常会获得以下文件:

  • 证书文件(例如:example.com.crt)
  • 私钥文件(例如:example.com.key)
  • 中间证书文件(如果有的话)

配置Nginx SSL 启用443端口


(1) 打开Nginx配置文件,通常位于/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf。

(2) 在http块中,配置SSL相关参数。示例如下:

http {...server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/example.com.crt;  # 证书文件路径ssl_certificate_key /path/to/example.com.key;  # 私钥文件路径# 如果有中间证书,也需要配置ssl_trusted_certificate /path/to/intermediate.crt;# 其他SSL配置参数ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_protocols TLSv1.2 TLSv1.3;  # 支持的协议版本ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL;  # 使用此加密套件ssl_prefer_server_ciphers on;  # 优先使用服务器端的加密套件# 其他server配置...}...
}
测试HTTPS访问

现在,你的Nginx服务器已经配置了SSL,可以通过HTTPS协议访问了。在浏览器中输入https://example.com,检查是否能够成功访问并显示安全的连接标识(如绿色锁头)。

此外,你还可以使用命令行工具(如openssl或curl)来测试HTTPS连接和证书的有效性。

配置代理


使用proxy_pass指令来配置代理。以下是一个示例配置,将HTTPS请求代理到另一个HTTPS服务器:(注意这里的后端是HTTPS的服务)

后端服务是https类型的proxy_pass https://your.backend.server;

后端服务是http类型的 proxy_pass http://your.backend.server;

server {??# 监听443端口,处理所有HTTPS请求
??listen 443 ssl;??server_name your.domain.com;??# SSL配置 
? ssl_certificate /path/to/your/cert.pem;
??ssl_certificate_key /path/to/your/private.key;
??ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
??ssl_ciphers HIGH:!aNULL:!MD5;??# 代理配置,将HTTPS请求代理到另一个HTTPS服务器
??location / {
????proxy_pass https://your.backend.server;
??}
}

以上配置假设您的域名是your.domain.com,代理目标是您的后端HTTPS服务器(例如https://your.backend.server)。请记住将路径和参数适当地配置为您的特定场景。

相关文章:

Nginx 配置 SSL(HTTPS)详解

Nginx作为一款高性能的HTTP和反向代理服务器,自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。 随着互联网安全性的日益重要,HTTPS协议逐渐成为网站加密通信的标配。Nginx作为一款高性能的HTTP和反向代理服务…...

Day10补代码随想录 理论基础|232.用栈实现队列|225.用队列实现栈|20.有效的括号|1047.删除字符串中的所有相邻重复项

栈和队列理论基础 抽象认识 栈是先进后出(FIFO),队列是先进先出(LIFO) 队首(先进))队尾(后进)栈顶(后进)栈底(先进) 栈(Stack) 只在一端进行进出操作(只在一端进一端出)像个篮球框,取用篮球从一端进出。 /进栈 int a[1000];//足够大的栈空间 int top-1…...

pytorch基础之注解的使用--003

Title 1.学习目标2.定义3.使用步骤4.结果 1.学习目标 针对源码中出现一些注解的问题,这里专门写一篇文章进行讲解。包括如何自定义注解,以及注意事项,相信JAVA中很多朋友业写过,但是今天写的是Python哦。。。 2.定义 在 Python…...

2024-12-30-g++

title: 探秘 g:C 编程的得力编译器 date: ‘2024-12-30’ category: blog tags: gC 编程编译器技术代码生成与优化 sig: compiler archives: ‘2024-12’ author:way_back summary: g 作为专门用于 C 语言的编译器,在 C 开发领域占据关键地位。它凭借对…...

互联网十万个为什么之什么是微服务

微服务(Microservices)是一种软件架构设计模式,它将应用程序分解为小型、自治的服务单元,这些服务单元可以独立部署、扩展和维护,其中每一个服务单元也都是一个微服务。 基于微服务形成的软件架构风格称为微服务架构&…...

mysql子查询

子查询是嵌套在另一个 SELECT, INSERT, UPDATE, 或 DELETE查询的 SQL 查询。子查询可以在 WHERE 子句中、FROM 子句或 SELECT 列表中出现。 以下是一些使用 MySQL 子查询的常见示例: 1.在 WHERE 子句中使用子查询: SELECT * FROM Employees WHERE s…...

智能故障诊断和寿命预测期刊推荐

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…...

根据语言变化动态更新图片资源方案

根据语言变化动态更新图片资源方案 一、需求描述二、关于 Locale三、实现方案3.1 方案一(不可行)3.2 方案二(不可行)3.3 方案三 一、需求描述 Android 项目中引导页图片包含文字信息,由于应用是适配了三种语言&#x…...

Python世界:数据结构易错点小结

Python世界:数据结构易错点小结 总体list列表tuple元组Stringdict字典mapset 部分笔记汇总,持续刷新中。区别于其他笔记之处在于,主要记录易错点坑点。 总体 数据结构声明辨析 list []tuple () const listditc {} hashset res set(list) 数…...

Linux | Ubuntu零基础安装 nvm 管理nodejs

目录 介绍 项目地址 前置工具 安装 查看环境配置 更新环境变量 查看版本 查看 nodejs包 列表 安装nodejs 查看 nvm 状态 测试 nodejs 介绍 nvm是什么?你可以把它理解成 nodejs的管理软件,方便快速切换nodejs的版本,达到兼容状态 …...

flask后端开发(3):html模板渲染

目录 渲染模板html模板获取路由参数 gitcode地址: https://gitcode.com/qq_43920838/flask_project.git 渲染模板 这样就能够通过html文件来渲染前端,而不是通过return了 html模板获取路由参数...

HAL 库句柄

一、命名方式:句柄是h为首字母,后面接协议名称 比如:huart、hadc、hi2c等 二、句柄类型: 这里拿huart举例,它的类型是UART_HandleTypeDef 进去stm32f1xx_hal_uart.h之后发现句柄的结构定义有部分是灰色的 灰色的当U…...

53.最大子数组和

53.最大子数组和 思路&#xff1a;动态规划 dp[i]表示截止到i的最大连续子数组的和 dp[0]nums[0] dp[i]max(dp[i-1]nums[i],nums[i]) 代码&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {vector<int> dp(nums.size());dp[0]…...

计算机网络 (16)数字链路层的几个共同问题

一、封装成帧 封装成帧是数据链路层的一个基本问题。数据链路层把网络层交下来的数据构成帧发送到链路上&#xff0c;以及把接收到的帧中的数据取出并上交给网络层。封装成帧就是在一段数据的前后分别添加首部和尾部&#xff0c;构成了一个帧。接收端在收到物理层上交的比特流后…...

[OpenGL]使用glsl实现smallpt

一、简介 本文介绍了如何使用 OpenGL&#xff0c;使用 glsl 语言在 Fragment shader 中实现 smallpt。程序完成后可以得到以下渲染结果&#xff08;samples per pixel, spp 16&#xff09;。在程序中按下A,W可以左右平移&#xff0c;按下W,S可以前后平移&#xff1a; 二、s…...

数据结构与算法Python版 骑士周游问题与深度优先搜索

文章目录 一、图的应用-骑士周游问题二、图的深度优先搜索 一、图的应用-骑士周游问题 骑士周游问题 在一个88的国际象棋棋盘上&#xff0c;一个棋子“马”&#xff08;骑士&#xff09;&#xff0c;按照“马走日”的规则&#xff0c;从一个格子出发&#xff0c;要走遍所有棋…...

HIVE数据仓库分层

1&#xff1a;为什么要分层 大多数情况下&#xff0c;我们完成的数据体系却是依赖复杂、层级混乱的。在不知不觉的情况下&#xff0c;我们可能会做出一套表依赖结构混乱&#xff0c;甚至出现循环依赖的数据体系。 我们需要一套行之有效的数据组织和管理方法来让我们的数据体系…...

WOFOST作物模型(3):敏感性分析

目录 一、定义参数范围二、采样生成参数样本三、运行不同参数组下的WOFOST四、计算敏感度与可视化1.敏感度2.二阶交互敏感度五、敏感变量对产量的影响结果可视化一、定义参数范围 使用TAGP(Total Above Ground Production),地上总产量 TSUM1,temperature sum from emergence…...

【2024年-6月-14日-开源社区openEuler实践记录】探索 test - tools:高效测试的开源宝库

开篇引言 大家好&#xff0c;我是 fzr123&#xff0c;在软件开发领域深耕多年&#xff0c;一直致力于探索各种提升效率的工具与技术。今天&#xff0c;我将为大家深入介绍一款在测试领域极具价值的开源项目——test - tools&#xff0c;它为开发者们提供了一系列强大的测试功能…...

go-xorm连接

package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""time""xorm.io/xorm" )func MysqlDbContent() {//数据库基本信息var (userName string "root"password string "12345678"ipAddress string &…...

Java字节分割文件流

使用 Java 通过字节分割大文件并将其以文件流的方式读写的示例代码。这个代码展示了如何将一个大文件分割成多个小文件&#xff0c;并以字节流的方式操作文件。 完整代码示例 import java.io.*;public class FileSplitter {public static void main(String[] args) {// 原始文…...

【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。

目录 一、toString() 方法是啥&#xff1f; &#xff08;一&#xff09;默认的 toString() 方法 &#xff08;二&#xff09;toString() 方法的作用 二、为啥要重写 toString() 方法&#xff1f; &#xff08;一&#xff09;提高代码的可读性 &#xff08;二&#xff09;…...

仙盟系统开发——启动app失败

var 返回 仙盟使者.Cyber_CallApp(VOAPP, 命令, 携带);...

使用ArcGIS Pro自带的Notebook计算多个遥感指数

在之前的分享中&#xff0c;我们介绍了如何使用ArcPy将GEE下载的遥感影像转为单波段文件。基于前面创建的单波段文件&#xff0c;我们可以一次性计算多种遥感指数&#xff0c;例如NDVI、EVI、NDSI等。我这里直接在ArcGIS Pro中自带的Notebook进行的运行。如下图所示&#xff0c…...

深入Android架构(从线程到AIDL)_认识进程(Process)与IPC架构02

3、 设定IPC通信 -- 使用AndroidManifest.xml文件 在Android框架里&#xff0c;一个应用(程序)套件(Application Package)通常含有多个Java类(Class)&#xff0c;这些类可以在同一个进程(Process)里执行&#xff1b;也可以在不同的进程里执行 。通常&#xff0c;一个进程…...

在K8S中,节点状态哪个组件负责上报?

在Kubernetes中&#xff0c;节点状态是kubelet组件负责定期上报的。Kubelet是运行在每个节点上的代理程序&#xff0c;它与Kubernetes Master节点上的控制面板组件紧密协作&#xff0c;以确保节点上的Pod能够正确运行。 kubelet的主要职责之一就是&#xff1a;与Kubernetes API…...

AI 神经网络在智能家居场景中的应用

在科技持续进步的当下&#xff0c;智能家居领域正经历着深刻变革&#xff0c;AI 神经网络技术的融入成为推动这一变革的关键力量&#xff0c;为家居生活带来了诸多显著变化与提升&#xff0c;本文将几种常见的AI算法应用做了一下总结&#xff0c;希望对物联网从业者有所帮助。 …...

C++基础:SGI STL二级空间配置器内存池

2024/12/14-2024/12/ &#xff1a; 这篇稍微写一下阅读SGI STL内存池的收获。 reference: [1] 深度剖析SGI STL二级空间配置器内存池源码 [2] C内存管理&#xff1a;new / delete 和 cookie [3] 侯捷 内存管理 文章目录 一、写在前面二、二级空间配置器解读2.1 从 malloc 和 fr…...

Python简介

Python 是一种高级编程语言&#xff0c;以其简洁易读的语法和强大的功能而广受欢迎。以下是对 Python 的详细简介&#xff1a; python官网&#xff1a;https://www.python.org/ python中文官网&#xff1a;Python中文网 官网 历史与起源‌&#xff1a; Python 由荷兰人 Guido…...

Linux之ARM(MX6U)裸机篇----7.蜂鸣器实验

一&#xff0c;蜂鸣器模块 封装步骤&#xff1a; ①初始化SNVS_TAMPER这IO复用为GPIO ②设置SNVS_TAMPPER这个IO的电气属性 ③初始化GPIO ④控制GPIO输出高低电平 bsp_beep.c: #include "bsp_beep.h" #include "cc.h"/* BEEP初始化 */ void beep_init…...

手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电

手机实时提取SIM卡打电话的信令声音 --双卡手机来电如何获取哪一个卡的来电 一、前言 前面的篇章《手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案》中&#xff0c;我们论述了局域网SIP坐席通过手机外呼出去时&#xff0c;手机中主副卡的呼叫调度策略。 但…...

GPU 进阶笔记(一):高性能 GPU 服务器硬件拓扑与集群组网

记录一些平时接触到的 GPU 知识。由于是笔记而非教程&#xff0c;因此内容不求连贯&#xff0c;有基础的同学可作查漏补缺之用 1 术语与基础 1.1 PCIe 交换芯片1.2 NVLink 定义演进&#xff1a;1/2/3/4 代监控1.3 NVSwitch1.4 NVLink Switch1.5 HBM (High Bandwidth Memory) 由…...

Unresolved plugin: ‘org.apache.maven.plugins:maven-site-plugin:3.12.1‘

问题 使用idea 社区办加载项目提示下面问题&#xff1a; Unresolved plugin: org.apache.maven.plugins:maven-site-plugin:3.12.1 问题解决 maven插件地址&#xff1a; https://maven.apache.org/plugins/maven-dependency-plugin/plugins.html Maven 中央仓库地址&#…...

GO性能优化的一些记录:trace工具的使用

使用场景&#xff1a; 1 想要查看接口延时性偏高 2 深入了解协程具体如何运营的详细信息&#xff08;运行时长&#xff0c;或者什么原因导致了协程运行受阻&#xff09; 可以使用 trace 功能&#xff0c;程序便会对下面的一系列事件进行详细记录&#xff0c;并且会依据所搜集到…...

springboot maven 构建 建议使用 --release 21 而不是 -source 21 -target 21,因为它会自动设置系统模块的位置

使用 --release 选项代替 -source 和 -target 是一种更安全、更兼容的方式,特别是在构建使用较新版本 JDK 的项目时。以下是详细解释和建议: 1. 为什么推荐使用 --release 问题点: 使用 -source 和 -target 标志时,仅设置了代码的语言级别和字节码目标版本,但编译器仍可…...

设计模式-创建型-单例模式

1. 单例模式简介 单例模式&#xff08;Singleton Pattern&#xff09;是一种常见的创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点。在很多情况下&#xff0c;我们只希望某个类在整个应用程序中有一个唯一的实例&#xff0c;且该实例需要在…...

linux 网卡配置

linux网卡可以通过命令和配置文件配置,如果是桌面环境还可以通过图形化界面配置. 1.ifconfig(interfaces config)命令方式 通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使用一些选项属性&#xff0c;ifconfig工具不仅可以被用来…...

python文件操作相关(excel)

python文件操作相关&#xff08;excel&#xff09; 1. openpyxl 库openpyxl其他用法创建与删除操作单元格追加数据格式化单元格合并单元格插入图片公式打印设置保护工作表其他功能 2. pandas 库3. xlrd 和 xlwt 库4. xlsxwriter 库5. pyxlsb 库应用场景参考资料 在 Python 中&a…...

利用Abel_Cain软件实现ARP欺骗

ARP协议是“Address Resolution Protocol”&#xff08;地址解析协议&#xff09;的缩写。在局域网中&#xff0c;网络中实际传输的是“帧”&#xff0c;帧里面是有目标主机的MAC地址的。在以太网中&#xff0c;一个主机要和另一个主机进行直接通信&#xff0c;必须要知道目标主…...

搭建android开发环境 android studio

1、环境介绍 在进行安卓开发时&#xff0c;需要掌握java&#xff0c;需要安卓SDK&#xff0c;需要一款编辑器&#xff0c;还需要软件的测试环境&#xff08;真机或虚拟机&#xff09;。 早起开发安卓app&#xff0c;使用的是eclipse加安卓SDK&#xff0c;需要自行搭建。 目前开…...

使用 Python -m build打包 Python 项目:详解过程与细节

使用 Python -m build 打包 Python 项目&#xff1a;详解过程与细节 Python 项目的打包是发布和分发软件的核心环节。本文将基于用户提供的 pyproject.toml 文件和项目目录结构&#xff0c;详细说明 Python -m build 命令的执行过程&#xff0c;并解答 是否会将 oe_eval 中的代…...

019-spring-基于aop的事务控制原理

1、事务配置&#xff1a; <tx:annotation-driven transaction-manager"transactionManager"/> transaction-manager 默认是找这个bean&#xff1a;transactionManager 2、从命名空间开始找到对应的解析配置如下&#xff1a; 对应的是这个 后续跟源码没有搞明…...

210.xxl-job定时任务:架构,可视化,GLUE模式,负载均衡,分片

目录 一、为什么要用xxl-job 二、xxl-job架构 三、启动调度中心 1.初始化数据库 2.编译源码 四、启动执行器 五、GLUE模式运行 六、负载均衡 七、分片 1.分片环境准备 2.分片实现 八、感谢支持 一、为什么要用xxl-job 以前我们用quartz实现定时任务,但是那是单机…...

LVS 负载均衡原理 | 配置示例

注&#xff1a;本文为 “ LVS 负载均衡原理 | 配置” 相关文章合辑。 部分内容已过时&#xff0c;可以看看原理实现。 未整理去重。 使用 LVS 实现负载均衡原理及安装配置详解 posted on 2017-02-12 14:35 肖邦 linux 负载均衡集群是 load balance 集群的简写&#xff0c;翻…...

堆内存易碎片化

堆内存容易碎片化主要是由于其内存分配和释放的特性以及管理方式的复杂性所导致的。以下是对堆内存容易碎片化的详细解释&#xff1a; 一、内存分配和释放的非连续性 堆内存的分配和释放并不是连续的&#xff0c;这意味着在多次分配和释放后&#xff0c;原本连续的内存空间可…...

Docker镜像瘦身:从1.43G到22.4MB

Docker镜像瘦身:从1.43G到22.4MB 背景1、创建项目2、构建第一个镜像3、修改基础镜像4、多级构建5、使用Nginx背景 在使用 Docker 时,镜像大小至关重要。我们从 create-react-app (https://reactjs.org/docs/create-a-new-react-app.html)获得的样板项目通常都超过 1.43 GB…...

Linux套接字通信学习

Linux套接字通信 代码源码&#xff1a;https://github.com/say-Hai/TcpSocketLearn/tree/CThreadSocket 在网络通信的时候, 程序猿需要负责的应用层数据的处理(最上层)&#xff0c;而底层的数据封装与解封装&#xff08;如TCP/IP协议栈的功能&#xff09;通常由操作系统、网络协…...

XIAO Esp32S3制作网络摄像头——音频获取

1、功能介绍 本文主要是基于XIAO Esp32S3(Sense)做的一款网络摄像头,主要包含以下功能 1 音频获取/保存 2 视频获取/视频保存 3 行人检测/火焰检测/行人追踪(告警) 4 指定区域 5 摄像头旋转 。。。 本文主要实现第一步,音频获取,后续会陆续实现后面的功能,敬请期…...

Docker搭建RocketMQ

Docker搭建RocketMQ 操作系统: CentOS 7 x64 版本号: CentOS Linux release 7.9.2009 (Core) IP地址: 192.168.157.130 Docker 信息: Client: Docker Engine - Community Version: 24.0.7 API version: 1.43 Go version: go1.20.10 Git commit: …...

Python 迭代器与生成器

Python 中的迭代器和生成器是处理集合元素的重要工具&#xff0c;它们在处理大量数据时特别有用&#xff0c;因为它们不需要一次性将所有数据加载到内存中。 迭代器&#xff08;Iterator&#xff09; 迭代器是一个实现了迭代器协议的对象&#xff0c;这意味着它有两个方法&am…...