识别百度、谷歌、搜狗、360、头条等搜索引擎 UA,Nginx 爬虫分流完整配置
|
admin
2026年7月2日 12:6
本文热度 108
|
方案说明
识别百度、谷歌、搜狗、360、头条等搜索引擎爬虫 UA,自动转发页面请求到 prerender 预渲染服务(默认本地 127.0.0.1:3000);普通用户正常访问前端静态资源。
适配 Vue/React 纯前端 SPA 打包在 Nginx 的场景。
完整 nginx server 块配置
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /data/www/your-web-dist;
index index.html;
set $is_crawler 0;
if ($http_user_agent ~* "Baiduspider|Googlebot|360Spider|SogouSpider|Bytespider|YandexBot|bingbot|DuckDuckBot|spider|bot|crawler|scraper") {
set $is_crawler 1;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|map)$ {
expires 7d;
try_files $uri =404;
}
location / {
try_files $uri $uri/ /index.html;
if ($is_crawler = 1) {
proxy_pass http://127.0.0.1:3000;
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_connect_timeout 10s;
proxy_read_timeout 10s;
break;
}
}
location ~ /(robots.txt|sitemap.xml)$ {
try_files $uri =404;
}
location = /index.html {
expires -1;
}
}
配套:Prerender 简易启动(Node.js)
const prerender = require('prerender');
const server = prerender({
chromeFlags: ['--no-sandbox', '--disable-gpu'],
waitAfterLastRequest: 3000,
maxRequestsPerPage: 100
});
server.start(3000);
console.log('Prerender 服务启动,端口3000');
npm install pm2 -g
pm2 start server.js --name prerender
pm2 startup && pm2 save
关键修改点(必须替换)
server_name yourdomain.com:改成你的网站域名
root /data/www/your-web-dist:前端打包 dist 目录真实路径
proxy_pass http://127.0.0.1:3000:如果预渲染部署在其他服务器,替换对应 IP 端口
HTTPS 站点适配补充
如果网站是 443 HTTPS,在 server listen 443 ssl 内部同样复制这套 $is_crawler 判断逻辑,proxy_set_header 保留 X-Forwarded-Proto $scheme 即可。
测试验证配置是否生效
1、模拟爬虫 UA 访问,看是否返回渲染完成的 HTML
curl -A "Baiduspider" https://yourdomain.com
输出内容能看到列表、文章等动态数据 = 分流成功
2、普通浏览器 UA 访问
curl -A "Mozilla/5.0" https://yourdomain.com
常见问题优化
预渲染超时报错
增大 proxy_read_timeout 10s,同时调高 prerender 内 waitAfterLastRequest 到 5000
服务器无 Chrome 沙箱权限
启动参数添加 --no-sandbox(配置已内置)
不想自建 prerender 服务
可替换 proxy_pass 为付费第三方预渲染地址(prerender.io),修改对应代理地址即可
该文章在 2026/7/2 12:06:47 编辑过