מדריך מאמרים
שרת אחד שמריץ מספר שרתיםוורדפרסאתר אינטרנט, משותףזינקהאם זה יכול לגרום לבעיות כתיבת נתונים או קרוסטוק?
מאמר זה מספק מדריך שלב אחר שלב כיצד לבודד בצורה מושלמת נתוני מטמון חולפים ונתוני מטמון אובייקטים באתרים שונים על ידי הגדרת קידומת מטמון נפרדת (WP_CACHE_KEY_SALT) וסקריפטים של מטמון אובייקטים.
מבטל לחלוטין התנגשויות נתונים, ומאפשר לאתרים מרובים ליהנות מחוויית האצה אולטימטיבית ברמת הזיכרון בו זמנית, וכולל טיפים לבטיחות למניעת מלכודות בסביבות ייצור!
לפני מספר ימים, חבר שאל אותי על שלושת אתרי וורדפרס שלו שרצים על השרת שלו. הוא רצה להגדיר את Memcached כדי להאיץ אותם, אבל הוא דאג שהנתונים יתבלבלו.
צחקתי באותו רגע כי נפלתי בעצמי למלכודת הזאת.

בכנות, קל להפליא להגדיר את Memcached עבור אתר יחיד, אבל זה נהיה מעניין כשמדובר במספר אתרים שקיימים יחד. למה?
כברירת מחדל, Memcached מכניס את כל מטמוני ה-transient וה-object של אתרי האינטרנט לאותו מאגר. דמיינו שאתרים A ו-B במקרה משתמשים באותו מפתח מטמון - זה יגרום לכאוס. הנתונים של A ידרוסו ישירות את אלו של B, ושני האתרים יתחילו "להפריע" לנתונים זה של זה.
מה שנתקלתי בו היה אפילו יותר מצחיק, אחדמסחר אלקטרונידף פרטי המוצר של האתר הציג תוכן מאמר מאתר בלוג אחר. הייתי המום ותהיתי, "מה זה???"
לקח לי לילה שלם להבין את זה; התברר שזו הייתה התנגשות מפתחות מטמון.
אז היום אני משתף את שיטת התצורה שלי בתקווה שהיא תוכל לעזור לחברים עם אותם צרכים. אני עדיין חוקר אותה בעצמי, וייתכן שחלק מהרעיונות שלי עדיין לא מפותחים במלואם, אבל השיטה הזו עבדה מצוין בשבילי.
הכנת סביבת השרת
לפני שתתחילו להגדיר את WordPress, עליכם לוודא שבשרת מותקנים שירות Memcached ותוסף PHP Memcached.
כיצד להתקין את Memcached ב- HestiaCP?
אם ניקח את אובונטו כדוגמה, זה כרוך רק בשלוש שורות של פקודות.
sudo apt update
sudo apt install memcached php-memcached
sudo systemctl restart php8.x-fpm # 根据你的 PHP 版本改לאחר ההתקנה, זכרו לבדוק אם שירות Memcached פועל.
sudo systemctl status memcachedאם אתה רואה "פעיל (פועל)", זה אומר שאין בעיה.
שימו לב ששמות חבילות עשויים להשתנות בין מערכות שונות. פקודה זו משמשת בדרך כלל במערכות דביאן. אם... CentOS עבור הפצות אחרות, ייתכן שתצטרכו להשתמש ב-yum או ב-dnf כדי להתקין אותן.
השתמשתי באובונטו 20.04 באותה תקופה, וכל התהליך עבר בצורה חלקה למדי.
פעולת ליבה: הגדרת קידומת מטמון
שלב זה הוא נשמתה של התצורה כולה והמפתח למניעת בלבול נתונים.
עליך להוסיף קידומת מטמון ייחודית לקובץ wp-config.php בתיקיית השורש של כל אתר וורדפרס.
פתחו את קובץ wp-config.php של האתר הראשון ומצאו את שורת התגובות הזו.
/* That's all, stop editing! Happy blogging. */בתעשייה הזומֵעַלהוסף ל
// 网站 A 的配置
define( 'WP_CACHE_KEY_SALT', 'site1_unique_string_' );לאחר מכן פתחו את קובץ wp-config.php באתר השני והוסיפו תצורה דומה.
// 网站 B 的配置
define( 'WP_CACHE_KEY_SALT', 'site2_unique_string_' );אני אומר לך, המחרוזת שאחרי WP_CACHE_KEY_SALT חייבת להיות...ייחודי לחלוטיןכן. אני מציע שתשתמש בשם הדומיין של האתר או בקיצור שלו ישירות, כגון site1_com_ או site2_net_.
הייתי עצלן והשתמשתי במספרים, אבל שלושה חודשים לאחר מכן שכחתי לגמרי איזה מספר מתאים לאיזה אתר אינטרנט, והייתי צריך לחפש אותם אחד אחד, וזה היה כאב ראש אמיתי.
תחשבו על זה: Memcached פועל על ידי אחסון ואחזור נתונים על סמך מפתחות מטמון. אם תגדירו קידומת ייחודית לכל אתר, הנתונים שלהם יהיו מבודדים באופן טבעי ולא יפריעו זה לזה.
זה כמו לתת לכל אתר אינטרנט לוקר משלו. למרות שכולם נמצאים באותו חדר, המפתחות שונים, כך שהנתונים לא יתערבבו.
הפעלת שמירת אובייקטים במטמון
לאחר הגדרת הקידומת, השלב הבא הוא לאפשר לוורדפרס להשתמש בפועל ב-Memcached.
יש כאן שתי אפשרויות, וניסיתי את שתיהן. לכל אחת מהן יתרונות משלה.
אפשרות 1: שיטת תוסף (הכי קלה)
התחבר לפאנל הניהול של וורדפרס והתקן תוסף מטמון התומך ב-Memcached.
מוּמלָץ W3 סה"כ מטמוןהיציבות טובה. לאחר ההתקנה, בהגדרות התוסף, בחר Memcached כסוג המטמון, הזן 127.0.0.1 ככתובת השרת, הזן את הפורט ברירת המחדל 11211, לאחר מכן שמור.
אם אתם רוצים פתרון נקי יותר, תוכלו להתקין אותו ישירות. מטמון אובייקטים במטמון תוסף זה תוכנן במיוחד למטרה זו; אין לו פונקציות נוספות.
למען האמת, בהתחלה חשבתי שגישת התוספים די טובה, כי היא נוחה. אבל מאוחר יותר גיליתי שחלק מהתוספים מגיעים עם חבורה של תכונות שאני לא צריך, ואני תמיד מודאג לגבי עדכונים, מפחד שהם פתאום יוסיפו איזושהי תכונה שתשבש לי את התצורה.
אפשרות 2: פריסה ידנית של object-cache.php (ניתנת לשליטה רבה יותר)
אם אתם קצת פרפקציוניסטים כמוני ולא רוצים להתקין יותר מדי תוספים, אתם יכולים להשתמש בפתרון הזה.
הורד ממאגר התוספים הרשמי של וורדפרס. מטמון אובייקטים במטמון תוסף זה, או שתוכלו למצוא את קובץ object-cache.php העדכני ביותר ב-GitHub. לאחר מכן, העלו את קובץ object-cache.php שחולץ לתיקיית wp-content של כל אתר אינטרנט באמצעות FTP או SSH.
שים לב שזוהי ספריית השורש של wp-content, לא ספריית המשנה של התוספים.
לאחר שתוסיפו אותו, וורדפרס יזהה ותפעיל אוטומטית את המטמון. אינכם צריכים להגדיר דבר, מכיוון שהוא יקרא את WP_CACHE_KEY_SALT שהגדרתם קודם לכן ב-wp-config.php.
רציתי לחסוך זמן, אז השתמשתי בפתרון הזה בעיקר כי הוא ניתן לשליטה. אם מתעוררת בעיה, אני יודע היכן לחפש פתרונות, ולא אתפתע מעדכוני תוספים אוטומטיים.
ודא שהתצורה יעילה.
אחרי שתסיימו להכין את הדגימה, אתם בהחלט תרצו לדעת אם היא הצליחה, נכון?
הדרך הפשוטה ביותר היא לבדוק את הסטטוס של Memcached. התחבר באמצעות Telnet או כלי nc.
echo "stats" | nc 127.0.0.1 11211לאחר מכן תראו חבורה של סטטיסטיקות. שימו לב במיוחד לערכים של `cmd_set` ו-`get_hits`, ורעננו את הדף מספר פעמים כדי לראות אם הם עולים. אם כן, פירוש הדבר שהמטמון פועל כראוי.
דרך אינטואיטיבית יותר לאמת זאת היא לפתוח את שני האתרים בו זמנית ולראות אם הם מפריעים זה לזה. אם אתר א' אינו מציג תוכן מאתר ב', אז זה בעצם אומר שהקידומת עובדת.
עשיתי בדיקה אפילו יותר קפדנית באותו זמן. הגדרתי ערכים חולפים שונים בשני אתרים שונים ולאחר מכן השתמשתי בכלי nc כדי לבצע שאילתה ישירה על הנתונים ב-Memcached. אכן יכולתי לראות שני זוגות מפתח-ערך עם קידומות שונות, ללא בלבול כלל.
באותו רגע הרגשתי שהשגתי משהו גדול, ורק המחשבה על זה גורמת לי להרגיש מדהים.
אל תתעלמו מבעיות בטיחות
מכיוון שכל אתרי האינטרנט חולקים מופע Memcached יחיד, קיים סיכון אבטחה שעליך להיות מודע לו.
תיאורטית, אם משתמשים אחרים נמצאים בשרת, הם יוכלו לקרוא את הנתונים המאוחסנים במטמון שלך דרך פורט מקומי. אמנם זה דורש רמה מסוימת של מומחיות טכנית, אך תמיד כדאי לנקוט משנה זהירות.
לכן, עליך לוודא שה-Memcached שלך פועל כראוי. לעולם אל תקשיב לכתובות IP ציבוריות.בקובץ התצורה `/etc/memcached.conf`, ודא ששורה זו קיימת.
-l 127.0.0.1בדרך זו, Memcached יקשיב רק לכתובת הלולאה החוזרת המקומית ולא יהיה נגיש מבחוץ.
אם יש לכם דרישות אבטחה גבוהות במיוחד, או אם השרת שלכם מארח אתרים שמשתמשים אחרים לא מרגישים בנוח איתם, אני מציע לכם לשקול להשתמש... Redis ניתן להשתמש ב-Redis כתחליף ל-Memcached. הוא תומך בבידוד ריבוי מסדי נתונים ובאימות סיסמאות, ומציע אבטחה טובה משמעותית.
עם זאת, Redis מורכבת מעט יותר להגדרה מאשר Memcached. אם אתם משתמשים בו רק למטרות אישיות או לצוות קטן, Memcached עם מגבלת ההאזנה 127.0.0.1 מספיקה בעיקרון.
כמה מלכודות שנתקלו בהן
לסיום, הרשו לי לשתף בכמה מלכודות שנתקלתי בהן, בתקווה לעזור לכם להימנע מכמה מעקפים.
גרסת ההרחבה של PHP חייבת להיות תואמת.בעבר נתקלתי במצב בו התקנתי את התוסף php-memcached, אך וורדפרס לא זיהתה אותו. מאוחר יותר גיליתי שזה נבע מחוסר התאמה בגרסת ה-PHP. ודא שאתה בודק את גרסת ה-PHP שלך בקפידה בעת התקנת התוספים כדי להימנע מהתקנת גרסת שגוי.
ודא שאתה מקבל את נתיב הקובץ object-cache.php נכון.ודא שאתה שם אותו בספריית השורש של wp-content, ולא בספריית התוספים. חבר שלי שם אותו במקום הלא נכון ובזבז המון זמן בניסיון לתקן אותו ללא הצלחה.
אל תשתמש במחרוזת קצרה מדי עבור קידומת המטמון.בהתחלה השתמשתי ב-a_ או ב-b_, אבל מאוחר יותר גיליתי שהם קצרים מדי ומתנגשים בקלות עם מפתחות המטמון של וורדפרס. כדאי להשתמש לפחות במחרוזת אקראית בת שבע או שמונה תווים או בקיצור של דומיין.
זכור לנקות את המטמון של שני האתרים.פעם אחת, ניקיתי את המטמון רק של אתר אחד, אבל האתר השני עדיין שמר את הנתונים הישנים, מה שגרם לתוכן של שני האתרים להיות לא עקבי. לקח לי הרבה זמן לגלות את הבעיה.
למען האמת, אני לא יודע אם החוויות האלה יהיו מועילות לכולם, אבל שיתפתי אותן ללא הסתייגות.
לכתוב בסוף
הגדרת Memcached עבור מספר אתרים אינה מסובכת מבחינה טכנית; הבעיה העיקרית היא הגדרת קידומת המטמון. עם זאת, הבעיה טמונה בפרטים הקטנים. בעיות בהתאמת גרסאות, נתיבי קבצים ותצורות אבטחה עלולות לגרום לכם בעיות משמעותיות.
אני משתמש בשיטה הזו כבר כמעט שנה, מפעיל שלושה אתרי וורדפרס, ועד כה לא נתקלתי בבעיות משמעותיות. אם אתם עושים משהו דומה, אולי כדאי לכם לנסות.
אגב, אם יש לכם פתרונות טובים יותר או שנתקלתם במלכודות מעניינות, אל תהססו להשאיר תגובה ולשתף אותן. אשמח ללמוד מכם.
אחרי הכל, ככל שיותר אנשים ידעו על זה, כך פחות אנשים יפלו בפח, נכון?
מאחר שקראתם עד כאן, אם מצאתם את זה מועיל, אנא עשו לייק ושתפו. אם אתם רוצים לקבל עדכונים ראשונים, אתם יכולים גם לעקוב אחריי!
תודה שקראתם את המאמר שלי. נתראה בפעם הבאה.
Hope Chen Weiliang בלוג ( https://www.chenweiliang.com/ המאמר "כיצד לשתף Memcached עם מספר אתרי וורדפרס באותו שרת? מדריך התצורה האולטימטיבי למניעת שגיאות של 100%" המשותף כאן עשוי להיות מועיל עבורך.
מוזמנים לשתף את הקישור של מאמר זה:https://www.chenweiliang.com/cwl-34368.html
