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

通过设置浏览器开头验证
相关推荐
_下雨天.2 小时前
Nginx安全防护与HTTPS部署实战笔记
nginx·安全·https
buhuimaren_2 小时前
Nginx核心功能
nginx
kiku18184 小时前
Nginx安全
nginx·web安全·https
上海云盾-小余5 小时前
等保 2.0 全攻略:企业合规建设与安全防护一站式指南
安全
萌兰三太子6 小时前
企业级 AI 智能体平台安全沙箱在 E2B 中的实现
人工智能·安全
卢傢蕊6 小时前
Nginx安全防护与HTTPS部署实战
nginx·安全·https
岁岁种桃花儿7 小时前
kubenetes从入门到上天系列第十九篇:Kubernetes安装Nginx ingress controller
java·nginx·kubernetes
胖头鱼的鱼缸(尹海文)7 小时前
数据库管理-第411期 OpenClaw进阶实战:升级+网关安全+飞书对接一次性搞定(20260315)
安全·飞书·openclaw
kc胡聪聪8 小时前
nginx安全
nginx