Nginx安全配置实战:8大核心功能详解

Nginx安全配置实战:8大核心功能详解

Nginx 核心安全功能超详细落地教程

本教程针对你指定的 8 大核心功能(隐藏版本号、限制危险请求方式、CC 攻击防御、防盗链、动态黑名单、HTTPS 配置、SSL 证书、自动重定向 HTTPS),提供从原理→配置步骤→参数详解→测试验证→常见问题排查的全流程超详细指导,所有操作均基于生产环境标准,确保可直接落地。


📋 前置准备(必做)

1. 环境确认

  • 确保 Nginx 版本≥1.20(稳定版,支持所有安全模块)
  • 操作系统:CentOS/RHEL 7+/Debian 10+/Ubuntu 20.04+
  • 拥有服务器 root 权限或 sudo 权限
  • 已准备好域名(如yourdomain.com),且 DNS 已解析到服务器 IP

2. 配置文件备份(防止操作失误)

bash

运行

# 备份Nginx主配置文件 cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date +%Y%m%d) # 备份站点配置目录(如果有) cp -r /etc/nginx/conf.d /etc/nginx/conf.d.bak.$(date +%Y%m%d) 

3. 核心配置文件路径说明

  • 主配置文件:/etc/nginx/nginx.conf(全局配置)
  • 站点配置目录:/etc/nginx/conf.d/(单个站点配置存放处)
  • 日志文件路径:
    • 访问日志:/var/log/nginx/access.log
    • 错误日志:/var/log/nginx/error.log

一、隐藏 Nginx 版本号(最基础必做)

1.1 原理说明

默认情况下,Nginx 会在HTTP 响应头和 ** 错误页面(如 404、500)** 中暴露完整版本号(如nginx/1.18.0),攻击者可利用版本号对应的已知 CVE 漏洞发起定向攻击。隐藏版本号是缩小攻击面的第一步。

1.2 配置步骤

步骤 1:修改主配置文件 nginx.conf
# 打开主配置文件 vim /etc/nginx/nginx.conf 

http块中添加 / 修改以下配置:

http { # -------------------------- 隐藏版本号核心配置 -------------------------- server_tokens off; # 关闭响应头和错误页面中的版本号显示 # 进阶:隐藏FastCGI/PHP响应中的服务版本(PHP业务必加) fastcgi_param SERVER_SOFTWARE nginx; # 其他原有配置(如include、log_format等)保留不变 include /etc/nginx/mime.types; default_type application/octet-stream; # ... 其他原有配置 ... } 
步骤 2:(进阶)完全隐藏 / 修改 Server 响应头

如果需要完全隐藏 Server 头(不显示nginx字样),需使用第三方模块ngx_http_headers_more_module,但该模块默认不编译进 Nginx,需重新编译安装(本教程暂不涉及编译,若需此功能可单独补充)。

1.3 测试验证

使用curl命令查看 HTTP 响应头,确认无版本号:

curl -I http://yourdomain.com 

预期结果:响应头中Server字段仅显示nginx,无版本号(如下所示):

HTTP/1.1 200 OK Server: nginx # ✅ 仅显示nginx,无版本号 Date: Mon, 16 Mar 2026 10:00:00 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Mon, 16 Mar 2026 09:00:00 GMT Connection: keep-alive ETag: "65f4a1b0-264" Accept-Ranges: bytes 

1.4 常见问题排查

  • 问题:配置后错误页面仍显示版本号?解决:确保server_tokens off放在http块的最前面,且执行了nginx -t && systemctl reload nginx

二、限制危险 HTTP 请求方式

2.1 原理说明

HTTP/1.1 协议定义了 8 种请求方法,其中GET、POST、HEAD是网站业务常用的,而PUT、DELETE、TRACE、OPTIONS、CONNECT等方法属于危险方法,可能被用于:

  • PUT/DELETE:篡改 / 删除服务器文件
  • TRACE:反射型 XSS 攻击
  • CONNECT:建立隧道代理

限制仅允许业务必需的请求方法,可大幅降低攻击面。

2.2 配置步骤

站点的 443 端口 server 块(或 80 端口 server 块)中添加配置:

# 打开站点配置文件(假设为yourdomain.conf) vim /etc/nginx/conf.d/yourdomain.conf 

server块中添加:

server { listen 443 ssl http2; server_name yourdomain.com www.yourdomain.com; root /var/www/html; index index.html index.php; # -------------------------- 限制危险请求方式核心配置 -------------------------- # 仅允许GET、POST、HEAD三种方法,其他全部返回405(Method Not Allowed) if ($request_method !~ ^(GET|POST|HEAD)$) { return 405; } # 其他配置(如SSL、限流等)后续添加 } 

2.3 参数详解

表格

参数含义
$request_methodNginx 内置变量,获取当前请求的 HTTP 方法
!~正则匹配符号,表示 “不匹配”
`^(GETPOSTHEAD)$`正则表达式,^表示开头,$表示结尾,`` 表示 “或”,仅匹配这三种方法
return 405直接返回 405 状态码,拒绝请求

2.4 测试验证

使用curl发送不同的请求方法,验证限制是否生效:

# 1. 测试GET方法(应正常返回200) curl -I -X GET http://yourdomain.com # 2. 测试POST方法(应正常返回200/404等业务状态码) curl -I -X POST http://yourdomain.com # 3. 测试PUT方法(应返回405) curl -I -X PUT http://yourdomain.com # 4. 测试DELETE方法(应返回405) curl -I -X DELETE http://yourdomain.com 

2.5 常见问题排查

  • 问题:API 接口需要 PUT/DELETE 方法怎么办?解决:在正则中添加对应方法,如^(GET|POST|HEAD|PUT|DELETE)$,但建议仅对特定 API 路径放行,不要全局放行。

三、CC 攻击防御(请求限流 + 连接数限制)

3.1 原理说明

CC 攻击(Challenge Collapsar)是一种常见的 DDoS 攻击,攻击者通过大量肉鸡 / 代理 IP 向服务器发送高频请求,耗尽服务器资源(CPU、内存、带宽),导致网站无法访问。

Nginx 通过两个原生模块实现 CC 防御:

  1. ngx_http_limit_req_module:限制单 IP 的请求速率(如每秒最多 20 个请求)
  2. ngx_http_limit_conn_module:限制单 IP 的并发连接数(如最多同时 20 个连接)

3.2 配置步骤

步骤 1:在nginx.confhttp块中定义限流规则
vim /etc/nginx/nginx.conf 

http块的最前面server块之外)添加:

http { # -------------------------- CC攻击防御:定义限流规则 -------------------------- # 1. 请求速率限制:单IP每秒最多20个请求,内存区域10m(可支持约16万个IP) # 语法:limit_req_zone $限流键 zone=区域名:内存大小 rate=速率; limit_req_zone $binary_remote_addr zone=req_limit:10m rate=20r/s; # 2. 登录接口专用限流(可选,更严格):单IP每分钟最多5次请求 limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m; # 3. 并发连接数限制:单IP最多同时20个连接 limit_conn_zone $binary_remote_addr zone=conn_limit:10m; # 其他原有配置保留不变 server_tokens off; include /etc/nginx/mime.types; # ... } 
步骤 2:在站点的server块中应用限流规则
vim /etc/nginx/conf.d/yourdomain.conf 

server块的location /中应用:

server { listen 443 ssl http2; server_name yourdomain.com www.yourdomain.com; root /var/www/html; # -------------------------- 应用全局限流规则 -------------------------- location / { # 应用请求速率限制:burst=5表示允许突发5个请求,nodelay表示不延迟,直接处理 limit_req zone=req_limit burst=5 nodelay; # 应用并发连接数限制 limit_conn conn_limit 20; # 其他原有配置(如proxy_pass、root等)保留 } # -------------------------- 登录接口专用严格限流(可选) -------------------------- location /login/ { limit_req zone=login_limit burst=2 nodelay; # 可叠加IP白名单,放行运维IP # allow 192.168.1.0/24; # deny all; } } 

3.3 参数超详细详解

(1)limit_req_zone参数

表格

参数含义示例
$binary_remote_addr限流键,表示用 “客户端 IP” 作为限流依据,$binary_表示存储为二进制,节省内存也可用$server_name(按域名限流)
zone=req_limit:10m定义限流区域名称为req_limit,内存大小为 10m1m 内存可存储约 1.6 万个 IP 的状态信息zone=login_limit:5m
rate=20r/s限流速率,r/s表示 “每秒请求数”,r/m表示 “每分钟请求数”rate=5r/m(每分钟 5 次)
(2)limit_req参数

表格

参数含义作用
zone=req_limit指定使用哪个限流区域(需与limit_req_zone定义的名称一致)-
burst=5允许的突发请求数:当请求速率超过rate时,允许额外排队 5 个请求避免正常用户的突发请求被误杀
nodelay不延迟处理突发请求:若不加此参数,突发请求会被延迟处理;加了则直接处理,超过的部分直接拒绝提升用户体验,避免请求卡顿

3.4 测试验证

使用ab工具(Apache Bench)进行压测,验证限流是否生效:

# 1. 安装ab工具 # Debian/Ubuntu apt install apache2-utils -y # CentOS/RHEL yum install httpd-tools -y # 2. 压测:发送100个请求,并发10个 ab -n 100 -c 10 http://yourdomain.com/ 

预期结果

  • 查看访问日志/var/log/nginx/access.log,大部分请求返回 200,超过限流的请求返回 503(Service Unavailable)
  • 查看错误日志/var/log/nginx/error.log,会出现limiting requests的记录

3.5 常见问题排查

  • 问题:正常用户被误杀怎么办?解决:适当调大rateburst参数,如rate=30r/s burst=10
  • 问题:CDN 场景下,$binary_remote_addr获取的是 CDN 节点 IP,不是真实用户 IP?解决:需配置ngx_http_realip_module模块,获取真实用户 IP 作为限流键(可单独补充配置)

四、防盗链

4.1 原理说明

盗链是指其他网站直接引用你网站的静态资源(图片、视频、PDF 等),消耗你的服务器带宽和流量,却不给你带来任何访问量。

Nginx 通过valid_referers指令实现防盗链:校验请求的Referer头(表示请求来源),仅允许本站域名信任域名引用资源,其他来源直接拒绝。

4.2 配置步骤

在站点的server块中添加配置:

vim /etc/nginx/conf.d/yourdomain.conf 

添加:

server { listen 443 ssl http2; server_name yourdomain.com www.yourdomain.com; root /var/www/html; # -------------------------- 防盗链核心配置 -------------------------- # 匹配需要防盗链的资源后缀(按需添加) location ~* \.(jpg|jpeg|png|gif|webp|mp4|avi|flv|pdf|zip)$ { # 定义合法的Referer来源 valid_referers none blocked server_names *.yourdomain.com yourdomain.com *.baidu.com *.google.com; # 可选:允许搜索引擎引用 # 如果Referer不合法,返回403 if ($invalid_referer) { return 403; # 或返回一张防盗链图片(更友好): # rewrite ^/ https://yourdomain.com/antisteal.jpg; } # 静态资源缓存7天,减少服务器压力 expires 7d; # 不记录防盗链日志,减少磁盘IO access_log off; } } 

4.3 参数详解

表格

参数含义
~*正则匹配符号,~表示区分大小写,*表示不区分大小写
valid_referers定义合法的 Referer 来源列表
none允许没有 Referer 头的请求(如直接在浏览器输入图片 URL)
blocked允许 Referer 头被防火墙 / 代理修改的请求(如 Referer 头不以http://开头)
server_names允许当前server_name中定义的所有域名(即yourdomain.comwww.yourdomain.com
$invalid_refererNginx 内置变量,当 Referer 不合法时,值为 1,否则为空

4.4 测试验证

使用curl发送不同 Referer 头的请求,验证防盗链是否生效:

# 1. 测试合法Referer(本站域名):应正常返回200 curl -I -e "https://www.yourdomain.com/article.html" https://www.yourdomain.com/img/test.jpg # 2. 测试非法Referer(其他网站):应返回403 curl -I -e "https://www.evil.com/steal.html" https://www.yourdomain.com/img/test.jpg # 3. 测试无Referer:应正常返回200 curl -I https://www.yourdomain.com/img/test.jpg 

-e参数用于设置 Referer 头)

4.5 常见问题排查

  • 问题:微信 / 小程序内图片无法显示?解决:在valid_referers中添加微信相关域名,或临时允许noneblocked
  • 问题:想让盗链者看到防盗链图片,而不是 403?解决:将return 403替换为rewrite ^/ https://yourdomain.com/antisteal.jpg;,需提前准备好防盗链图片

五、动态黑名单(Fail2ban 自动封禁恶意 IP)

5.1 原理说明

Nginx 原生没有动态黑名单功能,需配合Fail2ban实现:Fail2ban 通过监控 Nginx 访问日志,自动识别恶意行为(如多次 403/404、扫描器攻击、暴力破解),并调用iptables自动封禁恶意 IP,一段时间后自动解封。

5.2 配置步骤

步骤 1:安装 Fail2ban
# Debian/Ubuntu apt update && apt install fail2ban -y # CentOS/RHEL yum install epel-release -y && yum install fail2ban -y # 启动Fail2ban并设置开机自启 systemctl enable fail2ban --now # 查看Fail2ban状态 systemctl status fail2ban 
步骤 2:配置 Nginx 防护规则(Jail 文件)

Jail 文件是 Fail2ban 的核心配置,定义 “监控哪个日志、用什么规则、封禁多久”。

# 创建Nginx专用Jail配置文件 cat > /etc/fail2ban/jail.d/nginx-security.conf <<EOF [nginx-malicious] # 启用该Jail enabled = true # 指定过滤器规则(后续创建) filter = nginx-malicious # 监控的Nginx访问日志路径 logpath = /var/log/nginx/access.log # 最大重试次数:10次恶意请求 maxretry = 10 # 时间窗口:1分钟内(60秒) findtime = 60 # 封禁时长:1小时(3600秒),永久封禁设为-1 bantime = 3600 # 封禁动作:调用iptables封禁HTTP/HTTPS端口 action = iptables-multiport[name=nginx, port="http,https"] EOF 
步骤 3:配置过滤器规则(Filter 文件)

Filter 文件定义 “什么样的请求属于恶意请求”,通过正则匹配日志内容。

# 创建Nginx恶意请求过滤器 cat > /etc/fail2ban/filter.d/nginx-malicious.conf <<EOF [Definition] # 恶意请求正则:匹配403/404状态码,或扫描器UA # <HOST>是Fail2ban内置变量,自动提取日志中的IP failregex = ^<HOST> - .* "(GET|POST|HEAD).*" (403|404) .*$ ^<HOST> - .* "(GET|POST|HEAD).*" .* "(sqlmap|nmap|nikto|scanner|python-requests)".*$ # 忽略的请求(空表示不忽略) ignoreregex = EOF 
步骤 4:重启 Fail2ban 生效
# 测试Fail2ban配置是否正确 fail2ban-client -t # 重启Fail2ban systemctl restart fail2ban # 查看Jail是否启用 fail2ban-client status 

预期结果Status中会显示nginx-malicious Jail 已启用。

5.3 参数超详细详解

(1)Jail 文件参数

表格

参数含义示例
maxretry = 101 分钟内(findtime)最多允许 10 次恶意请求,超过则封禁登录接口可设为5
findtime = 60时间窗口,单位秒,恶意请求的统计周期可设为300(5 分钟)
bantime = 3600封禁时长,单位秒,-1表示永久封禁严重攻击可设为86400(1 天)
(2)Filter 文件参数

表格

参数含义
failregex恶意请求正则,<HOST>会自动匹配日志中的 IP 地址
ignoreregex忽略的请求正则,比如可忽略内网 IP 的 404 请求

5.4 测试验证

手动模拟恶意请求,验证 Fail2ban 是否自动封禁:

# 1. 模拟10次404请求(用curl循环发送) for i in {1..10}; do curl -I http://yourdomain.com/nonexistent$i.html; done # 2. 等待10秒后,查看Fail2ban封禁状态 fail2ban-client status nginx-malicious 

预期结果Banned IP list中会显示你的测试 IP(注意:测试时不要用生产服务器的公网 IP,避免被封禁!)

5.5 常用 Fail2ban 命令

表格

命令作用
fail2ban-client status nginx-malicious查看 Nginx Jail 的封禁状态
fail2ban-client set nginx-malicious unbanip 123.xxx.xxx.xxx手动解封指定 IP
fail2ban-client set nginx-malicious banip 123.xxx.xxx.xxx手动封禁指定 IP
tail -f /var/log/fail2ban.log查看 Fail2ban 日志

5.6 常见问题排查

  • 问题:Fail2ban 不封禁 IP?解决
    1. 检查logpath是否正确,访问日志是否有内容
  • 问题:误封正常用户 IP?解决
    1. 调大maxretryfindtime参数
    2. ignoreregex中添加正常用户的特征,或添加 IP 白名单

检查failregex是否匹配日志格式,用fail2ban-regex测试:bash运行

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-malicious.conf 

六、HTTPS 配置 + SSL 证书 + 自动重定向 HTTPS

6.1 原理说明

HTTP 是明文传输,数据在网络中裸奔,容易被窃听、篡改、劫持;HTTPS 是 HTTP+SSL/TLS,通过加密传输保证数据安全,是网站的标配。

本章节使用Let’s Encrypt 免费 SSL 证书,配合Certbot 工具一键申请、自动续期,无需付费。

6.2 配置步骤

步骤 1:安装 Certbot 工具
# Debian/Ubuntu apt update && apt install certbot python3-certbot-nginx -y # CentOS/RHEL yum install epel-release -y && yum install certbot python3-certbot-nginx -y 
步骤 2:一键申请 SSL 证书并自动配置 Nginx
# 执行Certbot命令,按提示操作 certbot --nginx -d yourdomain.com -d www.yourdomain.com 

操作提示

  1. 输入邮箱地址(用于接收证书过期提醒)
  2. 同意服务条款(输入A
  3. 是否分享邮箱(输入N
  4. 是否自动重定向 HTTP 到 HTTPS(输入2,选择 “Redirect”)

Certbot 自动完成的操作

  • 申请 SSL 证书(有效期 3 个月)
  • /etc/nginx/conf.d/yourdomain.conf中自动添加 SSL 配置
  • 自动配置 HTTP 到 HTTPS 的 301 重定向
  • 自动添加定时任务,实现证书自动续期
步骤 3:手动优化 SSL 配置(提升安全性)

Certbot 自动生成的配置足够安全,但我们可以进一步优化,达到 A + 评级。

vim /etc/nginx/conf.d/yourdomain.conf 

将 SSL 配置部分替换为以下优化版:

server { # -------------------------- 80端口:自动重定向到HTTPS -------------------------- listen 80; listen [::]:80; server_name yourdomain.com www.yourdomain.com; return 301 https://$server_name$request_uri; # 301永久重定向 } server { # -------------------------- 443端口:HTTPS核心配置 -------------------------- listen 443 ssl http2; listen [::]:443 ssl http2; server_name yourdomain.com www.yourdomain.com; root /var/www/html; index index.html index.php; # 1. SSL证书路径(Certbot自动生成,无需修改) ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem; # 2. 安全协议:仅启用TLSv1.2和TLSv1.3,禁用所有弱协议 ssl_protocols TLSv1.2 TLSv1.3; # 3. 强加密套件:仅启用前向保密(Forward Secrecy)的强加密算法 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; # 优先使用服务器端加密套件 # 4. SSL会话优化:减少握手开销,提升性能 ssl_session_cache shared:SSL:10m; # 10m缓存可支持约40000个并发会话 ssl_session_timeout 1d; ssl_session_tickets off; # 禁用会话票据,提升前向保密性 # 5. OCSP Stapling:证书状态查询,加速握手+保护隐私 ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 114.114.114.114 valid=300s; # DNS服务器 resolver_timeout 5s; # 6. HSTS强制HTTPS:防SSL降级攻击,让浏览器始终用HTTPS访问 add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; } 
步骤 4:验证证书自动续期

Let’s Encrypt 证书有效期 3 个月,Certbot 会自动添加定时任务续期,我们可以手动测试:

# 测试续期(不会真的续期,仅测试) certbot renew --dry-run 

预期结果:显示Congratulations, all renewals succeeded.

6.3 参数详解

(1)HSTS 参数

表格

参数含义
max-age=63072000HSTS 生效时间,单位秒,63072000 秒 = 2 年
includeSubDomains所有子域名也启用 HSTS
preload允许提交到浏览器 HSTS 预加载列表(可选,需到hstspreload.org提交)
always必须添加,确保错误响应也携带 HSTS 头
(2)301 重定向参数
  • return 301 https://$server_name$request_uri;
    • 301:永久重定向,SEO 权重会传递到 HTTPS 站点
    • $server_name:自动获取当前域名
    • $request_uri:自动获取完整的请求路径(包括参数)

6.4 测试验证

(1)测试自动重定向
curl -I http://yourdomain.com 

预期结果:返回301 Moved Permanently,且Location头指向 HTTPS 地址。

(2)测试 SSL 安全性

访问SSL Labs Server Test,输入你的域名,测试 SSL 配置,预期结果为 A + 评级

6.5 常见问题排查

  • 问题:Certbot 申请证书失败?解决
    1. 确保域名 DNS 已正确解析到服务器 IP
    2. 确保服务器 80 和 443 端口已开放(防火墙放行)
    3. 检查 Nginx 是否正在运行,且 80 端口未被占用
  • 问题:HTTPS 访问显示 “不安全”?解决
    1. 检查证书是否过期:certbot certificates
    2. 检查ssl_certificatessl_certificate_key路径是否正确
    3. 检查网站是否有 HTTP 资源(如图片、JS),需全部替换为 HTTPS

七、最终整体配置校验与生效

7.1 整合所有配置到单个站点文件

为了方便你使用,以下是整合了所有 8 大功能的完整站点配置文件,可直接复制使用(需替换标注为「用户修改」的内容):

# /etc/nginx/conf.d/yourdomain.conf # 整合:隐藏版本号、限制请求方式、CC防御、防盗链、HTTPS、自动重定向 # -------------------------- 80端口:自动重定向到HTTPS -------------------------- server { listen 80; listen [::]:80; server_name yourdomain.com www.yourdomain.com; # 用户修改:替换为你的域名 return 301 https://$server_name$request_uri; } # -------------------------- 443端口:核心安全配置 -------------------------- server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name yourdomain.com www.yourdomain.com; # 用户修改:替换为你的域名 root /var/www/html; # 用户修改:替换为你的网站根目录 index index.html index.php; # -------------------------- 1. HTTPS与SSL证书配置 -------------------------- ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # 用户修改:替换为证书路径 ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # 用户修改:替换为证书路径 ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem; # 用户修改:替换为证书路径 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 114.114.114.114 valid=300s; resolver_timeout 5s; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; # -------------------------- 2. 限制危险请求方式 -------------------------- if ($request_method !~ ^(GET|POST|HEAD)$) { return 405; } # -------------------------- 3. CC攻击防御 -------------------------- location / { limit_req zone=req_limit burst=5 nodelay; limit_conn conn_limit 20; } # -------------------------- 4. 防盗链 -------------------------- location ~* \.(jpg|jpeg|png|gif|webp|mp4|avi|flv|pdf)$ { valid_referers none blocked server_names *.yourdomain.com yourdomain.com; # 用户修改:替换为你的域名 if ($invalid_referer) { return 403; } expires 7d; access_log off; } # -------------------------- 5. 敏感文件禁止访问(补充安全) -------------------------- location ~ /\. { deny all; return 404; access_log off; } location ~* \.(bak|sql|ini|conf|log|sh)$ { deny all; return 404; access_log off; } } 

7.2 配置生效与测试

# 1. 测试Nginx配置语法(必须通过才能重载) nginx -t # 预期结果:syntax is ok 和 test is successful # 2. 平滑重载Nginx(不中断业务) systemctl reload nginx # 3. 整体功能测试(按前面各章节的测试方法逐一验证) 

八、日常运维与监控

定期检查 SSL 证书有效期

certbot certificates

定期查看 Fail2ban 封禁状态

fail2ban-client status nginx-malicious 

定期查看 Nginx 日志

# 查看访问日志 tail -f /var/log/nginx/access.log # 查看错误日志 tail -f /var/log/nginx/error.log 

Read more

【开源】多平台自媒体发布工具MediaPublishPlatform:一键发布到小红书、抖音、Tiktok等9大平台

【开源】多平台自媒体发布工具MediaPublishPlatform:一键发布到小红书、抖音、Tiktok等9大平台

🚀 解放双手!开源多平台自媒体发布工具MediaPublishPlatform:一键发布到小红书、抖音、Tiktok等9大平台 * ✨ 前言 * 🔥 项目简介 * 🎯 核心功能亮点 * 1. 📱 九大平台全覆盖 * 2. ⚡ 一键批量发布 * 3. ⏰ 智能定时发布 * 4. 🔐 统一账号管理 * 5. 📊 发布记录追踪 * 🎨 功能演示 * 管理界面 * 平台发布效果展示 * 🛠️ 技术栈解析 * 后端技术 * 前端技术 * 为什么选择Playwright? * 🚀 快速开始 * 环境要求 * 5分钟快速部署 * 💡 技术实现亮点 * 1. 统一登录与验证系统 * 2. 多平台统一上传架构 * 3. 灵活的配置系统 * 📈 项目优势对比 * 🎯 适用场景 * 1. 个人自媒体创作者 * 2. 短视频团队 * 3. 跨境电商运营 * 4. 开发者学习 * 🔧 API接口丰富 * 🚢 部署方案 * 方案一:本地开发(推

By Ne0inhk
如何将代码轻松上传到 Gitee?Git 使用全攻略!

如何将代码轻松上传到 Gitee?Git 使用全攻略!

在开发过程中,代码托管平台是每个开发者的必备工具。无论你是刚接触版本控制的新手,还是已经拥有多项目管理经验的程序员,掌握如何将代码上传到 Gitee 或 GitHub 都是必不可少的技能。 今天,我将带你一步步了解 如何将项目上传到 Gitee,并且在过程中顺便深入解析 Git、Gitee 和 GitHub 的关系,让你在使用这些工具时不再迷茫。 一、准备工作:Git 基础知识 首先,我们需要知道 Git 是什么,它是如何与 Gitee 和 GitHub 配合使用的。 1.1 什么是 Git? Git 是一款开源的分布式版本控制工具,旨在帮助程序员管理代码历史、团队协作以及代码合并。无论你是一个人开发项目,还是和团队一起协作,Git 都能帮助你: * 跟踪代码的更改 * 回退到任何历史版本 * 合并团队成员的修改 1.2

By Ne0inhk
开源C2框架AdaptixC2安装与使用教程

开源C2框架AdaptixC2安装与使用教程

⚠️ 重要声明 法律与道德准则 1. 授权测试原则:本文所述技术仅可在拥有明确书面授权且完全控制的网络环境中使用。 2. 严禁违法行为:未经授权对任何计算机系统进行扫描、渗透或控制均属违法行为。 3. 推荐使用场景:建议仅在隔离的实验室环境中用于安全研究与教学目的。 4. 责任界定:任何技术滥用行为所产生的全部法律及道德后果,均由使用者自行承担。 软件安全规范 * 源码安全原则:为保障透明与安全,本文不提供任何预编译二进制文件。所有程序必须从项目官方源码仓库自行编译。 * 官方获取渠道:请仅从项目GitHub官方仓库获取源码。 * 第三方风险警示:任何非官方渠道提供的"免编译版"、“一键安装包”、"破解版"均可能被植入恶意代码,请勿下载使用。 文章目录 * ⚠️ 重要声明 * 法律与道德准则 * 软件安全规范 * 一、安装与配置 * 1、下载项目源代码 * 2、安装与编译 * 方法一:使用官方脚本进行安装 * 方法二:手动安装 * 1.安装依赖

By Ne0inhk

GitHub 44K 星!Skills:开源「智能体技能库」+ 手搓创建技能

2026年,AI的战场已从“回答问题”转向“完成任务”。 你是否想过: ✅ 能否让AI自动分析GitHub仓库并提交PR? ✅ 能否让AI读完一篇论文后,自动生成PPT并邮件发送给团队? ✅ 能否让AI在发现线上Bug后,自动回滚版本并通知运维? 这些不再是幻想—— 一个名为 Skills 的开源项目,正在让AI智能体(Agent)真正拥有“做事”的能力 。 此仓库包含Anthropic为Claude实现的技能。 截至2026年1月,该项目已在GitHub收获 44,000+ Stars ,被Hugging Face、LangChain、LlamaIndex等主流框架深度集成,被誉为 “AI智能体的操作系统级技能库” 。 今天,我们就来揭开它的神秘面纱。  什么是Skills? Skills (全名: )是一个 开放、模块化、可组合的智能体技能仓库 。 它的核心理念很简单: “不要让AI从零开始学做事,而是给它一套标准化的‘技能工具箱’。” 就像人类通过学习“开车”“做饭”“写代码”来完成复杂任务,

By Ne0inhk