use*_*521 14 seo cdn amazon-s3 amazon-cloudfront single-page-application
https://myapp.com -> https://abcdefgh34545.cloudfront.com -> https://myBucket.s3-eu-west-1.amazonaws.com/index.html我如何使用Prerender.io此堆栈的服务?我必须以某种方式检测WebSpider/WebRobot正在访问该页面并将其重定向到prerender.io ...
我设法通过不使用Prerender来创建AWS Lambda函数:
配置新原点(新lambda函数)和行为(map/user/*请求到此新原点).请确保对源使用"仅HTTPS"原始协议策略,因为API网关仅为HTTPS,此处重定向将导致主机名更改.
(如果您偶然使用了重定向,那么您将需要Invalidate"/*",因为某些CloudFront错误,配置更改将无济于事;我花了几个小时调试这个昨晚)
您可以使用Lambda @ Edge来配置CloudFront以将爬网程序HTTP请求直接发送到prerender.io。
基本思想是拥有查看器请求处理程序,该处理程序为应发送到prerender.io的请求设置自定义HTTP标头。例如,此Lambda @ Edge代码:
'use strict';
/* change the version number below whenever this code is modified */
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
const headers = request.headers;
const user_agent = headers['user-agent'];
const host = headers['host'];
if (user_agent && host) {
if (/baiduspider|Facebot|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator/.test(user_agent[0].value)) {
headers['x-prerender-token'] = [{ key: 'X-Prerender-Token', value: '${PrerenderToken}'}];
headers['x-prerender-host'] = [{ key: 'X-Prerender-Host', value: host[0].value}];
}
}
callback(null, request);
};
Run Code Online (Sandbox Code Playgroud)
必须将cloudfront分发配置为通过X-Prerender-Host和X-Prerender-Token标头传递。
最后,如果存在X-Prerender-Token,则原始请求处理程序将更改原始服务器:
'use strict';
/* change the version number below whenever this code is modified */
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
if (request.headers['x-prerender-token'] && request.headers['x-prerender-host']) {
request.origin = {
custom: {
domainName: 'service.prerender.io',
port: 443,
protocol: 'https',
readTimeout: 20,
keepaliveTimeout: 5,
customHeaders: {},
sslProtocols: ['TLSv1', 'TLSv1.1'],
path: '/https%3A%2F%2F' + request.headers['x-prerender-host'][0].value
}
};
}
callback(null, request);
};
Run Code Online (Sandbox Code Playgroud)
在以下位置有一个完整的示例:https : //github.com/jinty/prerender-cloudfront
很难将 Prerender.io 与静态 Amazon S3 站点一起使用。
你可以在 s3 前面建立一个 nginx/apache 服务器:https://myapp.com-> https://mynginx-server.com->https://myBucket.s3-eu-west-1.amazonaws.com/index.html
该解决方案不太理想,因为您失去了云前端的最近位置优势。
这是一篇关于自定义解决方案的好文章:http ://www.dave.cx/post/23/prerendering-angular-s3/
David 能够生成静态 HTML 并将其保存在 S3 中,然后使用 CloudFlare 检测 URL 中的 _escaped_fragment_ 并将其重定向到 S3 上的静态 HTML。
| 归档时间: |
|
| 查看次数: |
7757 次 |
| 最近记录: |