TONY 发表于 2026-08-20 23:04:46

老站长掏心窝:踩坑踩出来的实用nginx配置经验

我刚做独立站那会,为了调通nginx配置熬了三个通宵。改一次崩一次。差点把阿里云服务器给reset了泄愤。
最容易翻车的基础配置:反向代理与跨域


现在好多人用nginx做反向代理套后端,不管是node服务还是php,都离不开这个配置。十个人里面有八个踩过斜杠的坑,我就是第一个。当年抄了网上一份配置,所有接口全404,我从后端查到数据库,折腾俩小时才发现,就差一个斜杠。


proxy_pass结尾带不带斜杠,完全是两种转发逻辑。举个例子:你配的是 location /api/ { proxy_pass http://127.0.0.1:8080/; } ,访问 /api/user 的时候,会转发成 http://127.0.0.1:8080/user 。要是你proxy_pass末尾没加那个斜杠,转发地址就成了 http://127.0.0.1:8080/api/user 。就这一个字符,能让你怀疑人生。


跨域问题,网上一堆花里胡哨的配置,其实核心就三个header:Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers。要是碰到OPTIONS请求直接403,记得加一句判断:if ($request_method = OPTIONS) { return 204; },一下子就好。


https://obgeo.oss-cn-beijing.aliyuncs.com/pvc-articles/ecf53676-ec49-442f-9d34-7311184917d2.jpg

nginx反向代理斜杠差异对比图


说实话,反向代理真没那么复杂,搞懂斜杠规则,剩下的都是套,别乱加没用的参数就行。


给网站提权加速必调的静态资源配置


做SEO的都懂,网站打开速度差个0.5秒,排名就能掉出首页。nginx天生就是吃静态资源这碗饭的,好多人偏不调默认配置,白白丢了排名分数。我之前帮一个电商站查排名上不去的原因,打开一看,gzip都没开,一个100多k的css硬生生传了三秒。醉了。


现在主流用brotli压缩,比gzip压缩率高20%左右,同大小的文件能小一圈,加载速度直接提上来。不过要注意,一定要确认你的nginx编译的时候带了ngx_brotli模块,不然配置写了也白写,不生效还找不到原因,白折腾大半天。


带哈希戳的静态资源,直接开一年缓存。比如你的文件名是 style.abc123.css ,内容改了哈希会变,根本不怕缓存旧内容,让浏览器存在本地,下次打开直接读,多香。但记住,html文件千万别开长期缓存!我之前有个客户,听了网上瞎扯,把index.html也缓存了一年,更新了大促活动页,半个月老用户看到的还是旧活动,亏了好几万销售额,哭着找我改配置。这事我能笑十年。


https://obgeo.oss-cn-beijing.aliyuncs.com/pvc-articles/65a61f87-4d41-4155-96f3-e2c2303dccc2.jpg

nginx静态资源缓存配置示例图


还有两个小开关一定要开:sendfile on; tcp_nopush on; 这俩开了之后,静态文件的传输效率能提一大截,尤其是大图片大文件,区别真的能感觉到。别嫌麻烦,就两行,加上不亏。


做站必须加的安全防爬配置


https://obgeo.oss-cn-beijing.aliyuncs.com/pvc-articles/3fae1f84-3476-4b47-86fa-fcb05306cf71.jpg

做站必须加的安全防爬配置


干站长这行,每天都有爬虫爬你,有正经的搜索引擎爬虫,也有偷内容的恶意爬虫,还有扫漏洞的脚本。不做配置,带宽能给你跑爆,原创内容还分分钟被人抄走抢排名。


首先,隐藏nginx版本号,就一行:server_tokens off; 默认是开的,你不关,别人一探就知道你是什么版本的nginx,有旧漏洞直接就扫进来了,关了啥都看不到,安全很多。


然后限流,恶意爬虫一天能爬你几万页,直接限制单个IP的请求频率就行。配置也简单,先在http块加一行 limit_req_zone $binary_remote_addr zone=allips:10m rate=10r/s; 然后在server块加 limit_req zone=allips burst=5 nodelay; 单个IP每秒最多10个请求,正常用户点网页刷文章根本碰不到上限,爬虫直接给你干蒙,大部分劣质爬虫爬几下就走了,根本造不成浪费。


还有盗链,你辛辛苦苦找的图、做的图,别人直接引用放在自己站上,花你的流量赚他的钱,忍得了?加个referer判断就行:valid_referers none blocked *.你的域名.com;if ($invalid_referer) { return 403; } 不是你的域名过来的引用,直接403,一分带宽都不给他嫖,舒服得很。


https配置也说一句,现在早就不用TLS1.0和1.1了,ssl_protocols 只留TLS1.2 TLS1.3; 老协议不仅慢,还不安全,删掉就对了,现在搜索引擎还会给你排名加分。


说实话,nginx配置说难不难,说容易也不容易,核心就是多试,改完测完再reload。我现在改完配置,第一件事就是打nginx -t,当年全站崩十分钟的教训,已经刻进DNA里了。
不过话说回来,别堆一堆没用的配置,适合自己站的才是最好的。你一个几百ip的小博客,没必要搞每秒1请求的限流,把正常访客挡在外面就得不偿失了。对吧。

rhysilin 发表于 2026-08-20 23:08:36

看了这么多帖子,还是觉得你这篇最实在,条理清晰又容易理解。

yanya7 发表于 2026-08-21 09:38:05

看完之后深有感触,有些话真的说到心坎里了,很有共鸣。

我也是醉了86 发表于 2026-08-21 12:29:15

支持理性讨论,反对无脑争吵,楼主带了个很好的头。

u57itiuy 发表于 2026-08-22 03:34:59

内容全面又细致,几乎把相关问题都覆盖到了,非常用心。

酒窝含笑丶 发表于 2026-08-22 05:37:08

很多点我之前都没想到,楼主一提醒才恍然大悟,收获很大。

turned 发表于 2026-08-23 04:04:57

感谢楼主愿意花时间分享,让我们这些后来者能少踩很多坑。

洗涮涮 发表于 2026-08-23 05:00:11

不管是内容还是排版都很用心,看得出来楼主花了不少时间,必须支持。

bhccn 发表于 2026-08-23 05:21:29

虽然有些地方不太懂,但整体看完还是收获很多,慢慢消化一下。

a937666 发表于 2026-08-23 06:31:52

讲得很透彻,把复杂的问题简单化,理解起来轻松了很多。

zhangqingyuan 发表于 2026-08-23 06:49:40

非常有建设性的意见,对解决实际问题有很大的参考意义。

csyp2017 发表于 2026-08-23 10:09:30

思路很清晰,步骤也很详细,跟着操作应该不会出什么问题。

知宠网 发表于 2026-08-24 03:55:47

已经推荐给朋友来看了,好东西就应该一起分享一起学习。

韶华不为少年留 发表于 2026-08-24 05:34:55

内容写得很详细,逻辑也很清晰,对新手来说非常友好,支持一下楼主。

见年进口 发表于 2026-08-24 06:08:07

楼主态度很认真,回复也很耐心,这样的楼主值得大家支持。

悄然离去/rose 发表于 2026-08-25 05:07:05

感谢楼主无私分享经验,少走了很多弯路,对我们帮助特别大。

huihuilai 发表于 2026-08-26 11:46:32

这样用心的帖子不多见,必须顶上去让更多人看到优质内容。

3065236092@qq 发表于 2026-08-28 00:17:34

对新手特别友好,解释得很细致,就算零基础也能看懂大半。

奶瓶 发表于 2026-08-31 00:50:05

逻辑严谨,条理分明,一看就是经过认真思考和整理的内容。
页: [1]
查看完整版本: 老站长掏心窝:踩坑踩出来的实用nginx配置经验