EC2 Nginx配置 - 在Prerender之后返回原始URL

问题描述 投票:0回答:1

我发现的所有教程都暗示了在EC2中运行的Node服务器。在节点上,Prerender Server正在运行。 Nginx x配置为接受索引机器人调用并运行Prerender并返回预渲染页面。一个例子here

但是,所有教程都假设SPA在同一个Node实例中运行,而Nginx则返回到本地SPA(index.html)。我正在将我的prerender服务构建为SaaS。我的SPA在Heroku中,我的预呈现服务在EC2中运行。我真的不太了解Nginx的语法和逻辑,我是一个Javascript开发人员,我正在寻找一些帮助,以便从Nginx返回到我的SPA(预呈现的URL)而不是本地index.html。

通用的Nginx配置如下:

server {
listen 80;
server_name *.example.com;

root   /home/prerender;
index  index.html;

location / {
    try_files $uri @prerender;
}

location @prerender {
    set $prerender 0;
    if ($http_user_agent ~* "googlebot|bingbot|yandex|baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator") {
        set $prerender 1;
    }
    if ($args ~ "_escaped_fragment_") {
        set $prerender 1;
    }
    if ($http_user_agent ~ "Prerender") {
        set $prerender 0;
    }
    if ($uri ~* "\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent|ttf|woff|svg|eot)") {
        set $prerender 0;
    }

    #resolve using Google's DNS server to force DNS resolution and prevent caching of IPs
    resolver 8.8.8.8;

    if ($prerender = 1) {

        #setting prerender as a variable forces DNS resolution since nginx caches IPs and doesnt play well with load balancing
        set $prerender "127.0.0.1:3000";
        rewrite .* /$scheme://$host$request_uri? break;
        proxy_pass http://$prerender;
    }
    if ($prerender = 0) {
        rewrite .* /index.html break; // HERE I WANT TO SEND BACK TO MY PRERENDERED URL INSTEAD OF INDEX.HTML
    }
}

}

我的$ request_uri是呈现的url,前面是“/”之类的

/ https://example.com/some_page

我觉得我需要做一个重写或其他东西并摆脱第一个“/”虽然我真的不理解重写,重定向,返回的概念。我重写文档,但我可能会错过Nginx文化,以了解我真正需要做的事情。

因此,如果您有使用Nginx,SaaS和Prerender的经验,我很乐意听取您关于回到我的SPA的正确方法的信息。

非常感谢。

nginx saas prerender
1个回答
0
投票

您只想将其更改为Prerender服务器的URL:

set $prerender "127.0.0.1:3000";

其余的看起来不错。配置将检测像Googlebot这样的爬虫,并将请求代理到Prerender服务器,以便爬虫将接收HTML而不是javascript。

普通用户的任何请求都将收到您正常的javascript页面。如果您有任何疑问,请随时发送电子邮件至[email protected]

© www.soinside.com 2019 - 2024. All rights reserved.