Работник службы Angular: ресурс сценария находится за редиректом, что запрещено - PullRequest
0 голосов
/ 27 мая 2019

Мой веб-сайт работал на https://jobs.af,, через четыре месяца мы добавили www -> https://www.jobs.af.

Единственное, о чем мы не думали, так это о том, что работники сферы обслуживания не очень хорошо относятся к перенаправлениям

На что мы не обратили внимание, так это на то, что работники сферы обслуживания плохо играют с перенаправлениями

Пользователь будет переходить на https://www.jobs.af, и NGINX будет отправлять им перенаправление 301 для каждого ресурса, на который будет отправлен запрос.

Это отлично работало для новых пользователей, но пользователи, которые уже посетили сайт, столкнутся с некоторыми проблемами.

Служащие обновляются автоматически, если доступна новая версия. В нашем случае он попытался получить новую версию на https://www.jobs.af/ngsw-worker.js,, которая перенаправляет на https://jobs.af/ngsw-worker.js., поэтому работник службы попытался бы обновить себя от нового работника службы за перенаправлением, которое вызвало следующую ошибку:

enter image description here

Мой код:

app.browser.module.ts

@NgModule({
  imports: [
    BrowserModule.withServerTransition({ appId: "app-root" }),
     .
     .
     .
    ServiceWorkerModule.register("./ngsw-worker.js", {
      enabled: environment.production
    })
  ],
  bootstrap: [AppComponent]
})
export class AppBrowserModule {}

main.ts

document.addEventListener("DOMContentLoaded", () => {
  platformBrowserDynamic()
    .bootstrapModule(AppBrowserModule)
    .then(() => {
      if ("serviceWorker" in navigator && environment.production) {
        navigator.serviceWorker.register("./ngsw-worker.js");
      }
    })
    .catch(err => console.log(err, "error"));
});

manifest.json

{
...
  "scope": "/",
  "start_url": "/"
}

default.conf

upstream website {
   ip_hash;
   server backend1:3000;
   server backend2:3000;
   server backend3:3000;
   server backend4:3000;
}

server {
    listen 80;
    server_name www.jobs.af jobs.af;
    return 301 https://$server_name$request_uri;
}

server {
    #Listen for HTTPS connections using http2;
    listen 443 ssl http2;

    server_name jobs.af www.jobs.af;

        if ($host = "jobs.af") {
           return 301 https://www.jobs.af$request_uri;
       }
    ssl_certificate      ****.pem;
    ssl_certificate_key  ****.key;
    keepalive_timeout    70;

    # Cache SSL handshakes
    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 5m;

    sl_ecdh_curve prime256v1;

    # SSL Protocols
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # Use gzip to save on bandwith 
    server_tokens off;  
    gzip on;
    gzip_comp_level    7;
    gzip_min_length    256;
    gzip_proxied       any;
    gzip_vary          on;
    client_max_body_size 10M;
    gzip_types
          application/atom+xml
          application/javascript
          application/json
          application/ld+json
          application/manifest+json
          application/rss+xml
          application/vnd.geo+json
          application/vnd.ms-fontobject
          application/x-font-ttf
          application/x-web-app-manifest+json
          application/xhtml+xml
          application/xml
          font/opentype
          image/bmp
          image/svg+xml
          image/x-icon
          text/cache-manifest
          text/css
          text/plain
          text/vcard
      text/vnd.rim.location.xloc
          text/vtt
          text/x-component
          text/x-cross-domain-policy;

    location / {
           rewrite ^/(.*) /$1 break;
            proxy_pass http://website;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_redirect     off;
    }

    location /socket.io {
                proxy_pass http://website/socket.io;
                proxy_http_version 1.1;
                proxy_buffering off;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "Upgrade";
       }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...