הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   תחזוק שרתים ושירותי רשת נוספים (https://hosts.co.il/forums/forumdisplay.php?f=29)
-   -   nginx או apache? אולי שניהם? (https://hosts.co.il/forums/showthread.php?t=93498)

Tal. 18-11-11 21:52

nginx או apache? אולי שניהם?
 
קראתי הרבה באינטרנט על nginx וכמה שהוא טוב, אבל עדיין זה נראה לי מפוקפק, כי בכל זאת
עדייין apache מוביל ובגדול.

השאלה שלי היא לגבי אתר שיתוף קבצים (סגנון fileflyer.com) האם כדאי להתקין nginx ,apache או אולי שnginx ישמש כfrontend לapache?


נסו לפרט כמה שיותר. תודה :)

Kernel 18-11-11 22:31

אפצ׳י הוא יישום מאוד מתקדם ומפותח, אבל נורא כבד מבחינת משאבים. פה נכנס nginx לתפקיד, תוכנה קלה שאפשר לשלב את שניהם ביחד.

ישנן 2 קונפיגורציות לnginx:

1. הכל רץ מnginx. תוכן סטטי ודינאמי.
האופציה הכי מועילה ויעילה, אבל דורשת התאמות כל פעם(אין htaccess בnginx וחוקי הrewrite נכתבים בצורה טיפה יותר מסובכת).

למי זה מתאים?
לאתר עם כוח אדם שיודע לעדכן את צד השרת בהתאם לפיתוח הקוד של האתר ($$$).

2. ההתקשרות מול הגולש נעשית ע״י nginx. תוכן סטטי מוגש ע״י nginx. תוכן דינאמי מוגש דרך nginx ע״י apache.

האופציה המועדפת לבעלי אתרים ללא איש טכני צמוד. כל התמונות/css/js/קבצים כבדים מאוד מטופלים דרך nginx. תוכן דינאמי (קוד php) מטופל ע״י apache ומאפשר להשתמש בhtaccess.

בקצרה. אתריהורדות גדולים משתמשים בnginx או מקביליו ולא בapache להורדות. בד״כ עם שילוב של מוד dynamic link.

Tal. 19-11-11 03:02

תודה
בעצם, מה החסרונות של APACHE בייחד עם NGINX לעומת NGINX לבד?

אדיר 19-11-11 07:20

צריכת משאבים קצת יותר גבוהה - שאני גם בספק אם היא באמת קריטית או בכלל משתלמת ביחס עלות/תועלת לאתר ממוצע (ובכלל).

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

Kernel 19-11-11 13:42

החיסרון ב-Apache, שהוא פותח פרוסס לכל בקשה(בהתחלה מרזרבה ואז מפעיל פרוססים נוספים), וכל פרוסס כזה דורש זכרון ובשלב מסויים מכביד על המערכת.

לעומת זאת, NGINX מטפל בבקשות בצורה שונה, ופרוסס אחד של NGINX יכול לטפל בכמה בקשות במקביל (בד"כ מגדירים פרוסס לכל ליבה).

אני אתן לך דוגמא להתקנה שביצעתי, שרת שמטפל בהמון בקשות לקבצים סטטים, עם קפיצות תעבורה מטורפות (מ-10 אמביט ל-100 אמביט בשנייה), עבד עם APACHE וה-LOAD AVARAGE עמד על 30 באופן קבוע, זמן הטעינה של קובץ היה בין שנייה לשתיים.

לאחר התקנה של Nginx, ה-Load avarage לא עובר את 1.5, זמן הטעינה לתמונה ירד לפחות משנייה, והלקוח הפסיק לקבל מיילים מעצבנים ממערכת הניתור.

אבל nginx הוא לא הפתרון היחידי, יש גם את lighttpd, squid, varnish, ועוד.

כש-Apache עובד עם Nginx אז בעל האתר יכול להמשיך לפתח את האתר כרגיל (חוקי HTACCESS לדוגמא), ו-NGINX מעביר ל-Apache רק את הבקשות לתוכן הדינאמי (הגולש לא מדבר עם Apache).

ניקח עמוד סטנדרטי, מה קורה בפועל?
העמוד הראשי index.php נטען דרך Apache.
העמוד מפנה לעוד X תמונות, Y קבצי CSS ו-Z קבצי JS - כולם נטענים מ-Nginx.

במקרה של גולש אחד, לא יהיה הבדל משמעותי בביצועים/צריכת משאבים.
תכפיל את הגולש הזה ב-100, ואז אתה בוחן את היעילות של המערכת.

Tal. 19-11-11 14:10

תודה.
בעצם אז כשמותקן apache וngnix עדיין ייפתח פרוסס עבור כל בקשה נכון?

אני יודע שכל אתר זה שונה, ולכן אני אתן דוגמה. נניח אתר הורדות עם המון כניסות ביום.

משתמש בdownload.php בשביל ההורדות. דוגמה:

PHP קוד:

header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
header('Pragma: public');
header('Expires: 0'); 
header('Content-Type: '.$mime);
readfile("$filename");
exit(); 

מה יהיו ההבדלים אם יותקן רק apache או apache+ngnix?

אדיר 19-11-11 14:51

אתה שולח את הקובץ למשתמש דרך ה- PHP,
הבקשה עוברת ב- APACHE בכל מקרה.

במצב כזה - שילוב של NGINX הוא מיותר ואף עלול לגרום לירידה בביצועים.

כדי להנות מהיתרון היחסי של NGINX בעבודה עם תוכן סטטי,
אתה צריך לשדר אותו כתוכן סטטי לכל דבר ולא לחולל אותו באמצעות PHP.

Tal. 19-11-11 18:56

אם אני אפנה כתוכן סטטי לא רק שאני פוגע באבטחה אני לא יכול להגביל ולשלוט על ההורדות. כל אתרי ההורדות משמשמים בהורדת קבצים כPHP

אדיר 19-11-11 19:12

אני לא בא להגיד לך איך לעבוד, יכול להיות שאתה עובד בסדר גמור ואין שום סיבה שתשנה שום דבר.

אני בא להגיד לך מה צריך לקרות כדי להנות מהיתרונות של NGINX,
אולי במקרה שלך זה פשוט לא מתאים ולא נחוץ(?).

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

Kernel 19-11-11 19:20

2 אפשרויות:

להשתמש בsecure download, וככה אתה מגביל את השימוש בקובץ.

אפשר להורות לnginx ע״י סקריפט php איזה קובץ להגיש ואז nginx מגיש את הקובץ בלי מעורבות של php.
אופציה קלה וחכמה נוספת היא להשתמש בtraffic shaping כדי לחסוך תעבורה/רוחב פס.

Tal. 19-11-11 21:54

מודה לשניכם! אני אקרא על secure download וtraffic shaping לא שמעתי על שניהם.

Kernel 20-11-11 17:16

Traffic shaping
להציג מגבלות על התעבורה פר משתמש, לדוגמא: משתמשים לא משלמים מורידים על 50k בשנייה.
משתמשי VIP מורידים ללא הגבלה.

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

Secure download
יוצר לינק דינאמי בעל זמן חיים מוגדר מראש.
אתה יוצר באופן אוטומטי (עם PHP) כתובת שפגה תוקף לאחר X זמן,
במידה ומישהו משתף את הכתובת, אחרי שהכתובת פגה אי אפשר להשתמש בה יותר (וככה מנעת HOT LINK).
ב-NGINX אפשר להרחיק לכת ולהגביל לדפדפן/IP של הגולש.

Tal. 20-11-11 17:38

את שניהם עשיתי בPHP - גם קישור מאובטח שכולל IP של גולש וזמן וגם הגבלת מהירות ומספר חיבורים.

העניין הוא שapache פותח תהליך עבור כל הורדה.

אם אני אוסיף NGNIX כמו שprogramer אמר, זה לא יעזור מפני שעדיין הapache יטפל בזה (PHP).

זאת אומרת שהאפשרות היחידה היא להתקין רק ngnix שזה חתיכת סיפור שנראה לי שאני אוותר עליו - הבנתי שיש עוד תקלות ובעיות וזה לא פשוט להתאים את הקוד.

Kernel 20-11-11 18:20

החשיבה שלך לא נכונה,
העברת הקובץ לא תתבצע ע"י PHP אלא ע"י NGINX, עם הגדרה נכונה לא צפויות תקלות ובאגים.

אתה יכול להשאיר את הקונפיגורציה הנוכחית (APACHE מטפל בהכל), ולעשות סאב דומיין לשרת הורדות שיריץ NGINX ורק ליצור לינקים דינאמים, כל היתר יעשה ע"י NGINX.

Yellow Slider 21-11-11 18:27

ממליץ שתקראו על litespeed, פתרון בתשלום שמציע ביצועים יותר טובים משל nginx עבור תכנים סטטים ומשל אפאצ'י/fastcgi עבור תכנים דינמיים, מכיל גם פתרון קאשינג מובנה בדומה ל-varnish.

מאוד נוח לעבודה, גנרי ביותר, החסרון היחידי שצריך לשלם :)

alonrotenberg 22-11-11 20:11

litespeed באמת מומלץ אם יש לך הרבה תנועה באתר ..

Tal. 23-11-11 02:35

בסוף הלכתי רק על nginx. כבר התאמתי את כל הקוד כולל rewrite , phpmyadmin ,proftpd וכו'..
(האמת שזה הרבה יותר פשוט ממה שעשו את זה)

אני מתלבט אם להוסיף איזה מאיץ PHP כמו
eAccelerator וAPC

שמעתי גם על מודל memcache

כדאי התוספות האלה? יש למישהו המלצות?

אדיר 23-11-11 14:35

אתה מדבר כאן על קאשינג, כאשר מדובר על קאשינג ב- 2 רמות שונות:

APC ו- eA הינם תוספים המבצעים Opcode Caching, אני לא אפרט כאן יותר מדי מה התהליך המדוייק שמתבצע אני מניח שיש מספיק מידע ברשת,
בקצרה רק אומר שזה חוסך מס' שלבים בהרצת הקוד.
היות ואצלך מדובר על מערכת יחסית קטנה סביר להניח שהפרשי הביצועים שתרוויח מקאשינג כזה לא יהיו משמעותיים מדי (זה לא אומר שזה לא כדאי כמובן, רק שתכנס לפרופורציות).

Memcache ו- APC (הוא תומך גם בזה, אך מספק ביצועים נמוכים יותר מהראשון) הינם תוספים המבצעים Variable Caching, גם כאן לא אפרט יותר מדי על התהליך,
אבל זה מיועד בעיקר למערכות שעובדות מול מסד נתונים, טוענות קבצים קטנים (וגם קצת גדולים יותר, תלוי כמה זכרון אתה מסוגל להקצות עבור העניין) וכו'.
בקצרה - במקום שבכל ריצה התוכנית תתחבר למסד/ תטען את הקובץ מהדיסק - היא טוענת את המידע מהזכרון (כאשר הוא נשמר שם בריצה הראשונה או איך שהגדרת את זה),
זה שימושי למקרים שבהם צריך לשלוף מידע מהמסד, למקרים שבהם צריך לשלוף תוכן של קובץ כלשהו - כאשר המידע המדובר לא משתנה יותר מדי.

באופן עקרוני 2 האפשרויות ניתנות לביצוע במקביל - ניתן לבצע גם Opcode Caching וגם Variable Caching אין ביניהם שום התנגשות או משהו כזה,
השאלה עד כמה זה נחוץ ועד כמה זה באמת ישפר ביצועים (עלות/ תועלת).

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

Tal. 23-11-11 14:52

המערכת היא מערכת מאד פשוטה. כמו שאמרתי אתר שיתוף קבצים.
(כמו fileflyer.com) -עולמי עם המוןןן כניסות.

העמוד PHP העמוס הוא עמוד ההורדה. מקבל ID ושולף נתונים מהמסד.

אז nginx פתר לי את בעיית ההורדה עצמה. אני מפנה לקובץ בעזרת X-Accel-Redirect ככה זה גם מאובטח - לא ניתן לגלות את מיקום הקובץ.
בנוסף מגביל את המהירות לכל משתמש, ועכשיו אני עובד על הגבלה של מספר החיבורים (לחסום מאיצים)

אני חושב שאני אשתמש בVariable Caching כדי לחסוך חיבורים למסד.

אדיר 23-11-11 15:54

אם מדובר על אתר מאוד עמוס - ייתכן שרצוי לשלב גם Opcode Caching, ניתן להניח שבמצב כזה השיפור כן יהיה מורגש.

במקרה שאתה מתאר עבור Variable Caching,
חשוב מאוד שתגדיר זמן תפוגה לערכים שאתה שומר - כברירת מחדל הם נשארים כל עוד השרת רץ ואז אתה עלול לאגור בקאש מידע שאף אחד לא יבקש בעתיד.

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

Tal. 23-11-11 18:42

תודה!
אני אקרא עליהם


כל הזמנים הם GMT +2. הזמן כעת הוא 20:53.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ