שדרוג nginx שהסתבך
-
יש לי שרת בAWS עם UBUNTU 18.4 וnginx.
החלטתי לשדרג שם את הPHP לפי ההוראות פה שנראו מסודרות ומבטיחות להפליא. התעצלתי להבין טוב מה אני עושה.
אז התברר שכחלק מהתהליך שדרגתי לעצמי כנראה את גרסת הnginx, וכעת הוא לא מצליח לעלות חזרה. עושה רושם, אם אני מבין נכון, שהוא איבד את המודולי-צד-שלישי שהיו מותקנים לו ולא מגיעים עם הברירת מחדל.
למה עושה רושם? כי הוא לא מזהה כל מיני דרייקטיביס, רובם שייכים למודול redis או מה שנראה כהסתעפויות של זה.
איך יכול להיות שאיבד? אין לי מושג. לא מתמצא בnginx ובהתקנה שלו. אני לא מוצא היכן אמורה להיות תיקיית המודולים, ואם זו תיקיית modules-ebabled אז הרי שבאמת אין שם את המודולים הללו, כאילו אבדו. אבל נראה שזו לא תיקיית המודולים עצמה.
פירה רבה בגוגל לא עזרה לי פה הרבה, עושה רושם שבגלל שאני חסר ידיעות בסיסיות בנושא.בינתיים, אתר פרודקשן רציני מושבת, ואני אנא אני בא.
תבורכו על עזרתכםנ.ב. הערה כללית: לא אני הקמתי והתקנתי את השרת הזה, ולמרות שזה נעשה ע"י חברה מקצועית, למיטב הבנתי יש שם לא מעט התקנות והגדרות לא-סטנדרטיות.
-
@davidnead שים לב, הבעיה שלך איננה ברורה (ניסית לתאר את הבעיה כפי תפיסתך, אולם כמו שכתבת אתה לא מתמצא בNginx), לכן אני מציע:
- תשתדל לתאר במילים פשוטות את הפעולות בהם נקטת (לדוגמא "כי הוא לא מזהה כל מיני דרייקטיביס" לא עונה על ההגדרה הזו).
- צטט את השגיאות, כך שנקרא אותם מכלי ראשון.
-
צודק לגמרי. אז ככה:
שידרגתי, ע"י כלים אוטומטים, כבקישור לעיל, אז אין לי איך לתאר איך. הדבר היחיד שאני יודע שבשלב כלשהו קפצה לי שאלה שלא התעמקתי בה על הבדל בין קובץ הקינפוג הנוכחי לחדש ונתן לי כמה אפשרויות לבחור, בחרתי בברירת המחדל שזה השארת הקינפוג הקיים.
אחר כך אני מאתחל את השרת:
sudo systemctl restart nginx
ומקבל שגיאה.אז אני בודק:
systemctl status nginx.service
ומקבל
Nov 07 12:41:14 ip-172-31-81-0 nginx[2957]: nginx: [warn] low address bits of 172.31.81.0/20 are meaningless in /etc/nginx/conf.d/MYSITE.conf:27 Nov 07 12:41:14 ip-172-31-81-0 nginx[2957]: nginx: [emerg] unknown directive "set_escape_uri" in /etc/nginx/conf.d/MYSITE.conf:48
השורה העליונה היא רק אזהרה, אז איני מתייחס, ובהמשך אכן רואה שאינה מעכבת.
אני מנסה להזיח את השורה הבעייתית. היא מופיע בתוך קטע שנראה כך:if ($request_method = PURGE) { set $stored_method "GET"; set $stored_scheme "https"; set $key "nginx-cache:$stored_scheme$stored_method$host$request_uri"; set_escape_uri $escaped_key $key; rewrite ^/w/(.*)$ /redis-purge?key=$escaped_key last; #return 301 /redis-purge?key=$escaped_key; }
חוזר על האיתחול וכו'. שגיאה זהה רק על שורה אחרת (55) הפעם בתוך בלוק של מודל reis:
location /redis-purge { auth_basic off; internal ; set_unescape_uri $key $arg_key ; redis2_query del $key; redis2_pass redis; more_set_headers 'X-Purge PURGED'; }
שוב מזיח וכו'. הפעם השגיאה:
nginx: [emerg] unknown directive "redis2_query" in /etc/nginx/conf.d/MYSITE.conf:56
לא אלא אתכם בכל הפעולות, כי חזרתי על הצעד הזה כמה עשרות שורות לפחות. אני לא זוכר הכל בעל פה, אבל רובם לפחות היו בבלוקים של redis, ולפחות חלק מהאחרים היו בגלל משתנים לא מזוהים כי הזחתי את השורות שלהם.
אולי היו עוד בלוקים נוספים שהתקילו, אני לא זוכר. אם יש צורך אחזור שוב על הכל כדי לבדוק.בסוף, אחרי שהזחתי את כל השורות הבעייתיות, השרת עלה. אבל כמובן שהאתר שלי שמסכן התנדף לו כל הקינפוג לא עלה.
הדבר היחיד הרלוונטי שמצאתי בגוגל, היתה התשובה הקצרה הזו שרימז על כך שחסר לי המודול.
בבדיקה שהוצעה שם זו התוצאה אכן:
nginx -V nginx version: nginx/1.20.1 built with OpenSSL 1.1.1 11 Sep 2018 (running with OpenSSL 1.1.1a 20 Nov 2018) TLS SNI support enabled configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-kLXxPU/nginx-1.20.1=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module
תודה לכם
-
@מנצפך אמר בשדרוג nginx שהסתבך:
@davidnead
מהnginx -t
נותן?
נתתי אותו יחד עם התוצאה שלו. כנראה מדפיס גרסה+מודולים
יש לך אפשרות לשתף את כל קבצי ה NGINX?
בעייתי קצת בציבורי.
-
@davidnead נראה לי שהסקת בצדק שחסרים לך מודולים.
מגיגול קצר נראה לי שה-directives שחסרים לך קשורים ל-openresty.
אם כן הצעתי שתנסה להתקין openresty. -
@yossiz אמר בשדרוג nginx שהסתבך:
@davidnead נראה לי שהסקת בצדק שחסרים לך מודולים.
מגיגול קצר נראה לי שה-directives שחסרים לך קשורים ל-openresty.
אם כן הצעתי שתנסה להתקין openresty.גם אני הגעתי למסקנה הזו. אבל החלטתי שאני לא רוצה לגעת במה שאני לא מבין.
- לא באמת הצלחתי להבין איך להתקין את הנ"ל, וק"ו את המודולים שלו
- בעקרון הכל אמור להיות מותקן לי, רק משהו בהגדרות וכדו' נאבד, לא רוצה לקלקל. לכאורה מישהו שמכיר NGINX אמור להבין בקלות מה הולך שם. אנסה לצפות לישועה.
-
-
@aaron תודה רבה!
חבל שזה לא הגיע קודם, זה היה מקצר לי את הדרך. בינתיים שברתי את הראש והתקנתי הכל מחדש.
אני חושב שהמקום האחרון בו אני תקוע, זה שהnginx משום מה מפעיל את גרסת הPHP הישנה במקום את החדשה.המדריך הזה לא עזר לי לסדר את זה.
ההגדרה הנוכחית שלי:
fastcgi_pass [::1]:9000;
אם אני משנה ל:
fastcgi_pass unix:/run/php/php-fpm.sock;
אני מקבל מהשרת שגיאה 502.
-
לא מגיב לגבי הפרטים הטכניים אלא החינוכיים....
א)
לעולם אתה לא משדרג פרודקשן לפני שעשית את זה על סביבת פיתוח/העתק והכל עבר חלק. שכך שנינו: "אין משדרגין פרודקשן בתחילה, אלא כהן גדול נכנס לסביבת פיתוח עצמאית ומשדרג והולך עד שנעשית התוכנה כסולת נקייה, ושומר עותק מלא של גירסה קודמת בלשכת פלהדרין, ומשנה כתובת פנימית עד שכל הריקווסטין פונין לאקו סיסטם המשודרג. ואם היו הלקוחות מתלוננין, משנה את הכתובת ומחזירן לגירסה הישנה ומתקן את החדשה ואינו חושש"
ב)
תלמד על Docker וזה ישנה לך את החיים לגמרי, זה קשה, זה גם מעצבן, אבל שווה. שם אתה יכול לעשות דברים כאלו בלי שום חיכוכים (כמעט) -
@ארכיטקט אמר בשדרוג nginx שהסתבך:
לא מגיב לגבי הפרטים הטכניים אלא החינוכיים....
א)
לעולם אתה לא משדרג פרודקשן לפני שעשית את זה על סביבת פיתוח/העתק והכל עבר חלק. שכך שנינו: "אין משדרגין פרודקשן בתחילה, אלא כהן גדול נכנס לסביבת פיתוח עצמאית ומשדרג והולך עד שנעשית התוכנה כסולת נקייה, ושומר עותק מלא של גירסה קודמת בלשכת פלהדרין, ומשנה כתובת פנימית עד שכל הריקווסטין פונין לאקו סיסטם המשודרג. ואם היו הלקוחות מתלוננין, משנה את הכתובת ומחזירן לגירסה הישנה ומתקן את החדשה ואינו חושש"
ב)
תלמד על Docker וזה ישנה לך את החיים לגמרי, זה קשה, זה גם מעצבן, אבל שווה. שם אתה יכול לעשות דברים כאלו בלי שום חיכוכים (כמעט)תודה!
א. כך נוהגין. אלא שפה זה פרודקשן מורכב עם הרבה התקנות ושירותים חיצוניים, כולל DB בRDS של אמזון עם רפליקה וכמות אדירה של ג'יגות. אמנם, עדין האמת היא שהייתי קצת פזיז קודם.
ב. דוקא לאחרונה למדתי, והתייאשתי כי זה פגע לי ביכולת להפעיל bluestack על המחשב, שזה חיוני עבורי בגלל שזו הדרך היחידה להפעיל וואטסאפ, לו אני ממשק נזקק. (סמארטפון אין לי ב"ה)
-
@davidnead אמר בשדרוג nginx שהסתבך:
ב. דוקא לאחרונה למדתי, והתייאשתי כי זה פגע לי ביכולת להפעיל bluestack על המחשב, שזה חיוני עבורי בגלל שזו הדרך היחידה להפעיל וואטסאפ, לו אני ממשק נזקק. (סמארטפון אין לי ב"ה)
תריץ על שרת מרוחק.
עם docker context אפשר להגדיר חיבור על גבי ssh
https://docs.docker.com/engine/context/working-with-contexts/ -
@davidnead אמר בשדרוג nginx שהסתבך:
א. כך נוהגין. אלא שפה זה פרודקשן מורכב עם הרבה התקנות ושירותים חיצוניים, כולל DB בRDS של אמזון עם רפליקה וכמות אדירה של ג'יגות. אמנם, עדין האמת היא שהייתי קצת פזיז קודם.
ובאמת צריך לנהוג כך גם במערכות מורכבות
אפשר לכבות מכונות כשלא עובדים עליהם וכו'
אבל גם בחברות גדולות עם מערכות מאוד מורכבות ויקרות מפרידים בין סביבת פיתוח לפרודקשן
אמנם גם אני חוטא בזה לפעמים ועושה שינויים בפרודקשן, אבל החיים מלמדים שצריך להתרגל להפרדה מוחלטת. -
@nigun אמר בשדרוג nginx שהסתבך:
ובאמת צריך לנהוג כך גם במערכות מורכבות
זה מה שעושה את ההבדל, ולפעמים מורכבות אסור מלכתחילה להיכנס אליה, תראה מה קרה כשהכריזו בפומפוזיות על מיקרו שירותים אחר כך הבינו שצריך מנצח שיגרום לכל המיקרו שירותים לנגן ביחד והמציאו את dapr שהוא למעשה שירות אחד שאמור להעביר מידע בין המיקרו שירותים וכו' וכו', בקיצור העולם הולך ומסתבך ולא מוצא את האיזונים הנכונים בין חנטריש לחנטריש שכנגד.
אגב מצאתי כתוב בשם רבי יוסי בן חלפתא (מלפני 1900 שנה) שאמר "טוב עשרה טפחים ועומד ממאה אמה ונופל" (אבות דרבי נתן א ז).
הוא חזה מראש את עולם המחשבים כולו איך יקרוס על פניו, מי יוכל לתחזק את מה שבנו כאן???? אבל זה כבר עניין פילוסופי. -
@nigun כל האם ואם ואם ואם מייצרים ספק ספק ספק ספיקא שאתה לא יכול להבטיח שהוא לא יקרוס כי מספיקה תקלה באחת ההנחות שלך, ומספיק שהתקלה תהיה זמנית ולא יישאר זמן תגובה.
מלבד זאת יש גבול כמה אנשים מוכשרים מספיק יש, ושיכולים להקיף את כל המידע, ושהם ניתנים לשיכפול, ואיך בדיוק משכפלים אותם??? הם צריכים להיות נזירים טיבטים שיקדישו את החיים שלהם "למען הכלל" להחזיק את כל העסק הזה. בקיצור זה יקרוס. -
@ארכיטקט
נו נו, ימים יגידו
לא יודע למה אתה אוהב להיות פסימי
לדעתי נגיע מתישהו לסטנדרטים יציבים בתעשיה ורוב הארגונים יוכלו להחזיק מקהלה יפה של שירותים (או פונקציות בגישה של סרוורלס) בלי צורך באיש DevOps צמוד, ובלי לנהל קבצי YAML אינסופיים ששורה אחת מורידה את כל הפרודקשן, ופשוט יסמכו על שירותי צד שלישי כמו הורוקו וכדו'