Uñakipañataki Thakhinaka (Seo) .

Principio

i18n.site mä arquitectura de una sola página jan refrescante ukaruw apnaqi sitemap.xml

Kunawsatix User-Agent ukax mantañ mayiwix thakhi thaqhirimp apnaqatäki ukhax mayiwix 302 tuqiw estático ukar kutt’ayatarakini.

Estático pankanakanx link ukampiw aka pankan kunayman arut versión ukar uñt’ayañax utji, sañäni :

<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">

Ukax nginx Ukan Utt’ayatawa

Mä uñacht’äwiw proyecto demostración ukan .i18n/htm/main.yml configuración archivo ukar apsuñani

host: i18n-demo.github.io
seo: true
out:
  - fs

pkg:
  i: i18n.site
  md: i18n.site

cdn:
  v:
  jsd:

Nayraqatax host: patat chimpunak mayjt’ayañaw dominio sutimaru, kunjamatix xxx.com .

Ukatxa, i18n.site -n , ukax out/main/htm directorio ukanw estático ukanx lurasi.

Chiqansa, yaqha wakicht’awi qillqatanakax ch’amanchatarakiwa, kunjamatix nayraqatax main ukan wakicht’awipar uñt’ayañax .i18n/htm/dist.package.json ukat .i18n/htm/dist.yml lurañataki.

Ukatxa i18n.site -n -c dist ukja t’ijt’aña ukhamata estático pankaxa out/dist/htm ukjaru puriñapataki.

nginx akham configuración ukar uñakipt’asaw utt’ayasispa.

map $http_user_agent $botLang {
  "~*baidu|yisou|sogou|360|byte" "/zh";
  "~*facebookexternalhit|slurp|bot|spider|curl" "/en";
  default "";
}

server {
  http2 on;
  listen 443 quic ;
  listen 443 ssl ;
  listen [::]:443 quic ;
  listen [::]:443 ssl ;

  add_header Alt-Svc 'h3=":443";ma=99999;persist=1';

  server_name doc.flashduty.com;

  ssl_certificate /root/.acme.sh/doc.flashduty.com_ecc/fullchain.cer;
  ssl_certificate_key /root/.acme.sh/doc.flashduty.com_ecc/doc.flashduty.com.key;

  root /mnt/doc.flashduty.com;

# Janiw servidor irnaqir scripts ukanakax sinti jaya pachanak caché ukar uñt’ayañakiti
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Yaqha estático yänakatakix juk’amp jaya pachanak caché ukar uñt’ayaña
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Kawkïr archivo estático ukas rastreador ukax nayrïr uñstawiparjam apnaqi uk utt’ayaña
  location = / {
    # $botLang
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Mä sapa panka apnaqawi wakicht’aña
  location / {
    if ($botLang) {
      return 302 $botLang$request_uri.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }
}

server {
  server_name doc.flashduty.com;
  listen      80;
  listen      [::]:80 ;
  location    / {
    rewrite ^(.+) https://$host$1 permanent;
  }
  location /.well-known/acme-challenge/ {
    root /mnt/doc.flashduty.com/;
  }
}

Objeto Imañ Wakicht’aña, Ukax Archivos Estáticos Ukanakar Apkatañataki

Archivos estáticos ukax local ukan lurasispawa, ukampis juk’amp uñt’at amtawix objeto almacenamiento ukar apkatañawa.

out configurado ukax :

out:
  - s3

Ukatxa, ~/.config/i18n.site.yml chiqañchaña ukat aka configuración ukar yapxataña :

site:
  i18n.site:
    s3:
      - endpoint: s3.eu-central-003.backblazeb2.com
        ak: # access key
        sk: # secret key
        bucket: # bucket name
        # region:

Configuración ukanxa, i18n.site ukarux host: in .i18n/htm/main.yml ukar mayjt’ayañamawa, walja yänak imañ utanakax s3 ukarjam wakicht’atäspawa, ukatx region chiqax munañjamawa (walja yänak imañ utanakax janiw uka chimpunak utt’ayañax wakiskiti).

Ukatxa i18n.site -n t’ijt’añani proyecto wasitat uñt’ayañataki.

~/.config/i18n.site.yml mayjt’ayata ukat wasitat apkatañ munsta ukhax aka kamachimpiw proyecto saphi directorio ukanx apkatañ caché q’umachañama :

rm -rf .i18n/data/seo .i18n/data/public

cloudflare Ukax Mä Configuración Ukaniwa

Dominio sutix uñt'ayatawa cloudflare

Jaqukipaña Kamachinaka

Uka jaqukipañ kamachinakax akham uñacht’ayatawa:

Kamachi chimpuxa akhamawa, "i18n.site" chimpuxa dominio sutimpi mayjt’ayatawa:

(http.host in {"i18n.site"}) and not (
substring(http.request.uri.path,-3) in {".js" ".gz"} or
substring(http.request.uri.path,-4) in {".htm" ".rss" ".css" ".svg" ".ico" ".png" ".xml" ".txt"} or
substring(http.request.uri.path,-5) in {".html" ".avif" ".json"} or
ends_with(http.request.uri.path,".webmanifest")
)

Caching Kamachinaka

Caché kamachinakax akhamawa:

(substring(http.request.uri.path,-4) in {".htm" ".rss"}) or ends_with(http.request.uri.path,"/sitemap.xml") or ends_with(http.request.uri.path,".xml.gz")

Kamachinak Mayjt’ayaña

Redirección kamachinakax akham uñt’ayatawa, ukax "i18n.site" uka chimpumpiw dominio sutimar mayjt’ayañama

(http.host in {"i18n.site"}) and not (
substring(http.request.uri.path,-3) in {".js" ".gz"} or
substring(http.request.uri.path,-4) in {".htm" ".rss" ".css" ".svg" ".ico" ".png" ".xml" ".txt"} or
substring(http.request.uri.path,-5) in {".html" ".avif" ".json"} or
ends_with(http.request.uri.path,".webmanifest")
) and (
http.user_agent wildcard "*bot*" or
http.user_agent wildcard "*spider*" or
http.user_agent wildcard "*facebookexternalhit*" or
http.user_agent wildcard "*slurp*" or
http.user_agent wildcard "curl*" or
http.user_agent wildcard "*InspectionTool*"
)

URL redirect Redirección dinámica ajlliñani, /en redirección thakhi concat("/en",http.request.uri.path,".htm") ukanxa mayjt’ayañawa, kuna arutï thakhinchirinakaxa munapki ukaru.

Baidu Intelligente Cloud Ukax Mä Configuración Ukaniwa

China continental uksar yanapt’añax wakisispa ukhax Baidu Smart Cloud ukampiw apnaqasispa.

Datos ukax Baidu Objeto Almacenamiento ukaruw apkatata ukatx Red de Distribución de Contenidos Baidu ukaruw chint’ata.

Ukatxa EdgeJS

const uri = r.uri, p = uri.lastIndexOf(".");
if (
  p < 0 ||
  !"|js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest|".includes(
    "|" + uri.slice(p + 1) + "|",
  )
) {
  const ua = r.headersIn["User-Agent"].toLowerCase()
  if (/facebookexternalhit|slurp|bot|spider|curl/.test(ua)) {
    r.return(
      302,
      (/baidu|yisou|sogou|360|byte/.test(ua) ? "/zh" : "/en") + r.uri + ".htm",
    )
  } else {
    r.uri = "/index.html"
  }
}

r.respHeader(() => {
  const t = [], out = r.headersOut;
  ["Content-MD5", "Age", "Expires", "Last-Modified"].forEach(
    i => delete out[i]
  )
  r.rawHeadersOut.forEach(i => {
    const key = i[0].toLowerCase()
    if (key.startsWith("x-") || key.startsWith("ohc-")) {
      delete out[key]
    }
  })
  out["Cache-Control"] = "max-age=" + 9e5
  // Jaskhiwi p’iqinchanakax mistuwinak askichañatakiw utt’ayasispa, kunjamatix out.XXX = 'MSG';
})

Debug ukxaru ch’iqt’aña, ukatxa taqpacha llikaru uñt’ayaña ch’iqt’aña.

Nayraru Apnaqawi: Resolución Regional Ukarjama Trafico Ukanaka Jaljaña

China continental uksan servicios ukanakamp churañ munsta ukat ukhamarak cloudflare tráfico internacional gratuito ukar munsta ukhax DNS resolución regional ukamp apnaqasma.

Amuyt’añataki cloudflare Huawei Cloud DNS

Walja trampas ukanakaw configuración cloudflare Akax mä qawqha puntos ukanakaw uñjasi :

Dominio Sutix Yaqha DNS Ukanw Uñt’ayasi, Kunjams cloudflare Apnaqañax

Nayraqatax mä arbitrariu dominio suti cloudflare ukar chint’aña, ukatx SSL/TLS → dominio costumbre sutimp apnaqañaw jach’a dominio sutimp aka dominio sutimp chikt’ayañataki.

cloudflare R2 Ukax Janiw Mä Costumbre Dominio Sutimpix Mantañjamäkiti

Kunatix lurat cloudflare ukan yänaka imañ R2 janiw mä dominio sutimp uñt’ayat ukar mantañapakiti, mä kimsïr yänak imañ utax archivos estáticos ukar uñstayañatakix apnaqañaw wakisi.

cloudflare backblaze.com

Mä cubo luraña backblaze.com , kuna qillqat apkataña, qillqat uñakipañataki ch’iqt’aña, ukatxa Friendly URL dominio suti apsuña, ukaxa f003.backblazeb2.com aka tuqina.

Dominio suti CNAME ukhat f003.backblazeb2.com ukar cloudflare ukar mayjt’ayaña ukat proxy ukar ch’amanchaña.

cloudflare de SSL → modalidad de encriptación ukar mayjt’ayaña, Full ukar uñt’ayaña

Jaqukipañ kamachi yapxataña kunjamatixa uñacht’ayata, nayraqataru uchaña (nayrïrixa juk’ampi jisk’a nayraru sartayaña):

Rewrite to dinámico ajlliñani ukatxa your_bucketname en concat("/file/your_bucketname",http.request.uri.path) ukaru cubo sutiparu mayjt’ayaña.

Ukhamaraki, cloudflare jaqukipañ kamachinx index.html file/your_bucketname/index.html ukar mayjt’ayatawa, ukatx yaqha configuración ukanakax pachpakiw qhipararaki.