Мой веб-сайт работал на 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., поэтому работник службы попытался бы обновить себя от нового работника службы за перенаправлением, которое вызвало следующую ошибку:
Мой код:
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";
}
}