Nginx进阶配置实战全攻略:SSL部署、防盗链、压缩、代理、限流、请求合并

Nginx进阶配置实战全攻略:SSL部署、防盗链、压缩、代理、限流、请求合并

文章目录

  • Nginx进阶配置实战全攻略:SSL部署、防盗链、压缩、代理、限流、请求合并
    • 一、SSL证书部署+HTTP强制跳转:实现HTTPS加密访问
      • 1.1 先装SSL模块(Nginx默认未内置)
      • 1.2 HTTPS核心配置(443端口)
      • 1.3 HTTP强制跳转到HTTPS(80端口)
    • 二、Nginx防盗链:保护静态资源不被盗用
      • 2.1 核心原理
      • 2.2 实战配置(以图片为例)
      • 2.3 局限性与补充
    • 三、GZIP压缩:让资源变小,加载更快
      • 3.1 基础配置(新手首选)
      • 3.2 生产环境优化配置(兼顾效果与性能)
    • 四、反向代理:实现免备案访问
      • 4.1 核心原理
      • 4.2 服务器A的Nginx配置
    • 五、流量限流:防止服务被冲垮
      • 5.1 限制请求频率(按IP)
      • 5.2 限制并发连接数
    • 六、请求合并:减少请求次数,加速加载
      • 6.1 先安装concat模块(需编译)
      • 6.2 核心配置
      • 6.3 前端使用方法
    • 七、通用配置注意事项
    • 九、Nginx可视化配置生成器
    • 八、总结

Nginx作为高性能的Web服务器和反向代理工具,是Web服务运维的核心利器。本文整合了SSL证书部署、资源防盗链、GZIP压缩、反向代理、流量限流、请求合并六大核心进阶配置,帮你搭建更安全、更高效、更稳定的Web服务,新手也能跟着落地。

一、SSL证书部署+HTTP强制跳转:实现HTTPS加密访问

HTTPS通过SSL/TLS协议加密数据传输,是网站安全的基础要求,搭配HTTP强制跳转能确保所有用户都走加密链路。

1.1 先装SSL模块(Nginx默认未内置)

若已安装Nginx,无需重装,仅需重新编译添加SSL模块(保留原有配置):

bash 复制代码
# 进入Nginx解压目录
cd /opt/module/nginx-1.13.7
# 重新配置,新增ssl模块(保留原有模块)
./configure \
--prefix=/opt/module/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi  \
--with-http_ssl_module
# 编译安装(仅新增模块,不覆盖原有文件)
make && make install

1.2 HTTPS核心配置(443端口)

将SSL证书(.crt)和私钥(.key)放到Nginx配置目录,配置443端口并优化加密规则:

nginx 复制代码
server {
    listen       443 ssl; # 显式声明SSL
    server_name  www.imoocdsp.com; # 绑定备案域名
    # 证书和私钥路径
    ssl_certificate      1_www.imoocdsp.com_bundle.crt;
    ssl_certificate_key  2_www.imoocdsp.com.key;
    # SSL优化配置
    ssl_session_cache    shared:SSL:1m; # 共享会话缓存
    ssl_session_timeout  5m; # 会话超时
    ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全的旧协议
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE:!3DES;
    ssl_prefer_server_ciphers on; # 优先用服务器加密套件
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # 强制HTTPS
    # 业务转发
    location / {
        proxy_pass http://tomcats/;
        index  index.html index.htm;
    }
}

1.3 HTTP强制跳转到HTTPS(80端口)

用301永久重定向,既安全又不影响搜索引擎收录:

nginx 复制代码
server {
    listen 80;
    server_name nature.us.com author-welcome.nature.us.com springernature.us.com;
    return 301 https://$server_name$request_uri; # 保留请求路径跳转
}

二、Nginx防盗链:保护静态资源不被盗用

防止图片、视频、CSS/JS等静态资源被其他网站盗用,减少带宽浪费。

2.1 核心原理

通过HTTP的Referer请求头判断请求来源,仅允许合法域名访问,非法请求拦截或跳转。

2.2 实战配置(以图片为例)

nginx 复制代码
# 匹配图片资源后缀(可扩展至CSS、JS)
location ~^/.*\.(png|jpg|gif|jfif|jpeg|webp) {
    valid_referers  www.mbqm.com *.mbqm.com; # 允许主域名+子域名
    if ($invalid_referer){
        # return 403; # 简单拦截(返回403)
        rewrite  ^/  http://ip:8080/error.html; # 跳转自定义错误页
        break;
    }
    root   html; # 资源存储目录
    expires 3d; # 浏览器缓存,减少重复请求
}

2.3 局限性与补充

  • Referer可被伪造,对付普通盗用足够,高安全需求可搭配令牌验证、加水印;
  • 自身网页可加<meta name="referrer" content="no-referrer">隐藏Referer,防止被伪造。

三、GZIP压缩:让资源变小,加载更快

压缩HTML、CSS、JS等文本资源,体积可减少30%-50%,大幅提升网页加载速度。

3.1 基础配置(新手首选)

nginx 复制代码
http {
    gzip on; # 开启压缩
    gzip_min_length 1k; # 小于1KB不压缩(性价比低)
    gzip_comp_level 2; # 压缩等级(1-10,数字越大越费CPU)
    # 要压缩的文件类型
    gzip_types text/bash application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary on; # 适配代理服务器
}

3.2 生产环境优化配置(兼顾效果与性能)

nginx 复制代码
http {
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 6; # 性价比最高的压缩等级
    gzip_types 
        text/plain text/css text/xml text/javascript 
        application/javascript application/x-javascript application/json 
        application/xml application/xml+rss image/jpeg image/gif image/png;
    gzip_vary on;
    gzip_http_version 1.1;
    gzip_buffers 2 4k; # 压缩缓冲区
    gzip_static on; # 优先用手动压缩的.gz文件,减少实时压缩损耗
    gzip_disable "MSIE [1-6]."; # 兼容老IE浏览器
}

四、反向代理:实现免备案访问

绕开国内服务器备案限制,通过免备案服务器转发请求到国内未备案服务器。

4.1 核心原理

用户访问「已备案/海外免备案服务器A」的合法域名,A将请求转发到「国内未备案服务器B」,实现B上的网站正常访问。

4.2 服务器A的Nginx配置

nginx 复制代码
server {
    listen 80;
    server_name 免备案域名; # 服务器A的合法域名
    location / {
        proxy_pass 服务器B的IP:端口; # 转发到国内未备案服务器
    }
}

提示:确保A和B网络互通,配置后重启Nginx生效。

五、流量限流:防止服务被冲垮

限制请求频率或并发连接数,避免突发流量、恶意请求压垮服务器。

5.1 限制请求频率(按IP)

nginx 复制代码
http {
    # 定义限流规则:10MB内存存IP记录,每秒最多10个请求
    limit_req_zone $binary_remote_addr zone=serviceRateLimit:10m rate=10r/s;

    server {
        listen 80;
        server_name 你的域名;

        location / {
            # 基础限流(超量直接拒绝)
            # limit_req zone=serviceRateLimit;
            # 兼容突发流量:允许20个额外请求,且立即处理
            limit_req zone=serviceRateLimit burst=20 nodelay;
            proxy_pass http://upstream_cluster1; # 转发后端
        }
    }
}

5.2 限制并发连接数

nginx 复制代码
http {
    # 按IP限制:10MB内存存记录
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    # 按服务器总连接限制
    limit_conn_zone $server_name zone=perserver:10m;

    server {
        listen 80;
        server_name 你的域名;
        limit_conn perip 20; # 单个IP最多20个并发连接
        limit_conn perserver 100; # 服务器总连接上限100

        location / {
            proxy_pass http://upstream_cluster1;
        }
    }
}

六、请求合并:减少请求次数,加速加载

解决浏览器对单域名并发请求限制(约6个),将多个CSS/JS文件合并为一个请求。

6.1 先安装concat模块(需编译)

bash 复制代码
cd /usr/local/src/
# 下载Nginx和concat模块源码
wget http://nginx.org/download/nginx-1.4.2.tar.gz
wget https://github.com/alibaba/nginx-http-concat/archive/master.zip -O nginx-http-concat-master.zip
# 解压
unzip nginx-http-concat-master.zip
tar -xzvf nginx-1.4.2.tar.gz
# 配置编译参数
cd nginx-1.4.2
./configure --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module \
--add-module=../nginx-http-concat-master
# 编译安装
make && make install

6.2 核心配置

nginx 复制代码
server {
    listen       80;
    server_name localhost;
    root  /html; # 网站目录

    location /static/css/ {
        concat on; # 开启合并
        concat_max_files 20; # 最多合并20个文件
        concat_delimiter /* 分隔符 */; # 合并后文件的分隔符
        concat_unique off; # 允许合并不同类型资源
        concat_types text/css application/javascript; # 可合并的类型
    }
}

6.3 前端使用方法

??拼接多个文件路径即可:

html 复制代码
<link rel="stylesheet" href="/static/css/??a.css,b.css,c.css">

七、通用配置注意事项

  1. 任何配置修改后,先执行nginx -t检查语法,无误后用nginx -s reload平滑重载,不中断服务;
  2. SSL证书有有效期(免费证书约90天),需定期续期,可配置自动化提醒;
  3. 防盗链配置要准确写清资源后缀,避免拦截合法请求;
  4. 限流参数需根据服务器性能、业务流量调整,避免过度限制正常访问;
  5. GZIP压缩等级不宜过高(推荐2-6),平衡压缩效果和CPU消耗。

九、Nginx可视化配置生成器

网址https://www.newkit.site/tools/nginx-config-builder/

新手 / 快速配置,用在线可视化生成器(NginxConfig),无需写代码,填参数即生成;

其余:

工具名称 核心功能 适用场景 访问地址
NginxConfig 支持SSL、反向代理、压缩、限流、防盗链等全场景,生成的配置符合最佳实践 生产环境/通用场景 https://nginxconfig.io/
DigitalOcean Nginx Config Generator 专注反向代理、静态站点、PHP、SSL配置,简洁易上手 基础场景/新手 https://www.digitalocean.com/community/tools/nginx
菜鸟工具 Nginx 配置生成 中文界面,支持防盗链、GZIP、反向代理,适配国内场景 国内站点/快速配置 https://c.runoob.com/front-end/593/

八、总结

本文覆盖的SSL部署、防盗链、GZIP压缩、反向代理、限流、请求合并,是Nginx最核心的进阶配置。实际使用时无需死记参数,核心是:

  1. 安全层面:靠SSL+防盗链保障数据和资源安全;
  2. 性能层面:靠GZIP+请求合并减少传输体积和请求次数;
  3. 稳定性层面:靠反向代理+限流避免服务崩溃;
    根据服务器性能、业务规模调整参数,就能让Nginx发挥最大价值。

文章结束,喜欢就给个一键三连吧,你的肯定是我最大的动力,点赞上一千我就是脑瘫也出下章

相关推荐
岁岁种桃花儿4 小时前
深入理解 Keepalive:从协议到 Nginx 实战(全场景解析)
运维·nginx
康小庄4 小时前
通过NGINX实现将小程序HTTPS请求转为内部HTTP请求
java·spring boot·nginx·spring·http·小程序
牵牛老人4 小时前
Qt后端开发遇到跨域问题终极解决方案 与 Nginx反向代理全解析
qt·nginx·状态模式
2401_865854884 小时前
ssl证书有什么区别
网络·网络协议·ssl
小目标一个亿16 小时前
Windows平台Nginx配置web账号密码验证
linux·前端·nginx
db_cy_206221 小时前
Docker+Kubernetes企业级容器化部署解决方案(阶段一)
docker·容器·kubernetes·云计算·负载均衡·运维开发
养乐多q.♡1 天前
docker镜像的nginx配置证书SSL,单独配置单个localtion使用证书,其他nginx配置不影响
nginx·docker·ssl
Java水解1 天前
Nginx 配置文件完全指南
后端·nginx
firstacui1 天前
Keepalived+nginx+tomcat
nginx·tomcat·firefox