Nginx 的安全防护策略与HTTPS 部署

一、核心安全配置(基础防护)

通过 Nginx 自身配置阻断常见安全风险,无需依赖第三方工具,是安全防护的基础环节。

  1. 隐藏 Nginx 版本号

    • 风险:暴露版本号可能被攻击者利用特定版本漏洞发起攻击;
    • 配置:在nginx.confhttp块中添加server_tokens off;,重载后版本号不再显示(原响应Server: nginx/1.26.3变为Server: nginx);
    • 验证:通过curl -I 服务器IP查看响应头。
  2. 限制危险 HTTP 请求方法

    • 风险:PUT/DELETE(文件修改风险)、TRACE(XST 攻击)、CONNECT(代理滥用)等方法存在安全隐患,仅保留 GET/HEAD/POST 常用安全方法;

    • 配置:在server块中添加条件判断,非白名单方法返回 444(静默断开连接):

      nginx

      复制代码
      if ($request_method !~ ^(GET|HEAD|POST)$) {
          return 444;
      }
    • 验证:用curl -X PUT -I 服务器IP测试,返回空响应,日志记录 444 状态码。

  3. CC 攻击防御(请求速率限制)

    • 原理:CC 攻击通过大量合法请求耗尽服务器资源,利用limit_req模块限制单 IP 请求速率;

    • 配置:在http块定义共享内存区,serverlocation块绑定限制规则:

      nginx

      复制代码
      # http块:定义10M内存区,单IP每秒最多10次请求
      limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
      # location块:绑定限制,突发请求最多20个(等候区),超出返回503
      limit_req zone=req_limit burst=20 nodelay;
    • 验证:用ab -n 300 -c 30 服务器IP压力测试,日志中大量请求返回 503,说明限制生效。

  4. 防盗链配置

    • 风险:防止其他网站盗用本网站静态资源(图片、CSS、JS),避免带宽浪费和版权侵权;

    • 原理:基于referer字段判断请求来源,仅信任指定域名;

    • 配置:在location块中匹配静态资源后缀,设置信任域名,非信任来源返回 403:

      nginx

      复制代码
      location ~*\.(jpg|png|gif|css|js)$ {
          root html;
          valid_referers aaa.com *.aaa.com; # 信任的源域名
          if ($invalid_referer) {
              return 403;
          }
      }
    • 验证:盗链网站访问目标资源时返回 403,原网站正常访问。

二、高级防护(进阶安全机制)

  1. 动态黑名单
    • 优势:无需重启 Nginx 即可实时更新封禁 IP / 网段,比静态allow/deny更灵活,适用于拦截恶意 IP;

    • 配置步骤:

      1. 创建黑名单文件blockips.conf,格式为IP/网段 封禁动作码(0 = 允许,1=403,2=444,3=503):

        plaintext

        复制代码
        192.168.10.102 1; # 封禁单个IP,返回403
        192.168.1.0/24 1; # 封禁整个网段
      2. http块中通过geo模块引入黑名单,server块中触发封禁:

        nginx

        复制代码
        http {
            geo $block_ip {
                default 0; # 默认允许
                include /usr/local/nginx/conf/blockips.conf;
            }
            server {
                if ($block_ip) {
                    return 403;
                }
            }
        }
    • 自动封禁:编写 Shell 脚本,统计日志中访问超过 100 次的 IP,自动添加到黑名单文件,可通过定时任务执行。

三、HTTPS 部署实战(加密通信)

HTTPS 是HTTP+SSL/TLS的加密通信协议,解决 HTTP 明文传输的窃听、篡改、冒充风险,核心遵循机密性、完整性、身份认证、不可否认四大安全原则。

  1. HTTPS 核心原理

    • 混合加密模式:握手阶段用非对称加密 (公钥 / 私钥)协商会话密钥,数据传输阶段用对称加密(会话密钥)加密数据(兼顾安全性和效率);
    • 信任机制:通过 CA 证书验证服务器身份,避免公钥被中间人调包,客户端内置信任的根 CA 证书,用于验证服务器证书合法性。
  2. 自签名证书生成(测试环境)

    • 生产环境需使用 Let's Encrypt、DigiCert 等权威 CA 证书,测试环境可生成自签名证书: bash

      运行

      复制代码
      # 创建证书存储目录
      mkdir -p /etc/nginx/ssl
      # 生成2048位RSA私钥和自签名证书(有效期1年)
      openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
      -keyout /etc/nginx/ssl/nginx-selfsigned.key \
      -out /etc/nginx/ssl/nginx-selfsigned.crt \
      -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=localhost"
  3. Nginx 启用 HTTPS

    • 配置步骤:
      1. nginx.conf中添加 HTTPS 服务块,监听 443 端口,指定证书和私钥路径:

        nginx

        复制代码
        # HTTPS服务配置
        server {
            listen 443 ssl;
            server_name localhost;
            # 证书和私钥路径
            ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;
            ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;
            # 启用安全的TLS协议和加密套件
            ssl_protocols TLSv1.2 TLSv1.3;
            ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
            ssl_prefer_server_ciphers on;
            # 网站根目录配置
            location / {
                root /usr/local/nginx/html;
                index index.html;
            }
        }
        # HTTP请求重定向到HTTPS(可选)
        server {
            listen 80;
            server_name localhost;
            return 301 https://$host$request_uri;
        }
      2. 验证配置并重载:nginx -t && nginx -s reload

    • 浏览器验证:访问https://服务器IP,因自签名证书未被信任会提示警告,选择 "信任" 后可正常访问,地址栏显示锁形图标。

四、本章核心总结

  1. Nginx 安全防护分为基础配置和高级防护:基础配置聚焦隐藏版本、限制请求方法、防御 CC 攻击、防盗链,快速阻断常见风险;高级防护通过动态黑名单实现实时恶意 IP 拦截,适配复杂攻击场景;
  2. HTTPS 是 Web 服务安全的核心,通过混合加密模式保障数据传输安全,CA 证书解决身份认证问题,自签名证书适用于测试,生产环境需使用权威 CA 证书;
  3. 所有安全配置需结合实际业务场景调整(如请求速率限制、信任域名),配置后需通过命令或浏览器验证生效,同时建议结合日志监控异常请求,持续优化防护策略;
  4. 部署 HTTPS 后可提升网站可信度,适配 HTTP/2 协议,同时满足搜索引擎(如 Google)和主流平台(如微信小程序、App Store)的安全要求。
相关推荐
00后初来乍到2 小时前
Docker 搭建 LNMP(Nginx+PHP+MySQL)完整踩坑实录
nginx·docker·php
灰阳阳2 小时前
Spring Boot+Nginx+MySQL容器化实战
spring boot·mysql·nginx
人生匆匆2 小时前
配置nginx ssl反向代理tcp端口
tcp/ip·nginx·ssl
中华网商业2 小时前
浙江润鑫STW-18汽车轮重测量仪 稳定可靠守护车辆运行安全
安全·汽车
cramer_50h2 小时前
网络安全技术研究:安全框架和技术方案、研究(一)
安全·web安全
zzh0813 小时前
Nginx性能优化与监控笔记
笔记·nginx·性能优化
学习3人组3 小时前
WSS排错检查
网络协议·https·ssl
小璐资源网3 小时前
《Nginx缓存配置:浏览器缓存与服务器缓存实战》
服务器·nginx·缓存
炸炸鱼.3 小时前
Nginx 性能调优与深度监控实战指南
运维·nginx