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

 

מה זה Nginx ומהיכן הוא צץ פתאום?

Nginx (נהגה engine-x) הינו שרת HTTP רגיל כמו Apache או IIS. כמו כן ניתן להשתמש בו כפרוקסי הפוך (Reverse Proxy). הוא פותח ע"י איגור סיסואב בשנת 2004 והוא מופץ תחת רישיון BSD (רישיון יותר "מתירני" מ-GPL). כיום הוא מריץ כ-10% מכל האתרים בעולם, כ-12% מכלל האתרים הפעילים בעולם וכ-24% מ-1000 האתרים הגדולים בעולם

אז איך הוא נהפך לכזה נפוץ בכזה מעט זמן?

Nginx פותח כדי לתת טיפול מהיר לגישה לאותו משאב. זה מאפשר שימוש נמוך בזיכרון ויכולת גידול משמעותית יותר מכל שרת אחר בשוק כיום.

זמני תגובה של Nginx מול Apache
זמני תגובה של Nginx מול Apache 

איך מתקינים ומקנפגים?

nginx ניתן להתקנה בקלות מכל הפצת לינוקס. אם אתם מפעילים גם אפליקציות מבוססות PHP  תצטרכו להתקין בנוסף את PHP-FPM. רכיב זה מטפל בבקשות Nginx באמצעות FastCGI Process Manager (ר"ת fpm) עבור PHP.

למה יש לשים לב?

יש מספר פקטורים שיש לקחת בחשבון. קודם כל מה שמריץ את ה-PHP הינו fastcgi שדורש קנפוג נפרד, כפי שהוסבר קודם.
נושא אחר הינו htaccess ש-Nginx אינו משתמש בו אלא אך ורק בקבצי קונפיגורציה. Nginx עושה זאת בגלל חיסכון בטיפול בפניות. כאשר פונים לתיקייה פנימית, למשל media/js/core/jquery.js, אפאצ'י יחפש קובץ htaccess בכל אחת מהתיקיות, ז"א, 4 קריאות. הקריאות הללו בזבזניות לכן Nginx לא עושה שימוש ב-htaccess. על אף זאת, קל מאוד ללמוד איך להמיר את ה-htaccess לקונפיגורציה של Nginx ובנוסף למרבית האפליקציות קיים כבר קונפיגורציה שמתאימה ל-htaccess (לדוגמא, לוורדפרס, ג'ומלה, דרופל ועוד יש כבר קונפיגורציות מוכנות ומפורסמות באתר הרשמי של Nginx).

התקנה וקינפוג

דבר ראשון נתקין את Nginx ו-PHP-FPM (לרוב אנחנו צריכים גם PHP):

sudo apt-get install nginx php-fpm

 התקנה זו מתבצעת באובונטו, אבל גם לשאר ההפצות יש כבר חבילות מוכנות במאגרים שלהם.

PHP-FMP

לאחר מכן נקנפג את PHP-FPM. נשים לב למספר משתנים:

# /etc/php5/fpm/php-fpm.conf
listen = 127.0.0.1:9000
user = nobody
group = nobody
pm = dynamic
pm.max_children = 50
pm.start_servers = 15
pm.min_spare_servers = 7
pm.max_spare_servers = 20

המשתנה listen מגדיר לאן הבקשות ישלחו. ניתן לשלוח בקשות גם ממחשב אחר בשביל חלוקת עומסים. המשתנה user ו-group מגדירים איזה קבוצה ומשתמש התהליך ירוץ. הגדרות ה-pm הינה הגדרות של התהליכים (pm ר"ת של process manager). ההגדרות מקבילות ל-workers של Apache וניתן לקרוא על כל אחת מהן בקובץ עצמו (ישנו הסבר מעל כל משתנה).

Nginx

ההגדרות של Nginx קלות להבנה והתיעוד גדול מאוד באתר של Nginx. דבר ראשון יש לשים לב כי יש שני מבנים עיקריים http, שהינו אחד ויחיד. לדוגמא:

http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

ההגדרות כאן הם גנריות וניתן לקרוא עליהם בתיעוד (על חלקן אסביר בהמשך בפרקים למתקדמים). אמליץ להשתמש בברירת מחדל לפחות בשלב הלימוד.

מקטע אחר הינו server שמוגדר עבור כל virtual host, לדוגמא:

server {

server_name domain.com;
listen 80;

root /var/www/localhost/htdocs;
index index.html index.htm index.php;
location / {
# Joomla rewrite (replacement for htaccess)
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}

הגדרנו את שם הדומיין שאליו ה-vhost באמצעות server_name (בדוגמא שלנו הדומיין הינו domain.com). הנתיב שבו נמצא ה-vhost על השרת באמצעות root (בדוגמא שלנו /var/www/localhost/htdocs). הפורט שאליו יקשיב ה-vhost מוגדר (כמובן) ב-listen.

שימו לב כי הפנינו פניות של בקשות PHP אל ה-PHP-FPM לאותו הוסט ופורט שהגדרנו קודם (מודגש).

ניתן להגדיר alias-ים באמצעות הגדרת מקטע location בתוך מקטע server. לדוגמא חסימה של תיקיות מסויימות מהרצה של קובץ PHP:

location ~* /(images|cache|media|logs|tmp)/.*\.php$ {
return 403;
error_page 403 /403_error.html;
}

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

 

הוספת תגובה

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