服务器 > 网络 > https

Nginx安全防护与HTTPS部署实战

40人参与 2026-04-09 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等方法存在高危风险:

只放行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;
        }
    }
}

关键参数说明

压力测试验证

安装 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机制拦截。

实验环境

配置防盗链

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;

数字含义

(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部署的资料请关注代码网其它相关文章!

(0)

您想发表意见!!点此发布评论

推荐阅读

Centos7负载异常过高的排查思路与解决方法(Load Average)

04-09

Nginx跨域代理的完整排坑指南(从证书错误到CORS配置)

04-09

使用Nginx实现https请求转发http实践

03-23

在Nginx上配置HTTPS证书的完整指南

04-23

OpenFeign实现自定义Http请求头

03-18

nginx安装全过程

03-09

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论