הגדרת הפניית HTTPS ו-HSTS: תצורת שרת
תארו לעצמכם: האתר שלכם פועל על HTTPS, אבל חלק מהקישורים מובילים ל-HTTP, והדפדפן חוסם את הטעינה. או שמנוע החיפוש מאנדקס את שתי הגרסאות, ומדלל את PageRank. הפנייה שגויה הורגת את ה-SEO ואת אמון המשתמשים. כל לקוח שאבד עקב תוכן מעורב עולה לעסק בממוצע 1000 דולר. המשימה שלנו היא להגדיר גרסת HTTPS אחידה עם HSTS כדי לחסל דליפות תנועה והתקפות הורדת דרגה. עם תצורה נכונה, תנועת ה-SEO יכולה לגדול עד 15%, וזמן הטעינה יכול לקטון ב-30% על ידי ביטול הפניות מיותרות. אנחנו עושים זאת כבר למעלה מ-10 שנים, והשלמנו למעלה מ-40 פרויקטים של מעבר ל-HTTPS.
למה הפנייה אחת לא מספיקה?
הפנייה מ-HTTP ל-HTTPS היא רק הצעד הראשון. ללא HSTS, הדפדפן לא זוכר את הדרישה, ולכן בביקור הבא הוא מבצע בקשת HTTP נוספת, שעלולה להיות פגיעה להתקפות man-in-the-middle. בנוסף, שרשרת של הפניות מרובות (לדוגמה, http → https://www → https:// ללא www) מגדילה את זמן הטעינה ב-1–2 שניות ומשפיעה לרעה על Core Web Vitals. בפועל, כל הפניה נוספת מוסיפה 50–100 אלפיות השנייה ל-TTFB. הסכימה האופטימלית: הפניית 301 אחת מ-HTTP ל-HTTPS (עם או בלי www) וכותרת HSTS מיידית.
בעיות שנפתרות על ידי הפנייה נכונה
- תוכן מעורב: כאשר דף HTTPS טוען סקריפטים או סגנונות דרך HTTP. הדפדפן חוסם אותם, וזה שובר את הפונקציונליות. אנו בודקים את כל המשאבים ומתקנים את הפרוטוקול.
- התקפות הורדת דרגה: תוקף מיירט את בקשת ה-HTTP ומחליף את התוכן. HSTS עם preload מבטל לחלוטין את הווקטור הזה.
- הפסדי SEO: אינדוקס כפול, הפניות שגויות, אובדן קישורים. אנו מגדירים כתובות URL קנוניות וקודי סטטוס נכונים.
איך אנחנו עושים את זה: מחסנית ותצורות
אנו משתמשים במחסניות מוכחות: Nginx + Laravel, Apache + WordPress, Cloudflare. הנה התצורות לכל מקרה.
Nginx: הפניית HTTP → HTTPS
# Редирект всего HTTP-трафика
server {
listen 80;
listen [::]:80;
server_name example.ru www.example.ru;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://example.ru$request_uri;
}
}
# Редирект www → non-www (или наоборот) + HTTPS
server {
listen 443 ssl;
server_name www.example.ru;
ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
return 301 https://example.ru$request_uri;
}
# Основной сервер
server {
listen 443 ssl http2;
server_name example.ru;
# ...
}הוסיפו HSTS לשרת הראשי:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; Laravel: אכיפת HTTPS באפליקציה
// AppServiceProvider + bootstrap/app.php
public function boot(): void
{
if (app()->environment('production')) {
URL::forceScheme('https');
}
}
->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(
headers: Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO,
proxies: '*'
);
})ללא # Редирект всего HTTP-трафика server { listen 80; listen [::]:80; server_name example.ru www.example.ru; location /.well-known/acme-challenge/ { root /var/www/certbot; } location / { return 301 https://example.ru$request_uri; } } # Редирект www → non-www (или наоборот) + HTTPS server { listen 443 ssl; server_name www.example.ru; ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem; return 301 https://example.ru$request_uri; } # Основной сервер server { listen 443 ssl http2; server_name example.ru; # ... } , Laravel לא רואה שהבקשה הגיעה דרך HTTPS (Nginx → PHP דרך HTTP) ומייצר קישורי HTTP. זו טעות נפוצה שיכולה לעלות בשבועות של אינדוקס.
Apache: .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Cloudflare
בפאנל Cloudflare: SSL/TLS → Edge Certificates:
- Always Use HTTPS → הפעל
- HSTS → הפעל, max-age 12 חודשים
אימות הפנייה נכונה
השתמשו ב-curl עם הדגלים -I ו--IL:
curl -I https://example.ru | grep -i strict curl -IL http://www.example.ru זה אמור להחזיר את הכותרת add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; . אתם צריכים לצפות ללא יותר מהפניית 301 אחת (עם www ללא www ומ-HTTP ל-HTTPS). אם יש יותר הפניות או שגיאה, השרשרת לא אופטימלית.
איך לתקן תוכן מעורב?
לאחר הגדרת ההפנייה, בדקו את קונסולת הדפדפן עבור פריטים חסומים. השתמשו ב-Screaming Frog לסריקה—הוא ימצא את כל המשאבים שנטענים דרך HTTP. אנו מחליפים את הפרוטוקול במסד הנתונים או משתמשים ב-// AppServiceProvider + bootstrap/app.php public function boot(): void { if (app()->environment('production')) { URL::forceScheme('https'); } } ->withMiddleware(function (Middleware $middleware) { $middleware->trustProxies( headers: Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO, proxies: '*' ); }) . האחרון מאלץ את הדפדפן לשדרג אוטומטית בקשות HTTP ל-HTTPS. בפרויקט אחד, זה צמצם את זמן התיקון הידני מ-8 שעות ל-10 דקות.
השוואת תצורות לשרתים שונים
| שרת | מהירות הגדרה | גמישות | סיכון שגיאה |
|---|---|---|---|
| Nginx | 15–30 דקות | גבוהה | נמוך (עם תחביר נכון) |
| Apache | 10–20 דקות | בינונית | בינוני (בגלל הקונטקסט) |
| Cloudflare | 5 דקות | נמוכה | נמוך (הגדרות GUI) |
| Laravel | +10 דקות | בינונית | גבוה (trustProxies נשכח לעתים קרובות) |
Nginx מעבד הפניות מהר יותר: עד 30% פחות תקורה בהשוואה ל-Apache mod_rewrite.
רשימת בדיקה: מה לבדוק לאחר ההגדרה
| שלב | פקודה / שיטה | תוצאה צפויה |
|---|---|---|
| בדיקת HTTP → HTTPS | curl -I http://example.ru | סטטוס 301, Location: https://... |
| בדיקת www → ללא www | curl -I https://www.example.ru | סטטוס 301 או מיד 200 |
| כותרת HSTS | curl -I https://example.ru | Strict-Transport-Security קיים |
| תוכן מעורב | פתיחה בדפדפן, קונסולה | ללא חסימות |
| TrustProxies (Laravel) | בדיקת כתובות URL שנוצרו | כל הקישורים https |
מה כלול בהגדרה
- ביקורת תצורה נוכחית: בדיקת הפניות, HSTS, תוכן מעורב
- הגדרת שרת (Nginx/Apache) או Cloudflare
- הוספת HSTS עם max-age ותצורת preload
- תיקון תוכן מעורב בקוד ובמסד הנתונים
- אימות שרשרת הפניות ומדדי SEO
- תיעוד העבודה שבוצעה
- אחריות תמיכה ל-30 יום לאחר הפריסה
תהליך: מביקורת לפריסה
- אנליטיקה: בדיקת הפניות נוכחיות, HSTS, תוכן מעורב, מדדי SEO.
- עיצוב: בחירת סכימה (www לעומת ללא www, תת-דומיינים), תכנון השרשרת.
- יישום: הגדרת תצורות שרת, הוספת HSTS, עדכון האפליקציה.
- בדיקות: curl, קונסולת דפדפן, כלי SEO (Screaming Frog).
- פריסה: העלאה לסביבת הייצור עם הגדלה הדרגתית של HSTS max-age.
ציר זמן
- הגדרת Nginx/Apache בסיסית עם HSTS: משעה אחת.
- הגדרה מקיפה עם Laravel, Cloudflare ותיקון תוכן מעורב: מ-4 שעות.
- העלות מחושבת באופן אישי. מהנדסים מעריכים את הפרויקט.
צרו קשר—נבצע ביקורת ונכין תצורה. הזמינו את ההגדרה עוד היום וקבלו ייעוץ. אנחנו מוכנים לעזור.
לפי תיעוד MDN HSTS







