Skip to content

Hotfix: redirectul /index.html hrănea rendererul cu propria ieșire

Vitalie requested to merge 46_hotfix-shell-loop into main

Hotfix. Producția servește acum documente care cresc necontrolat.

Ce se întâmplă

Rendererul construiește fiecare pagină pornind de la învelișul pe care îl cere de la frontend peste rețeaua compose, iar adresa pe care o cere este chiar /index.html (getShell din backend/src/services/app-shell.ts, cu FRONTEND_ORIGIN care are ca implicit chiar serviciul de frontend). Redirectul /index.html/ adăugat prin !45 (merged) trimite acea cerere la /, adică la pagina deja randată — deci fiecare randare se împachetează în cea dinainte.

Măsurat pe producție, la mai puțin de o oră după deploy:

$ curl -s https://hyperice.md/ | wc -c
145643
$ curl -s https://hyperice.md/ | grep -c "<noscript>"
15

Două cereri consecutive au dat 145.643 de octeți și 4.006 octeți cu cincisprezece blocuri <noscript> imbricate. Creșterea urmează cache-ul de 60 s al învelișului: aproximativ un exemplar pe minut.

Ce face acest MR

Scoate blocul location = /index.html. Restul din !45 (merged) rămâne neatins: X-Robots-Tag pe /admin, antetele de cache pentru fonturi, imagini și robots.txt, ^~ pe /uploads/ și /assets/.

De ce revenire și nu o gardă. Orice gardă trebuie să deosebească cererea rendererului de cea a unui vizitator, iar singurul lucru care le separă e antetul Host — a cărui valoare pe producție nu o pot vedea de aici. O adresă duplicată e un defect minor de indexare; o pagină de start care crește fără limită nu.

Verificat pe nginx 1.27 în container, cu fișierele montate

/index.html → 200 cu învelișul; / → 200; /admin → 200 cu X-Robots-Tag: noindex, nofollow; adresă inexistentă → 404; fonturi → max-age=31536000, immutable; imagini → max-age=86400; robots.txtmax-age=3600; /uploads/ → tot proxy.

#26 (closed) se redeschide pentru partea de /index.html. Reparația corectă cere ca rendererul să ceară învelișul pe o adresă care nu e redirectată — se face separat, după ce știu ce valoare are FRONTEND_ORIGIN pe producție.

Merge request reports