Nginx的安全控制
安全控制
关于web服务器的安全是比较大的一个话题,里面所涉及的内容很多,Nginx反向代理是安全隔离来提升web服务器的安全,通过代理分开了客户端到应用程序服务器端的连接,实现了安全措施。在反向代理之前设置防火墙,仅留一个入口供代理服务器访问。

使用SSL对流量进行加密
HTTPS是一种通过计算机网络进行安全通信的传输协议。它经由HTTP进行通信,利用SSL/TLS建立全通信,加密数据包,确保数据的安全性。
- SSL(Secure Sockets Layer)安全套接层
- TLS(Transport Layer Security)传输层安全
上述这两个是为网络通信提供安全及数据完整性的一种安全协议,TLS和SSL在传输层和应用层对网络连接进行加密。
总结来说为什么要使用https:
http协议是明文传输数据,存在安全问题,而https是加密传输,相当于http+ssl,并且可以防止流量劫持。
nginx添加SSL的支持
前置安装
yum install openssl-devel # CentOS/RHEL
如果是使用yum安装的话,默认是有--with-http_ssl_module模块的。
如果是通过源码安装的话
- 将原有/usr/local/nginx/sbin/nginx进行备份
- 拷贝nginx之前的配置信息
- 在nginx的安装源码进行配置指定对应模块 ./configure --with-http_ssl_module
- 通过make模板进行编译
- 将objs下面的nginx移动到/usr/local/nginx/sbin下
- 在源码目录下执行 make upgrade进行升级,这个可以实现不停机添加新模块的功能
Nginx的SSL相关指令
ssl
ssl:该指令用来在指定的服务器开启HTTPS
| 语法 | ssl_certificate file; |
| 默认值 | |
| 位置 | http、server |
server{ listen 443 ssl;
}
ssl_certificate
为当前这个虚拟主机指定一个带有PEM格式证书的证书。
| 语法 | ssl_certificate file; |
| 默认值 | |
| 位置 | http、server |
ssl_certificate_key
该指令用来指定PEM secret key文件的路径
| 语法 | ssl_ceritificate_key file; |
| 默认值 | |
| 位置 | http、server |
ssl_session_cache
| 语法 | ssl_sesion_cache off|none|[builtin[:size]] [shared:name:size] |
| 默认值 | ssl_session_cache none; |
| 位置 | http、server |
- off:禁用会话缓存,客户端不得重复使用会话
- none:禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存储会话参数
- builtin:内置OpenSSL缓存,仅在一个工作进程中使用。
- shared:所有工作进程之间共享缓存,缓存的相关信息用name和size来指定
ssl_session_timeout
开启SSL会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间。
| 语法 | ssl_session_timeout time; |
| 默认值 | ssl_session_timeout 5m; |
| 位置 | http、server |
ssl_ciphers
指出允许的密码,密码指定为OpenSSL支持的格式
| 语法 | ssl_ciphers ciphers; |
| 默认值 | ssl_ciphers HIGH:!aNULL:!MD5; |
| 位置 | http、server |
可以使用openssl ciphers查看openssl支持的格式。
ssl_prefer_server_ciphers
该指令指定是否服务器密码优先客户端密码
| 语法 | ssl_perfer_server_ciphers on|off; |
| 默认值 | ssl_perfer_server_ciphers off; |
| 位置 | http、server |
生成证书
- 使用阿里云/腾讯云等第三方服务进行购买。
- 使用openssl生成证书
先要确认当前系统是否有安装openssl
openssl version
安装下面的命令进行生成
mkdir /root/cert # 创建目录并切换到该目录
cd /root/cert
openssl genrsa -des3 -out server.key 1024 # 生成带有密码保护的 RSA 密钥
openssl req -new -key server.key -out server.csr # 生成证书签名请求(CSR)
cp server.key server.key.org # 备份私钥文件并移除密码保护
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt # 自签名证书
生成带有密码保护的 RSA 密钥
openssl genrsa -des3 -out server.key 1024
这将生成一个加密的 RSA 私钥文件 server.key,其中包含一个 1024 位的密钥。您将被要求输入一个密码来保护私钥文件,可以输入test
生成证书签名请求(CSR)
openssl req -new -key server.key -out server.csr
这将使用私钥文件生成一个证书签名请求文件 server.csr。在生成过程中,您将被要求提供一些与证书相关的信息,例如组织名称、域名等
- 第一次会要求你输入你之前输入的密钥:test
- 国家输入:CN
- 省份:guangdong
- 城市:guangzhou
- 组织:gjs
- 组织的:gjs
- 域名:test
- 邮箱地址:1216xx9850@qq.com
- 密码:test
- 公司:gjs
备份私钥文件并移除密码保护
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
这将复制一份原始的私钥文件 server.key,并将其备份为 server.key.org。然后,使用 openssl rsa 命令从备份文件中删除密码保护,并将结果保存回 server.key 文件中。需要输入密钥test
自签名证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
这将使用私钥文件 server.key 和证书签名请求文件 server.csr 来生成一个自签名的 X.509 证书文件 server.crt。该证书的有效期将为 365 天。
完成上述步骤后,您将在 /root/cert 目录下获得以下文件
server.key: 不带密码保护的私钥文件server.crt: 自签名的 SSL 证书文件
开启SSL实例
server {listen 443 ssl;server_name localhost;ssl_certificate /root/cert/server.cert; # 使用了绝对路径指定证书ssl_certificate_key /root/cert/server.key; # 使用了绝对路径指定密钥ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root html;index index.html index.htm;}
}
测试

相关文章:
Nginx的安全控制
安全控制 关于web服务器的安全是比较大的一个话题,里面所涉及的内容很多,Nginx反向代理是安全隔离来提升web服务器的安全,通过代理分开了客户端到应用程序服务器端的连接,实现了安全措施。在反向代理之前设置防火墙,…...
字符串与字符编码 - GO语言从入门到实战
字符串与字符编码 - GO语言从入门到实战 字符串 与其他主要编程语⾔的差异 基本数据类型:string 是基础数据类型,而不是引用类型或指针类型。string 在内存中占用的空间大小是固定的,且只读、不可改变。字节切片:string 是只读…...
12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller
12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller 我们提供三种不同类别的EDGEBoost I/O模块供选择,以实现最大程度的I/O定制: 数字和模拟输入/输出网络和连接边缘人工智能和存储 利用EDGEBoost I/O实现变革性技术 EBIO-2M2BK EBIO-2M2BK载板支持…...
WPF向Avalonia迁移(四、其他事项)
开发必备 1. Avalonia项目源代码!!!!!!!!!!没有源代码,你连控件的背景色怎么改都找不着!! 2.下载你所使用的版本&#x…...
Python 代码调试
from pdb import set_trace as stx 是一个Python代码中常用的调试技巧之一,它用于在代码中插入断点以进行调试。这行代码的作用是将Python标准库中的 pdb(Python Debugger)模块中的 set_trace 函数导入,并将其重命名为 stx&#x…...
DM宣传单制作,利用在线模板,快速替换文字
如果你需要制作一批宣传单,但是时间很紧,而且没有专业的设计人员协助,那么你可以选择使用在线模板来快速制作宣传单。本文将介绍如何使用乔拓云平台,快速制作宣传单的方法。 步骤一:选择适合的在线制作工具 首先&…...
【力扣】42. 接雨水
这道题我卡了差不多1个小时,不是不会做,是不知道怎么能用栈来实现,后面看了一个博主的视频,豁然开朗,我主要的纠结点在于当指针指到7的时候,我计算出4到7的水块是2,但实际上是0,因为…...
IPETRONIK数据采集设备携手Softing Q-Vision软件致力于ADAS测试方案
一 背景 汽车ADAS技术是当下国内外的重点研究方向,且ADAS的发展水平和市场竞争力紧密相关,因此一套完善的ADAS测试方案对各整车厂而言非常重要。然而,国内ADAS测试却面临着很多阻碍,主要原因在于:相关测试设备昂贵&am…...
Go语言中的指针介绍
Go语言中的指针 文章目录 Go语言中的指针一、Go语言中的指针介绍1.1 指针介绍1.2 基本语法1.3 声明和初始化1.4 Go 指针的3个重要概念1.4.1 指针地址(Pointer Address)1.4.2 指针类型(Pointer Type)1.4.3 指针取值(Poi…...
简单理解区块链
这篇是挖矿篇详细介绍区块链之挖矿-CSDN博客的后置文章,咱们通过之前的解释进一步复习学习区块链叭! 百度百科定义 区块链,就是一个又一个区块组成的链条。每一个区块中保存了一定的信息,它们按照各自产生的时间顺序连接成链条。这…...
[尚硅谷React笔记]——第3章 React应用(基于React脚手架)
目录: react脚手架创建项目并启动react脚手架项目结构一个简单的Hello组件样式的模块化功能界面的组件化编码流程(通用)组件的组合使用-TodoList 1.react脚手架 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需…...
《Linux 内核设计与实现》13. 虚拟文件系统
通用文件接口 VFS 使得可以直接使用 open()、read()、write() 这样的系统调用而无需考虑具体文件系统和实际物理介质。 好处:新的文件系统和新类型的存储介质需要挂载时,程序无需重写,甚至无需重新编译。 VFS 将各种不同的文件系统抽象后采…...
2021-06-09 51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次
缘由51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次_嵌入式-CSDN问答 #include "REG52.h" sbit K1 P1^0; sbit K2 P1^1; sbit LEDP0^0; void main() {unsigned char Xd0,ss0;unsigned int wei0;while(1){if(K10&&Xd0){ss3*2;…...
C/C++ 经典面试算法题
1.打印杨辉三角 1 #include <stdio.h>2 #include <string.h>3 4 int main()5 {6 int x;7 int a[100][100];8 printf("输入行数\n");9 scanf("%d",&x); 10 for(int i 0;i<x;i) 11 { 12 for(int j 0;…...
2023年下学期《C语言》作业0x02-分支 XTU OJ 1068 1069 1070 1071 1072
第一题 #include<stdio.h>int main() {int a;scanf("%d",&a);if(a>90&&a<100) printf("A");else printf("B");return 0; } 没有换行,不然会格式错误 第二题 #include<stdio.h>int main() {int a;s…...
JMeter学习第一、二、三天
首先,我们来了解一下到底什么是接口测试与性能测试: 接口测试 定义 接口测试主要关注系统组件之间的交互,确保各个接口按预期工作。这包括验证传递的数据、数据格式、调用的频率和其他与接口调用相关的任何限制。 目的 确保系统的各个组件可…...
常用的分布式ID解决方案原理解析
目录 前言 一:分布式ID的使用场景 二:分布式ID设计的技术指标 三:常见的分布式ID生成策略 3.1 UUID 3.2 数据库生成 3.3 数据库的多主模式 3.4 号段模式 3.5 雪花算法 前言 分布式ID的生成是分布式系统中非常核心的基础性模块&#…...
echarts3D地图打点
1、echarts地图打点加鼠标移上去显示文字 2、1-3和前面的一样echart3D地图 if (res.code 0) {const resData res.data || [];if (resData.length > 0) {for (var i 0; i < resData.length; i) {let arr new Array(2);arr[0] resData[i].longitude || ""…...
分布式主键算法
目录 一、引言二、常见算法介绍雪花算法(Snowflake Algorithm)特性详解优势劣势 UUID(Universally Unique Identifier)特性详解优势劣势 数据库自增主键特性详解优势劣势 分布式数据库的序列(Sequence)特性…...
暴力破解及验证码安全
1.暴力破解注意事项 1、破解前一定要有一个有郊的字典(Top100 TOP2000 csdn QQ 163等密码) https://www.bugku.com/mima/ 密码生成器 2、判断用户是否设置了复杂的密码 在注册页面注册一个,用简单密码看是否可以注册成功 3、网站是…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
【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 编写的,需要先安…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
