You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache未将Googlebot等爬虫请求转发至自托管Prerender服务问题排查

解决Apache转发爬虫请求至Prerender服务失败的问题

问题根源分析

你的Prerender服务需要接收完整的目标URL(如http://localhost:3000/https://bharatcalendars.in)才能正确渲染,但当前Apache配置的RewriteRule仅转发了路径部分,未带上完整的协议和域名,导致Prerender无法识别要渲染的页面。此外,请求头的设置逻辑存在优化空间,且需确保必要的Apache代理模块已启用。

修复步骤

1. 启用必要的Apache模块

确保以下模块已启用(未启用则执行对应命令):

  • 启用重写模块:
    a2enmod rewrite
    
  • 启用代理模块:
    a2enmod proxy
    
  • 启用HTTP代理模块:
    a2enmod proxy_http
    
  • 重启Apache使配置生效:
    systemctl restart apache2
    

2. 修改VirtualHost配置

调整重写规则,确保转发给Prerender的是完整URL,并优化请求头的设置逻辑:

<VirtualHost *:443>
    ServerAdmin admin@example.com
    ServerName bharatcalendars.in
    ServerAlias www.bharatcalendars.in
    DocumentRoot /var/www/html/bharatcalendars

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/bharatcalendars.in/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/bharatcalendars.in/privkey.pem
    SSLProtocol all -SSLv2 -SSLv3
    SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
    SSLHonorCipherOrder on

    <Directory /var/www/html/bharatcalendars>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    RewriteEngine On

    # 爬虫请求转发至Prerender
    RewriteCond %{REQUEST_METHOD} =GET
    RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|yahoo|baiduspider|yandex|facebookexternalhit|twitterbot|linkedinbot|slackbot|whatsapp|applebot|pinterest) [NC]
    RewriteCond %{REQUEST_URI} !\.(js|css|png|jpg|jpeg|gif|ico|svg|json|xml|woff|woff2|ttf|eot)$ [NC]
    # 转发完整URL至Prerender,设置环境变量标记爬虫请求
    RewriteRule ^(.*)$ http://localhost:3000/https://%{HTTP_HOST}$1 [P,L,QSA,E=PRERENDER:1]
    # 仅对爬虫请求设置Prerender Token头
    RequestHeader set X-Prerender-Token "YOUR_TOKEN_HERE" env=PRERENDER

    # 处理React SPA路由(非爬虫请求时返回index.html)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.html [L]

    ErrorLog ${APACHE_LOG_DIR}/bharatcalendars_error.log
    CustomLog ${APACHE_LOG_DIR}/bharatcalendars_access.log combined
</VirtualHost>

3. 验证修复效果

执行以下命令测试爬虫请求是否被正确转发:

curl -A "Googlebot" https://bharatcalendars.in

此时应返回Prerender预渲染的完整HTML内容,而非React SPA的外壳。

关键调整说明

  • 完整URL转发:RewriteRule中使用https://%{HTTP_HOST}$1拼接出完整目标URL,与你之前测试Prerender的格式完全一致。
  • 条件化请求头:通过env=PRERENDER仅对爬虫请求设置X-Prerender-Token头,避免不必要的头信息。
  • SPA路由处理:添加了React SPA的路由 fallback 规则,确保非爬虫请求仍能正常访问SPA页面。

内容的提问来源于stack exchange,提问作者Neepun Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:00:08