Nginx安全防护与HTTPS部署实战笔记

Nginx基础安全前置准备

安装规范与最小化部署

  • 官方源安装:拒绝第三方编译包,优先Nginx官方YUM/APT源,避免内置恶意模块;生产环境禁用debug版本,减少信息泄露。

  • 最小化模块编译:仅启用业务必需模块(如http_ssl、http_gzip),禁用autoindex、status等非必要模块,降低攻击面。

  • 专用运行用户:禁止root启动Nginx,新建nginx专属用户(禁止登录、无家目录),配置文件、日志目录权限严格管控。

bash 复制代码
# 新建nginx专用用户
useradd -r -s /sbin/nologin -M nginx
# 目录权限规范
chown -R nginx:nginx /var/log/nginx /var/cache/nginx
chmod 700 /var/log/nginx  # 仅属主可访问

隐藏版本号

curl -I 192.168.10.101

修改配置文件 --隐藏版本号

vim /usr/local/nginx/conf/nginx.conf
server_tokens off;

nginx -t
systemctl restart nginx
curl -I 192.168.10.101

限制危险请求方法

  • Get:获取URL资源
  • Post:提交数据,封装到报文中提交
  • Put:申请一个存储,资源的存储
  • Head:获取uri的应答信息的头部信息
修改配置文件

vim /usr/local/nginx/conf/nginx.conf
if (request_method !\~ \^(GET\|HEAD\|POST) ) {
return 444;
}

验证测试请求

测试PUT/DELETE请求
curl -XPUT -I 192.168.10.101

查看access.log

在 /usr/local/nginx/conf目录下
cat ../logs/access.log

请求限制(CC攻击防御)

概念
  • CC (c:挑战;c:崩溃)攻击是用大量请求耗尽服务器资源,让正常用户无法访问网站,可通过 Nginx 限制请求速率和并发连接数来防范

使用nginx的linit_req模块限制请求速度

编辑配置

vim /usr/local/nginx/conf/nginx.conf
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
在http{ }内 ,server{ }上

limit_req zone=req_limit burst=20 nodelay;

压力测试验证

dnf install httpd-tools -y
发起请求测试(一共发起300个请求,每次发起30个请求)
ab -n 300 -c 30 http://192.168.10.101/
查看access.log
在 /usr/local/nginx/conf目录下
cat ../logs/access.lo
tail -300 /usr/local/nginx/logs/access.log |grep -c 503

防盗链


再打开一个客户机 windowns10

  • 在101
在/etc/hosts中设置域名解析关系(两台都修改)

192.168.10.101 www.aaa.com
192.168.10.102 www.bbb.com

在C盘windows➡system32➡drivers➡etc下的hosts文件中配置域名解析
把图片kgc.png放到源主机(www.aaa.com)的工作目录下

ls /usr/local/nginx/html

编辑原网站首页文件

vim /usr/local/nginx/html/index.html
:set paste

bash 复制代码
<html>
     <body> 
     <h1> www.aaa.com This is 101</h1> 
     <img src="kgc.png"/> 
     </body> 
</html>
去windowns10中浏览器中测试(www.aaa.com
  • 编辑盗链网站首页文件--在102

dnf -y install httpd

cd /var/www/html

vim index.html

<html>

<body>

<h1> www.bbb.com This is 102</h1>

<img src="http://www.aaa.com/kgc.png"/>

</body>

</html>

关闭防火墙

systemctl stop firewalld

启动httpd

systemctl restart httpd

去window10测试访问盗链网站(盗链成功)www.bbb.com

F12➡网络

配置 nginx 防盗链
vim /usr/local/nginx/conf/nginx.conf

查看语法是否有错
nginx -t
重启
systemctl restart nginx

测试访问盗链网站(盗链失败403)

高级防护

动态黑名单

编辑黑名单配置文件

vim /usr/local/nginx/conf/blockips.conf
#0:允许访问 1:不允许访问
192.168.1.0/24 1;
192.168.10.10 1;

IP地址后的数字含义:

编辑主配置文件

vim /usr/local/nginx/conf/nginx.conf
在httpd{ }下,在server{ }上:

在server{ }内:


检查语法是否有错
nginx -t
重启nginx
systemctl restart nginx
去windows10浏览器上测试:www.aaa.com
(使用封禁ip测试:
curl 192.168.10.101

自动添加黑名单(自动封禁访问超过100次的IP)

uniq -c:统计连续出现次数,并在行首显示次数
sort -nr:按数值排序)

nginx https配置

概念:

HTTPS(HyperText Transfer Protocol over Secure Socket Layer),未来解决这三大风险诞生的

HTTP为什么不安全
  • 明文传输
  • 存在风险
  • 窃听风险
  • 篡改风险
  • 冒充风险
安全通信的四的大原则

机密性
完整性
身份认证
不可否认

HTTPS通信原理简述
  • 对称加密--给报文加密
  • 通信双方需要使用同意把密钥
  • 非对称加密
    • 使用不同的密钥(一把公钥,一把私钥)
  • 公钥加密的密文只有四幺可以解密,私钥签名的内容只有公钥可以验签
    公钥传输通过--数字整数

nginx配置https证书

使用openssl生成证书和私钥生成证书和私钥

创建证书存储目录

mkdir -p /etc/nginx/ssl

生成自签名证书

openssl req -x509 -nodes -days 356 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx-selfsigned.key -out /etc/nginx/ssl/nginx-selfsigned.crt -subj "/C=CN/ST=henan/L=zhengzhou/0=kgc/CN=localhost"

nginx启用https

编辑nginx配置文件

vim /usr/local/nginx/conf/nginx.conf
在server{ }内

其中证书文件和密钥文件
cd /etc/nginx/ssl/ (ls) 对应

查看语法是否有错
nginx -t
重启nginx
systemctl restart nginx
去浏览器中(https://192.168.10.101

通过设置浏览器开头验证
相关推荐
愚公搬代码5 小时前
【愚公系列】《Web应用安全》003-测试环境的搭建
前端·安全
大模型搬砖师5 小时前
高校科研管理上 AI:科研处、课题组、信息中心的三方分歧怎么调和
人工智能·安全
難釋懷6 小时前
Nginx主动健康检查
运维·nginx
智脑API7 小时前
CCSwitch Claude Code 国内怎么接入?Windows、VS Code 配置与安全使用教程
安全·vs code·ccswitch
MartinYeung57 小时前
[论文学习]ProAct:针对LLM越狱的主动防禦框架
网络·学习·安全
发量惊人的中年网工7 小时前
中小企业网络管理进阶:从设备堆叠到统一管理
服务器·网络·安全·网络安全·php·制造
workflower8 小时前
案例 :某交通厅基于AI技术的智能安全运营实践
网络·人工智能·安全·设计模式·机器人
运维全栈笔记8 小时前
致远 OA HTTPS 配置避坑指南
网络协议·http·https
2501_915909068 小时前
iOS test 测试怎么做?功能、性能、兼容、稳定与安全五类测试指南
android·ios·小程序·https·uni-app·iphone·webview
测开小菜鸟9 小时前
智能体安全与伦理测试:守护AI的“底线”,让智能体安全、负责任地工作
网络·人工智能·安全