做了15年建站,什么坑没踩过?
今天必须得吐槽一下这个反向代理。
很多兄弟一上来就搞CDN或者Nginx反向代理。
美其名曰加速、安全。
结果呢?
网站做反向代理后样式加载错误,CSS全崩,图片裂开。
看着满屏的源码,心态真的崩。
我上周帮一个客户修这个问题,折腾了整整两天。
他用的WordPress,前端看着像被狗啃了一样。
其实问题核心就一个:路径解析错了。
咱们先说原理,别整那些虚的。
当你加了反向代理,请求进来,协议、域名、端口都变了。
但你的代码里,很多资源还是写的绝对路径。
比如 http://old-domain.com/css/style.css
代理服务器把域名换了,但浏览器请求的还是旧域名。
或者更惨的是,代理层把路径截断了。
这就导致样式表根本找不到,404报错一片。
我拿数据说话。
根据我经手的50多个案例,80%的样式错误是因为相对路径没写对。
剩下15%是HTTPS混合内容问题。
只有5%是真正的服务器配置Bug。
你看,大部分时候是你自己手贱。
具体怎么解决?
第一,检查资源引用。
别用绝对路径!
绝对路径!
绝对路径!
重要的事情说三遍。
改成相对路径,或者用变量定义基础路径。
比如WordPress里,用 {{ site_url }} 或者 {{ home_url }}。
这样不管域名怎么变,路径自动适配。
第二,检查Nginx配置。
很多新手在location块里加了 rewrite。
比如 rewrite ^/(.*)$ /index.php?q=$1 last;
这玩意儿会干扰静态资源。
你试试把静态资源的location单独拎出来。
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 30d;
add_header Cache-Control "public, immutable";
# 注意这里不要有 rewrite
}
第三,浏览器开发者工具看一眼。
F12,点Network。
看那些CSS文件的状态码。
如果是404,说明路径不对。
如果是403,说明权限不够。
如果是Mixed Content,说明HTTP和HTTPS混用。
这时候你得在代码里强制把HTTP改成HTTPS。
或者在Nginx里加个 redirect。
还有个坑,就是缓存。
有时候你改好了,刷新还是旧的。
这时候得清缓存。
浏览器缓存、CDN缓存、服务器缓存。
三层缓存清一遍,才能看到真效果。
我有个客户,改了代码死活不生效。
最后发现是Cloudflare的缓存没清。
他在那儿对着代码发呆,我说兄弟,去后台清一下缓存。
他一脸懵逼,说我不懂这个。
我说你懂建站,不懂CDN?
这就是经验差距。
再说说HTTPS的问题。
现在全站HTTPS是标配。
如果你反向代理后,后端还是HTTP。
浏览器会拦截混合内容。
样式表加载失败,页面就丑了。
解决办法很简单。
后端也上HTTPS,或者在代理层做SSL终止。
让代理层处理HTTPS,后端走HTTP。
这样既安全又简单。
当然,前提是后端别泄露敏感信息。
最后,总结一下。
网站做反向代理后样式加载错误,别急着骂娘。
先查路径,再查配置,最后查缓存。
按这个顺序排查,90%的问题都能解决。
如果你还搞不定,那可能是你基础不牢。
回去翻翻HTTP协议吧。
别总想着走捷径。
建站这事儿,急不得。
一步一个脚印,才能走得远。
希望这篇干货能帮到你。
要是还有问题,评论区见。
别私信我,私信不回,太忙了。
咱们下期见。