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

nginx安全防护与HTTPS部署实战

一、核心安全配置

1. 编译安装nginx

编译安装nginx可以自定义模块和优化性能。标准步骤见:nginx核心功能(https://blog.csdn.net/2601_94969852/article/details/158970288?fromshare=blogdetail&sharetype=blogdetail&sharerId=158970288&sharerefer=PC&sharesource=2601_94969852&sharefrom=from_link)

2. 隐藏版本号

隐藏版本号可减少信息泄露风险

(1) 查看nginx版本号

使用命令:

curl -I http://localhost

在响应头中查找Server: nginx/版本号

(2) 修改配置文件: 验证:再次运行curl -I http://localhost,应看不到版本号。

编辑nginx主配置文件(通常为/usr/local/nginx/conf/nginx.conf

http块中添加:

server_tokens off;

重载配置:

/usr/local/nginx/sbin/nginx -s reload

3. 限制危险请求方法

限制HTTP方法可防止恶意请求

(1) HTTP常用方法

常见方法包括:GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE。危险方法如PUT、DELETE可能被滥用

(2) GET和POST区别

GET:用于获取数据,参数在URL中可见,长度有限,可缓存

POST:用于提交数据,参数在请求体中,更安全,长度无限制,不可缓存

(3) 修改配置和验证

编辑nginx配置文件,在server块中添加:

if ($request_method !~ ^(GET|POST)$) { return 405; }

这会限制只允许GET和POST,其他方法返回405错误

重载配置后,测试:

curl -X PUT http://localhost

应返回405 Method Not Allowed

4. 请求限制

使用模块限制请求速率,防止DDoS攻击

(1) 使用nginx的limit_req模块限制请求速率

http块中定义共享内存区:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

zone=mylimit:10m:定义10MB共享区

rate=10r/s:限制每秒10个请求

serverlocation块中应用:

location / { limit_req zone=mylimit burst=20; # 其他配置 }

burst=20允许突发20个请求

重载配置生效

(2) 压力测试验证

使用工具如ab(Apache Bench)测试:

ab -n 1000 -c 100 http://localhost/

观察输出,如果请求被拒绝或延迟,则限制生效。日志中可能显示503 Service Unavailable

5. 防盗链配置验证

防盗链阻止外部网站盗用资源

配置

编辑nginx配置文件,在location块中添加:

location ~ .*\.(gif|jpg|jpeg|png)$ { valid_referers none blocked server_names ~\.example\.com; if ($invalid_referer) { return 403; } }

valid_referers:指定允许的引用来源(如example.com

非法引用时返回403

验证

访问图片URL,如果从非法站点访问,应返回403。测试:

curl -I http://localhost/image.jpg -H "Referer: http://bad.com"

应返回403 Forbidden

二、高级防护

1. 动态黑名单

动态黑名单可实时拦截恶意IP

(1) 编辑黑名单配置文件

创建文件/usr/local/nginx/conf/blacklist.conf,内容为IP列表:

deny 192.168.1.100; deny 10.0.0.50;

每行一个deny指令

(2) 编辑主配置文件

在nginx主配置的http块中引入黑名单:

include blacklist.conf;

server块中应用:

location / { # 其他配置 }

黑名单自动生效

(3) 测试

从黑名单IP访问:

curl http://localhost

应返回403 Forbidden。非黑名单IP正常访问

2. nginx https配置

HTTPS提供加密通信

(1) https概念

HTTPS是HTTP的安全版本,使用SSL/TLS协议加密数据,确保传输安全

(2) 安全通信四大原则

机密性:数据加密,防止窃听

完整性:确保数据不被篡改,使用哈希算法如SHA-256

身份验证:验证服务器身份,防止中间人攻击

不可否认性:通过数字签名,确保行为可追溯

(3) HTTPS通信原理

基于SSL/TLS协议,过程包括:

握手阶段:客户端和服务器交换密钥,验证证书

密钥交换:使用非对称加密(如RSA)建立会话密钥

数据传输:使用对称加密(如AES)加密数据。 数学基础涉及离散对数问题:$$ \text{例如,Diffie-Hellman密钥交换:} g^{a} \mod p \text{ 和 } g^{b} \mod p \text{ 交换后生成共享密钥 } g^{ab} \mod p $$

3. nginx配置https证书

获取证书:使用Let's Encrypt免费证书:

sudo apt install certbot certbot certonly --standalone -d example.com

证书保存在/etc/letsencrypt/live/example.com/

配置nginx

编辑配置文件,在server块中添加:

server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # 其他配置 }

4. nginx启用https

重定向HTTP到HTTPS

添加一个新server块:

server { listen 80; server_name example.com; return 301 https://$host$request_uri; }

重载配置

/usr/local/nginx/sbin/nginx -s reload

5. 验证

测试HTTPS

curl -I https://example.com

应返回200 OK,并查看证书信息:

openssl s_client -connect example.com:443

输出中显示SSL/TLS握手成功

浏览器验证:访问https://example.com,地址栏显示锁图标

http://www.jsqmd.com/news/489735/

相关文章:

  • 2026年初,北京一站式家具服务选择指南 - 2026年企业推荐榜
  • 晶振电路的工作原理是什么?新手必懂!
  • 做跨境电商和出国旅行必备:世界各国电压、频率、插座类型查询整理
  • IDEA中如何使用注释模版(创建类时自动带上注释)
  • 2026 最新对比:FineBI、FineReport、Tableau 三款工具区别、优缺点、使用率全景分析
  • 全网通用!联想全系设备重置 Winsock 保姆级教程,解决网络疑难杂症
  • MATLAB机器学习、深度学习:BP神经网络、SVM、随机森林、PCA降维,再到CNN、LSTM、TCN、GAN、YOLO、U-Net、自编码器在内的深度学习核心技术
  • 收藏 | 程序员小白必看:一文读懂工业智能体,开启AI工业新时代
  • 普通人也能上手的 GoViewPro 平台,输入描述 AI 一键生成大屏神器
  • 2026年盱眙县C1驾校选择全攻略与深度评测 - 2026年企业推荐榜
  • aardio 怎么获取本程序pid
  • 今天就来带你认识一下不一样的护照阅读器!
  • 探索考虑泊位优化与多能协同的港口综合能源系统运行优化
  • AI大模型应用的开发
  • CC工具箱使用指南:【百度、高德、WGS84、CGCS2000坐标系转换】
  • 跨网文件安全交换系统排名来袭,高适配方案究竟有哪些?
  • 强化学习实践:Q-learning算法在游戏AI中的训练过程
  • 软件测试基础学习_day03(附思维导图)——软件缺陷管理与禅道工具使用
  • 基于Spring Boot的高校学生心理健康管理系统设计与实现
  • 靠谱的泳池设计公司哪个好
  • eclipse使用TransformerCloud
  • 剪映专业版教程:制作连续翻页相册效果
  • deepseek实战教程-第二十二篇:PyTorch 从入门到实战:给完全小白的深度学习第一课
  • rust中生命周期使用
  • 收藏!程序员小白必看:大模型召回=存储+检索,存储决定检索天花板
  • 大模型持续预训练全解析:如何注入领域知识而不“遗忘”通用能力?
  • 打印机日常维护教程,延长寿命不卡纸,新手一看就会
  • 工业相机图像高速存储(C++版):直接IO存储方法,附Basler相机实战代码!
  • Python面向对象编程(OOP)详解:类、对象、继承、多态、封装
  • 智芯Z20K11x 资源介绍