代码之家  ›  专栏  ›  技术社区  ›  Wolfdog

Nginx conf用于预渲染Angular SPA

  •  0
  • Wolfdog  · 技术社区  · 7 年前

    所以我有了Angular SPA应用程序的下一个配置:

    server {
            listen 80;
            server_name idj.rtech.rs;
            return 301 https://example.com$request_uri;
    }
    
    server {
    
            listen 443 ssl; # managed by Certbot
            ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
            ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
            include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
            ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
            root /var/www/example.com/dist;
    
            # Add index.php to the list if you are using PHP
            index index.html index.htm index.nginx-debian.html;
    
            server_name idj.rtech.rs;
    
            location / {
    
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri @prerender;
            }
    
            location @prerender {
            #proxy_set_header X-Prerender-Token YOUR_TOKEN;
    
            set $prerender 0;
            if ($http_user_agent ~* "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 "service.prerender.io";
                rewrite .* /$scheme://$host$request_uri? break;
                proxy_pass $prerender;
            }
            if ($prerender = 0) {
                rewrite .* /index.html break;
            }
        }
    }
    

    我应该也设置角度(除了动态更新标记),还是只为nginx配置?

    我还听说了rendertron,它更容易设置吗?nginx配置是什么?

    更新1:

    所以说: http://127.0.0.1:3010/https://example.com 正在返回prerendered页面(我在3010端口上托管prerender)

    https://example.com 正在返回静态角度。

    卷曲-一个“推特机器人” https://example.com 不返回任何内容。

    卷曲-一个“twitterbot”-v https://example.com 返回如下:

    < HTTP/1.1 400 Bad Request
    < Server: nginx/1.10.3 (Ubuntu)
    < Date: Wed, 19 Sep 2018 11:16:54 GMT
    < Content-Type: text/html;charset=UTF-8
    < Transfer-Encoding: chunked
    < Connection: keep-alive
    < Vary: Accept-Encoding
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Prerender.io    7 年前

    在您的例子中,try\u文件可能在运行@prerender之前测试$uri时返回索引页。你能试试下面的配置吗?我在prerender配置之后移动了try\u文件?

    server {
            listen 80;
            server_name idj.rtech.rs;
            return 301 https://example.com$request_uri;
    }
    
    server {
    
            listen 443 ssl; # managed by Certbot
            ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
            ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
            include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
            ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
            root /var/www/example.com/dist;
    
            # Add index.php to the list if you are using PHP
            index index.html index.htm index.nginx-debian.html;
    
            server_name idj.rtech.rs;
    
            location / {
    
                #proxy_set_header X-Prerender-Token YOUR_TOKEN;
    
                set $prerender 0;
                if ($http_user_agent ~* "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 "service.prerender.io";
                    rewrite .* /$scheme://$host$request_uri? break;
                    proxy_pass $prerender;
                }
    
                try_files $uri $uri/ =404;
            }
    }
    
    推荐文章