בהמשך למדריך למתחילים של Nginx, אתחיל להסביר על דברים קצת יותר מתקדמים. אחד הדברים הראשונים שנתקלנו בהם והודגש בחלק הראשון הינו אי-שימוש ב-htaccess. במדריך קצר אסביר כיצד מקנפגים הגדרות שהיו ב-htaccess בקבצי הקונפיגורציה.

 

אז למה בעצם למה לא יישמו htaccess

את הפירוט לגבי כך ניתן למצוא כאן. בקצרה אומר ש-htaccess הינו מנוע בזבזני שגורם לאפאצ'י לקרוא בכל תיקייה בנתיב כדי למצוא אם קיים קובץ htaccess. למשל, בנתיב http://example.com/site/files/images/layout/header.png אפאצ'י יחפש ב-site לאחר מכן ב-files, לאחר מכן ב-images ולבסוף ב-layout. מספר הקריאות סה"כ פי 4 בשביל קובץ אחד. עניין זה הופך לעומס כאשר מדובר בשרת שמגיש אלפי דפים.

אז מה עושים?

אנג'ינקס מכיל את החוקים שנשמרו ב-htaccess בתוך קבצי הקונפיגורציה שלו. rewrite ו-redirect מבוצעים בקבצים אלו. ביצוע החוקים מתבצע באמצעות מספר הגדרות:

  1. rewrite - מבצע הפניה באמצעות ביטויים רגולריים (regular expressions). מקביל ל-rewrite של אפאצ'י.
    אם המטרה של ההפנייה מכילה http ההפנייה תתבצע בדפדפן, אחרת ההפנייה תהיה פנימית.
    מקבל דגל נוסף שמסמן את סוג הפנייה. לדוגמא, זמנית (temporary-303) או קבועה (permanently-301).
  2. location - הגדרה מותנית שנשענת על תוכנו של ה-URI (הנתיב שאליו פונים). יכול להתבסס על מחרוזות רגילות או ביטויים רגולריים.
  3. try_files - ביצוע בדיקה לקיום קבצים במיקומים שונים והחזרת המיקום הראשון שבו נמצא הקובץ. הגדרה זו מקצרת בד"כ את זמן התגובה כי ברוב ההפניות אינן מתחוללות (כדוגמת PHP) אלא הינן רק הגשת קבצים סטטיים (javascript, תמונות, css). לכן עושים שימוש בזה כדי לפנות לקובץ הפיזי לפני פנייה למחוללי הקוד (PHP).
אחרי המבוא התאורטי הקצר, הנה דוגמאות שימחישו לכם את ההגדרות. אם עדיין לא תבינו הגדרה כלשהי פנו לתיעוד (הקישורים בהגדרות).

הוספת www לדומיין

למשל, ניתוב רגיל מדומיין בלי www לדומיין עם www יבוצע באופן הבא:

server {
server_name domain.com;
rewrite ^ http://www.domain.com$request_uri permanent;
}

הסרת WWW לדומיין

יש כאלה שמעדיפים להסיר את ה-www:

server {
server_name www.domain.com;
rewrite ^ $scheme://domain.com$request_uri permanent;
}

תודה ל-Ddorda על ההמלצה להימנע משימוש ב-if.

מערכות ניהול תוכן נפוצות

וורדפרס

location / {
try_files $uri $uri/ /index.php;
}

ג'ומלה

location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}

דרופל

location / {
try_files $uri @rewrite;
}

location @rewrite {
# Some modules enforce no slash (/) at the end of the URL
# Else this rewrite block wouldn't be needed (GlobalRedirect)
rewrite ^/(.*)$ /index.php?q=$1;
}

PHP Frameworks

Zend

location / {
try_files $uri $uri/ /index.php?$args;
}

עוד פריימוורקים של פהפ:

טיפ קטן לסיום, ישנו ממיר אוטומטי של htaccess אל הגדרות Nginx. הממיר לא מתיימר להיות מושלם, אבל הוא יעיל לדברים פשוטים במיוחד לאלה שלומדים את הנושא.

עד כאן להפעם. בפרק הבא אעסוק באופטימיזציה וביצועים של Nginx, כגון GZip ושימוש במטמון הדפדפן.

הוספת תגובה

0
  • לא נמצאו תגובות