LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Nginx 反向代理配置实战:让你的网站访问速度飞起来

admin
2026年4月13日 13:2 本文热度 67

经常搭建网站和部署服务器的都知道NGINX的反向代理这东西,配置好了能让你的博客网站访问速度提升不止一个档次。但是这个也不是所有人都了,比如我,我就不会弄,所以抱着学习的态度查找相关的资料,一起来聊聊怎么使用nginx的反向代码提升自己博客网站的速度。


为啥要用反向代理?

很多刚建站的朋友问我:自己的博客网站直接跑在服务器上不行吗?为啥非要整个 Nginx 反向代理啊?这么说吧,你让服务器直接对外服务,就像让一个厨子既炒菜又端盘子又收银——不是不行,但效率低啊。Nginx 就是那个专业的服务员,它专门处理静态资源、SSL 加密、请求分发这些活儿,让 ZBlog 专心写文章、处理动态内容,专业的事专业干,决定访问速度的还得是服务器的。我实测过,加上反向代理后,博客的首屏加载时间从 2.3 秒降到了 0.8 秒。这还是在没上 CDN 的情况下。所以可以尝试接入下,毕竟这么好的资源不用属实有些浪费了。

基础配置

先说最简单的场景,假如你有一台自己的物理服务器,ZBlog 跑在 8080 端口,为什么不是80端口,因为家用宽带不允许开放80端口,部分运营商8080都不允许,只能是非常用端口,当然专线和企业宽带除非哈,然后呢,你想让外面通过 80 端口访问怎么办?这时候就可以考虑使用nginx的反向代理。

server {
    listen 80;
    server_name itlaoli.com www.itlaoli.com;
    
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

就这几行,保存,nginx -t 测试一下,没问题就 nginx -s reload。完事。你看,你又着急,等等,这才哪到哪?毕竟这只是一道开胃菜,压轴的还在后面。

进阶配置

静态资源缓存

博客里的图片、CSS、JS 这些静态文件,没必要每次都让 ZBlog 处理。Nginx 可以直接缓存,下次访问直接返回。

location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
    proxy_pass http://127.0.0.1:8080;
    proxy_cache_valid 200 30d;
    proxy_cache_valid 404 1m;
    add_header X-Cache-Status $upstream_cache_status;
    
    # 浏览器缓存
    expires 30d;
    add_header Cache-Control "public, immutable";
}

这个配置做了两件事:

  1. Nginx 自己缓存 30 天
  2. 告诉浏览器也缓存 30 天

效果?一个 500KB 的图片,第一次访问要 200ms,后面 99 次都是 0ms(直接从浏览器缓存读),不走服务器了。

开启 Gzip 压缩

现在谁还不开个 Gzip?毕竟Brotli压缩都已经出来好久了,如果连Gzip都没启用有点说不过去了,像文本类资源压缩后能省 60-70% 的流量。

gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_types text/plain text/css text/xml text/javascript 
           application/javascript application/xml+rss 
           application/json;
gzip_comp_level 6;

注意 gzip_min_length 1024,小于 1KB 的文件别压缩了,压缩完可能更大,还浪费 CPU。

连接复用与超时优化

location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version1.1;
    proxy_set_header Connection "";
    
    # 超时设置
    proxy_connect_timeout60s;
    proxy_send_timeout60s;
    proxy_read_timeout60s;
    
    # 缓冲区
    proxy_buffer_size128k;
    proxy_buffers4256k;
    proxy_busy_buffers_size256k;
}

proxy_set_header Connection "" 这行很关键,它启用了 HTTP/1.1 的长连接,避免每次请求都重新握手。

安全配置

隐藏真实 IP 和端口

刚才的基础配置里已经有 proxy_set_header X-Real-IP $remote_addr,这样 ZBlog 拿到的就是真实访客 IP,不是 Nginx 的 127.0.0.1。但还要在 ZBlog 那边配置一下,让它信任这些 header。ZBlog 1.7 之后在 include/c_config.php 里加:

$_SERVER['HTTP_X_FORWARDED_FOR'] = $_SERVER['REMOTE_ADDR'];

限制请求频率

防止有人搞你,加个限流:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    
    server {
        location / {
            limit_req zone=one burst=20 nodelay;
            proxy_pass http://127.0.0.1:8080;
        }
    }
}

意思是:每个 IP 每秒最多 10 个请求,允许突发 20 个,超过的直接拒绝,根据博客网站的实际访问量去设置,不要照搬。

屏蔽恶意

有些扫描器、爬虫特别烦人,可以直接屏蔽:

if ($http_user_agent ~* (Scrapy|curl|wget|Python-urllib)) {
    return 403;
}

更多的爬虫可以百度,这是指举例几个。

实战案例

最后给你们看看我博客上实际用的配置(简化版):

server {
    listen80;
    listen [::]:80;
    server_name itlaoli.com www.itlaoli.com;
    
    # HTTP 强制跳转 HTTPS
    return301 https://$server_name$request_uri;
}

server {
    listen443 ssl http2;
    listen [::]:443 ssl http2;
    server_name itlaoli.com www.itlaoli.com;
    
    # SSL 证书
    ssl_certificate /etc/letsencrypt/live/itlaoli.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/itlaoli.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    
    # 静态资源缓存
    location~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_cache_valid20030d;
        expires30d;
        add_header Cache-Control "public, immutable";
    }
    
    # 动态请求
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version1.1;
        proxy_set_header Connection "";
        
        # 限流
        limit_req zone=one burst=20 nodelay;
    }
}

当然我博客还开启了Brotli压缩,之前博客写过相关教程《宝塔面板Nginx环境下部署Brotli压缩功能图文详解》,感兴趣的参考【阅读全文】

常见问题

Q:配置完 Nginx 报 502 Bad Gateway

A:99% 是网站项目内容配置出错,可以先恢复之前的配置再看,毕竟配置文件错了一个字符都不能正常使用,看看 PHP-FPM 在不在,不在就 systemctl start php-fpm

Q:图片显示不出来,全是叉

A:检查 proxy_set_header Host $host 这行有没有。ZBlog 网站博客生成图片 URL 时用 Host header,没有的话会生成错误的地址。


反向代理这东西,配置一次,受益很久。我这套配置跑了几年了,目前博客没出过任何大的问题,访问速度也一直稳定。如果在配饰CDN使用那简直就是锦上添花。


该文章在 2026/4/13 13:02:21 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-9  粤公网安备44030602007207号