Kaip teisingai nukreipti HTTP į HTTPS

Turėti sertifikatą — tik pusė darbo; taip pat reikia užtikrinti, kad niekas neliktų nesaugioje http:// jūsų puslapių versijoje. Teisingas nukreipimas kiekvieną lankytoją vieną kartą nusiunčia į HTTPS, išsaugo jūsų paieškos reitingus ir išvengia ciklų, dėl kurių svetainė nukrenta.

Trumpai

Naudokite nuolatinį 301 nukreipimą (ne laikiną 302) iš HTTP į tikslų HTTPS URL, išsaugodami kelią ir užklausos eilutę. Darykite tai serverio lygiu, saugokitės nukreipimo ciklų už tarpinių serverių bei CDN, tada pridėkite HSTS, kad būsimais apsilankymais naršyklės visai praleistų nesaugią užklausą.

301 ar 302: naudokite nuolatinį

Pasirinktas būsenos kodas svarbus. 301 Moved Permanently praneša naršyklėms ir paieškos sistemoms, kad HTTPS URL yra kanoninis, nuolatinis puslapio adresas. Paieškos sistemos perkelia reitingo signalus į HTTPS versiją, o naršyklės nukreipimą kešuoja, todėl pakartotiniai lankytojai patenka tiesiai į HTTPS.

302 Found signalizuoja laikiną perkėlimą. Paieškos sistemos gali toliau indeksuoti HTTP URL, o naršyklės nukreipimo taip pat nekešuos. Priverstiniam HTTPS — nuolatiniam sprendimui — 302 yra netinkamas įrankis. Visada naudokite 301.

Apache (.htaccess)

Apache arba LiteSpeed nukreipkite .htaccess faile su mod_rewrite. Tai išsaugo pagrindinį serverį (host), kelią ir užklausos eilutę:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Jei jūsų svetainė yra už apkrovos balansuotojo ar CDN, kuris nutraukia TLS, kintamasis %{HTTPS} gali visada rodyti off, nes ryšys su jūsų kilmės serveriu iš tiesų yra grynas HTTP. Tokiu atveju vietoj to tikrinkite persiųstą antraštę:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Nginx

Nginx naudokite atskirą serverio bloką 80 prievadui, kuris grąžina 301. Tai švariau ir greičiau nei perrašymas:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Už tarpinio serverio nukreipkite pagal persiųstą protokolą, o ne darydami prielaidą apie prievadą:

if ($http_x_forwarded_proto = "http") {
    return 301 https://$host$request_uri;
}

Kaip išvengti nukreipimo ciklų

Nukreipimo ciklas įvyksta, kai serveris vis siunčia naršyklę atgal į URL, kuris vėl nukreipia — naršyklė pasiduoda su klaida, pvz., ERR_TOO_MANY_REDIRECTS. Įprasta priežastis — CDN ar apkrovos balansuotojas, nutraukiantis HTTPS ir persiunčiantis gryną HTTP į jūsų kilmės serverį, kuris tada „paslaugiai“ amžinai nukreipia į HTTPS.

Stebėkite persiųstą protokolą. Kai kažkas priešais jūsų serverį tvarko TLS, netikrinkite %{HTTPS} ar klausomo prievado — tikrinkite X-Forwarded-Proto. Taip pat nustatykite savo CDN SSL režimą į „Full“, kad kraštas su jūsų kilmės serveriu kalbėtų HTTPS, o ne grynu HTTP, kuris yra dažniausias ciklo sukėlėjas.

Kita subtili priežastis — nukreipimas dviejose vietose vienu metu, pavyzdžiui, kai ir jūsų programa, ir žiniatinklio serveris priverčia HTTPS su šiek tiek skirtingomis taisyklėmis. Nukreipimą laikykite lygiai vienoje vietoje.

Nukreipkite kartą, ne du

Nukreipimų grandinė — iš http:// į https://, tada iš www į ne-www kaip atskiras šuolis — prideda vėlavimą ir skiedžia SEO signalus. Kur galite, apjunkite pagrindinio serverio ir protokolo kanonizavimą, kad lankytojas galutinį HTTPS URL pasiektų vienu 301.

Suporuokite su HSTS

Nukreipimas vis tiek leidžia pačiai pirmajai užklausai išeiti nesaugiu HTTP, kur ją galima perimti. HTTP Strict Transport Security užpildo šią spragą: kai naršyklė kartą pamato antraštę, ji pati perrašo http:// į https:// prieš ką nors siųsdama.

Strict-Transport-Security: max-age=31536000; includeSubDomains

HSTS pridėkite tik įsitikinę, kad jūsų HTTPS nukreipimas veikia visuose subdomenuose, ir pradėkite nuo trumpo max-age. Prieš pridedant preload, perskaitykite pilną HSTS vadovą, o kartu peržiūrėkite ir kitas saugumo antraštes.

Patikrinkite, ar suveikė

Įdiegę pareikalaukite http:// URL ir įsitikinkite, kad gaunate vieną 301 į atitinkamą https:// adresą su nepakeistu keliu. Atlikite patikrą arba naudokite mūsų greičio testą, kad patikrintumėte atsako antraštes ir įsitikintumėte, jog neliko jokio ciklo ar mišraus turinio.

Dažniausiai užduodami klausimai

Ar HTTPS naudoti 301, ar 302 nukreipimą?

Naudokite 301. Priverstinis HTTPS yra nuolatinis, todėl 301 perduoda reitingo signalus HTTPS URL ir leidžia naršyklėms kešuoti nukreipimą. 302 skirtas laikiniems perkėlimams.

Kodėl mano svetainė rodo „per daug nukreipimų“?

Paprastai tarpinis serveris ar CDN nutraukia HTTPS ir persiunčia gryną HTTP į jūsų kilmės serverį, kuris cikle nukreipia atgal į HTTPS. Patikrinkite X-Forwarded-Proto ir nustatykite CDN SSL režimą į Full.

Ar man vis dar reikia nukreipimo, jei turiu HSTS?

Taip. HSTS taikomas tik po to, kai naršyklė kartą pamato antraštę. Nukreipimas apima tą pirmąjį apsilankymą ir bet kurį klientą, kuris politikos dar neišsaugojo.

Susiję vadovai

Patikrinkite savo svetainę pagal šį vadovą

Atlikite nemokamą ScanOpsPro patikrą ir pažiūrėkite, kaip jūsų svetainė tvarkosi su pagrindais.

Atlikti nemokamą patikrą