节点预渲染工作在第一页加载 – 后续加载500错误

你可以validation这是事实。 点击链接,让它加载,然后刷新: http : //www.justinmcmahon.com/? _escaped_fragment_ =

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

也可能意义重大:顶级域名具有.htaccessredirect到www子域,它指向一个AWS弹性IP。 我现在还不是很聪明,所以这是我现在提出的最好的方法来指出正确的方向。

.htaccessredirect

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"] 

我在Expressconfiguration的顶部有以下内容:

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

预渲染容器的Docker日志显示一个304状态,但Express表示投掷一个500

我find了一个解决scheme,似乎解决了这个问题,但我不喜欢它,因为我不知道它可能会有什么意想不到的后果。

在/ /server.js我默认PRERENDER_NUM_WORKERSPRERENDER_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(); 

我有更好的答案,或者至less可以保证这是一个可以接受的解决scheme,也可以解释为什么。