Nginx安全防护与HTTPS部署实战

 更新时间:2026年04月09日 08:55:18   作者:枕布响丸辣  
文章介绍了Nginx安全加固与HTTPS部署,从编译安装、隐藏版本号、限制危险请求、请求限制、防盗链、动态黑名单、HTTPS部署等方面进行了详细说明,需要的朋友可以参考下

前言

在互联网高速发展的今天,Web 服务安全已成为企业与开发者必须重视的核心问题。Nginx 凭借轻量、高并发、模块化设计,占据全球近三分之一 Web 服务器市场。但 DDoS、CC 攻击、恶意爬虫、SQL 注入等威胁层出不穷,加之 GDPR、等保 2.0 等法规要求,掌握 Nginx 安全加固与 HTTPS 部署,已是运维与开发人员的必备技能。

一、Nginx 核心安全配置(生产必配)

1. 编译安装 Nginx(安全基础)

生产环境不推荐 yum 直接安装,编译安装可按需开启模块、关闭危险功能,安全性更高。

(1)安装依赖包

dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker git wget tar

(2)创建专用运行用户(最小权限原则)

禁止 nginx 使用 root 运行,降低入侵后风险:

useradd -M -s /sbin/nologin nginx
mkdir -p /var/log/nginx
chown -R nginx:nginx /var/log/nginx

(3)编译配置(开启安全必备模块)

tar zxf nginx-1.26.3.tar.gz
cd nginx-1.26.3
./configure \
  --prefix=/usr/local/nginx \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_v2_module \
  --with-http_realip_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --with-pcre \
  --with-stream

make && make install

(4)创建软链接、配置系统服务

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

新建 systemd 服务文件:

vi /lib/systemd/system/nginx.service

写入内容:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
ExecStartPre=/usr/local/sbin/nginx -t
ExecStart=/usr/local/sbin/nginx
ExecReload=/usr/local/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
User=root
Group=root
[Install]
WantedBy=multi-user.target

启动并设置开机自启:

systemctl daemon-reload
systemctl start nginx
systemctl enable nginx

2. 隐藏 Nginx 版本号(防版本定向攻击)

攻击者可通过版本号查找对应 CVE 漏洞,生产环境必须隐藏

查看版本号

curl -I 192.168.10.101
# 返回:Server: nginx/1.26.3

关闭版本显示

vi /usr/local/nginx/conf/nginx.conf

http块中添加:

http {
    server_tokens off;
}

重载配置:

nginx -t && nginx -s reload

再次验证:

curl -I 192.168.10.101
# 返回:Server: nginx(无版本号)

3. 限制危险 HTTP 请求方法

HTTP 中PUT/DELETE/CONNECT/TRACE等方法存在高危风险:

  • PUT/DELETE:可上传 / 删除文件
  • TRACE:易导致 XST 攻击
  • CONNECT:可被用于代理滥用

只放行GET/HEAD/POST,其他直接返回 444 断开连接。

配置:

server {
    ...
    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
        return 444;
    }
}

测试:

curl -XPUT -I 192.168.10.101
# 返回 Empty reply from server

注意:TRACE/CONNECT 会被 Nginx 核心层直接拦截,返回 405/400,不会进入 if 判断。

4. 请求限制(CC 攻击防御核心)

CC 攻击通过海量请求耗尽服务器资源,Nginx 自带limit_req模块可精准限速。

配置请求速率限制

http {
    # 定义限流区域:10M内存,按IP限速,10请求/秒
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    server {
        location / {
            root html;
            index index.html;
            # 突发队列20,不延迟直接处理
            limit_req zone=req_limit burst=20 nodelay;
        }
    }
}

关键参数说明

  • limit_req_zone:定义共享内存,存储 IP 访问状态
  • $binary_remote_addr:以客户端 IP 为维度限流
  • rate=10r/s:每秒最多 10 个请求
  • burst=20:缓冲队列,超出速率的请求排队
  • nodelay:队列请求立即处理,否则会延迟返回

压力测试验证

安装 ab 工具:

dnf install httpd-tools -y

发起 300 请求,30 并发:

ab -n 300 -c 30 http://192.168.10.101/

查看日志:

tail -300 /usr/local/nginx/logs/access.log | grep -c 503

大量请求返回 503,限流生效。

5. 防盗链配置(保护静态资源)

盗链会消耗服务器带宽、侵犯版权,Nginx 可通过referer机制拦截。

实验环境

  • 源站:www.aaa.com 192.168.10.101
  • 盗链站:www.bbb.com 192.168.10.102

配置防盗链

location ~* \.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|webp|ico)$ {
    root html;
    # 信任域名
    valid_referers aaa.com *.aaa.com;
    # 非法referer返回403
    if ($invalid_referer) {
        return 403;
    }
}

配置后,盗链网站直接显示图片 403,防护生效。

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

1. 动态黑名单(实时封禁恶意 IP)

静态allow/deny需要重启服务,动态黑名单可热加载,无需重启。

(1)创建黑名单文件

vi /usr/local/nginx/conf/blockips.conf

写入:

192.168.1.0/24 1;
192.168.10.102 1;

数字含义

  • 0:允许
  • 1:返回 403 封禁
  • 2:返回 444 断开
  • 3:返回 503

(2)主配置加载

http {
    geo $block_ip {
        default 0;
        include /usr/local/nginx/conf/blockips.conf;
    }
    server {
        if ($block_ip) {
            return 403;
        }
    }
}

重载:

nginx -t && nginx -s reload

(3)自动封禁高频 IP 脚本

#!/bin/bash
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | awk '{if($1>100) print $2" 1;"}' > /usr/local/nginx/conf/blockips.conf

访问量超 100 的 IP 自动加入黑名单,配合定时任务使用。

三、Nginx HTTPS 部署(全站加密)

1. HTTPS 核心原理

HTTPS = HTTP + SSL/TLS,解决 HTTP 三大风险:

  • 窃 听风险:明文传输可被截取
  • 篡改风险:数据被中间人修改
  • 冒充风险:访问钓鱼网站

HTTPS 采用混合加密

  • 握手阶段:非对称加密(公钥 / 私钥)交换会话密钥
  • 传输阶段:对称加密加密业务数据,效率更高

数字证书解决公钥信任问题,由 CA 机构签名,系统内置根证书信任。

2. 生成自签名证书(测试环境)

生产请使用 Let’s Encrypt、DigiCert 等正规 CA 证书。

mkdir -p /etc/nginx/ssl
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

server {
    listen 443 ssl;
    server_name localhost;
    # 证书路径
    ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;
    # 安全协议与加密套件
    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;
}

重载配置:

nginx -t && nginx -s reload

4. 验证 HTTPS

访问https://服务器IP,浏览器提示证书不安全(自签名),测试环境可忽略。生产环境使用受信任证书后,浏览器显示安全锁,支持 HTTP/2,SEO 权重更高。

四、生产环境安全加固总结

  1. 最小权限:使用专用 nginx 用户,禁止 root 运行
  2. 隐藏信息:关闭版本号、隐藏服务器信息
  3. 请求限流:limit_req 防 CC,limit_conn 防并发过量
  4. 方法限制:只放行 GET/HEAD/POST
  5. 防盗链:保护静态资源,减少带宽浪费
  6. 动态黑名单:实时封禁恶意 IP
  7. 全站 HTTPS:开启 TLS1.2+,禁用不安全协议
  8. 定期更新:Nginx 保持最新版,修复 CVE 漏洞

五、结语

Nginx 安全防护不是一次性配置,而是持续优化的过程。本文覆盖的编译加固、版本隐藏、请求限流、防盗链、动态黑名单、HTTPS 部署,可直接应用于中小企业生产环境,大幅提升 Web 服务安全性。

以上就是Nginx安全防护与HTTPS部署实战的详细内容,更多关于Nginx安全防护与HTTPS部署的资料请关注脚本之家其它相关文章!

相关文章

  • Nginx实现静态资源的反向代理实例

    Nginx实现静态资源的反向代理实例

    这篇文章主要介绍了Nginx实现静态资源的反向代理实例,本文通过分析github发现这个应用,可以避免在https的网站中出现http链接,需要的朋友可以参考下
    2015-03-03
  • Nginx中动态upstream域名解析失效问题解决的几种方法

    Nginx中动态upstream域名解析失效问题解决的几种方法

    本文主要介绍了Nginx中实现动态解析upstream域名的方法,强调了使用resolver指令与变量触发、作用域正确、配置兼容三要素的重要性,并提供了四种解决方案,下面就来详细的介绍一下
    2026-04-04
  • Nginx实现UDP四层转发的过程

    Nginx实现UDP四层转发的过程

    为了解决VPN连接速度慢的问题,可以通过Nginx实现UDP的四层转发,首先检查Nginx是否安装了with-stream模块,然后修改nginx.conf配置文件进行UDP端口的转发设置,使用nginx-t检查配置文件语法,无误后重新加载Nginx,这样通过国内服务器中转,可以提升连接到国外服务器的速率
    2024-09-09
  • 解决使用了nginx获取IP地址都是127.0.0.1 的问题

    解决使用了nginx获取IP地址都是127.0.0.1 的问题

    这篇文章主要介绍了解决使用了nginx获取IP地址都是127.0.0.1 的问题,获取i工具的完整代码文中给大家提到,具体实例代码跟随小编一起看看吧
    2021-09-09
  • nginx中配置pathinfo模式示例

    nginx中配置pathinfo模式示例

    这篇文章主要介绍了nginx中配置pathinfo模式示例,本文详细记录了摸索过程和成功的配置案例,需要的朋友可以参考下
    2014-08-08
  • nginx slice模块的使用和源码分析小结

    nginx slice模块的使用和源码分析小结

    很多请求都会去访问一个巨大的文件,这个时候slice模块就有了用武之地,本文主要介绍了nginx slice模块的使用和源码分析,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • nginx 访问限制与访问控制的实现

    nginx 访问限制与访问控制的实现

    访问控制要做的事情是控制客户端的资源访问权限,本文主要介绍了nginx 访问限制与访问控制的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • 排查Openresty获取不到Host请求头解决过程详解

    排查Openresty获取不到Host请求头解决过程详解

    这篇文章主要为大家介绍了排查Openresty获取不到Host请求头解决过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 安装配置php-fpm来搭建Nginx+PHP的生产环境

    安装配置php-fpm来搭建Nginx+PHP的生产环境

    这篇文章主要介绍了安装配置php-fpm来搭建Nginx+PHP的生产环境的方法,php-fpm的作用是将FastCGI进程管理整合进PHP包,需要的朋友可以参考下
    2016-01-01
  • 阿里云部署Ubuntu 1.4 Flask + WSGI + Nginx 详解

    阿里云部署Ubuntu 1.4 Flask + WSGI + Nginx 详解

    本文解决的是 Flask 最后一公里的问题:Linux 部署,需要的朋友可以参考下
    2017-12-12

最新评论