微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – 节点Prerender处理首页加载 – 后续加载500错误

您可以验证是否是这种情况.单击链接,让它加载,然后刷新: http://www.justinmcmahon.com/?_escaped_fragment_=

可能很重要:我的应用程序在端口3000上的docker容器中运行,prerender服务器(在端口9000上)也运行,两者都在官方Nginx docker镜像后面运行.

也许意义重大:顶级域名的.htaccess重定向到www子域名,指向AWS弹性IP.我还不是很聪明,所以这是迄今为止我想出的最佳方式,指出正确的方向.

.htaccess重定向

RewriteEngine on 
RewriteRule ^(.*)$http://www.justinmcmahon.com/$1 [R=301,L]

Nginx docker-compose.yml:

Nginx:

 build: .
 container_name: Nginx
 hostname: Nginx
 restart: always

 environment:
   - DEFAULT_HOST=www.justinmcmahon.com

 volumes:
   - /var/run/docker.sock:/tmp/docker.sock:ro

 ports:
   - 80:80
   - 443:443
   - 5984:5984

Prerender Dockerfile

FROM node:5.2.0
ENV NPM_CONfig_PRODUCTION=true
ENV NODE_ENV=production
copY dist /app
workdir /app
RUN npm install
EXPOSE 9000
CMD ["node","server"]

我在Express配置的顶部有以下内容

app.use(require('prerender-node').set('prerenderServiceUrl',config.PRERENDER_SERVICE_URL));

prerender容器的Docker日志显示304状态,但Express正在抛出500

解决方法

我找到了一个似乎可以解决问题的解决方案,但我不喜欢它,因为我不确定它可能会产生什么样的意外后果.

在/server.js中,我将PRERENDER_NUM_WORKERS和PRERENDER_NUM_IteraTIONS认为1并取消注释inMemoryHtmlCache()

#!/usr/bin/env node
var prerender = require('./lib');

var server = prerender({
    workers: process.env.PRERENDER_NUM_WORKERS || 1,iterations: process.env.PRERENDER_NUM_IteraTIONS || 1
});


server.use(prerender.sendPrerenderHeader());
// server.use(prerender.basicAuth());
// server.use(prerender.whitelist());
server.use(prerender.blacklist());
// server.use(prerender.logger());
server.use(prerender.removeScriptTags());
server.use(prerender.httpHeaders());
server.use(prerender.inMemoryHtmlCache());
// server.use(prerender.s3HtmlCache());

server.start();

我愿意接受更好的答案,或者至少保证这是一个可以接受的解决方案,也许可以解释为什么.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐