כיצד לשתף Memcached בין אתרי וורדפרס מרובים באותו שרת? מדריך תצורה אולטימטיבי חסין שגיאות ב-100%.

האם שרת יחיד שמפעיל מספר אתרי וורדפרס שחולקים Memcached גורם לבעיות של כתיבת נתונים או חיבור צולב?

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

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

לפני מספר ימים, חבר שאל אותי על שלושת אתרי וורדפרס שלו שרצים על השרת שלו. הוא רצה להגדיר את Memcached כדי להאיץ אותם, אבל הוא דאג שהנתונים יתבלבלו.

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

כיצד לשתף Memcached בין אתרי וורדפרס מרובים באותו שרת? מדריך תצורה אולטימטיבי חסין שגיאות ב-100%.

בכנות, קל להפליא להגדיר את 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 Total Cache ; הוא די יציב. לאחר ההתקנה, בהגדרות התוסף, בחרו Memcached כסוג המטמון, הזינו 127.0.0.1 עבור השרת, ואת פורט ברירת המחדל 11211, ולאחר מכן שמרו.

אם אתם רוצים פתרון טהור יותר, תוכלו להתקין ישירות את התוסף Memcached Object Cache , המוקדש למשימה זו ואין לו פונקציות שונות אחרות.

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

אפשרות 2: פריסה ידנית של object-cache.php (ניתנת לשליטה רבה יותר)

אם אתם קצת פרפקציוניסטים כמוני ולא רוצים להתקין יותר מדי תוספים, אתם יכולים להשתמש בפתרון הזה.

הורידו את התוסף Memcached Object Cache ממאגר התוספים הרשמי של וורדפרס, או מצאו את קובץ 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 במקום ב-Memcached. Redis תומך בבידוד ריבוי מסדי נתונים ובאימות סיסמאות, מה שהופך אותו למאובטח הרבה יותר.

עם זאת, Redis מורכבת מעט יותר להגדרה מאשר Memcached. אם אתם משתמשים בו רק למטרות אישיות או לצוות קטן, Memcached עם מגבלת ההאזנה 127.0.0.1 מספיקה בעיקרון.

כמה מלכודות שנתקלו בהן

לסיום, הרשו לי לשתף בכמה מלכודות שנתקלתי בהן, בתקווה לעזור לכם להימנע מכמה מעקפים.

ודא שגרסת הרחבת ה-PHP שלך תואמת . בעבר נתקלתי במצב שבו התקנתי את ההרחבה php-memcached, אך וורדפרס לא זיהתה אותה. מאוחר יותר גיליתי שזה נבע מאי-התאמה בגרסת ה-PHP. ודא שאתה בודק את גרסת ה-PHP שלך בקפידה בעת התקנת הרחבות כדי להימנע מהתקנת גרסת שגוי.

ודא שאתה מקבל את הנתיב לקובץ object-cache.php נכון . הוא חייב להיות ממוקם בספריית השורש של wp-content, ולא בספריית התוספים. חבר שלי שם אותו במקום הלא נכון ובזבז זמן רב בניסיון לתקן אותו ללא הצלחה.

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

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

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

לכתוב בסוף

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

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

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

אחרי הכל, ככל שיותר אנשים ידעו על זה, כך פחות אנשים יפלו בפח, נכון?

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

תודה שקראתם את המאמר שלי. נתראה בפעם הבאה.

אני מקווה שהמאמר "כיצד לשתף Memcached עם מספר אתרי וורדפרס באותו שרת? מדריך התצורה האולטימטיבי למניעת שגיאות של 100%" ששותף בבלוג של צ'ן וייליאנג ( https://www.chenweiliang.com/ ) יהיה לעזר עבורכם.

אל תהססו לשתף את הקישור למאמר הזה: https://www.chenweiliang.com/cwl-34368.html

כדי לפתוח עוד טריקים נסתרים🔑, מוזמנים להצטרף לערוץ הטלגרם שלנו!

שתפו ותעשו לייק אם אהבתם! השיתופים והלייקים שלך הם המניע המתמשך שלנו!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

גלול למעלה