שאלה כיצד להגדיר Nginx כמו מטמון הפוך פרוקסי?


שמעתי לאחרונה כי Nginx הוסיף במטמון לתכונה proxy הפוכה שלה. הסתכלתי סביבי אבל לא הצלחתי למצוא הרבה מידע על זה.

אני רוצה להגדיר את Nginx בתור מטמון הפוך proxy מול Apache / Django: כדי לקבל בקשות Proxy Nginx עבור כמה (אבל לא כל) דפים דינמיים Apache, ואז מטמון את הדפים שנוצרו לשרת את הבקשות הבאות עבור דפים אלה מן המטמון.

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

  1. קבע תאריך תפוגה על הפריט השמור
  2. כדי לבטל באופן מפורש את הפריט השמור. למשל אם backend Django שלי עדכן נתונים מסוימים, אני רוצה להגיד Nginx לפסול את המטמון של הדפים מושפע

האם ניתן להגדיר את Nginx לעשות זאת? איך?


139
2018-06-24 01:35






תשובות:


אני לא חושב שיש דרך לפסול באופן מפורש פריטים המאוחסנים במטמון, אבל הנה דוגמה כיצד לעשות את השאר. עדכון: כפי שציין פיוטר בתשובה אחרת, יש מטמון לטהר מודול כי אתה יכול להשתמש. ניתן גם לאלץ רענון של פריט שמור באמצעות proxy_cache_bypass של nginx - ראה התשובה של שריאן למידע נוסף.

בתצורה זו, פריטים שאינם מאוחסנים בקובץ שמור יוחזרו מ- example.net ומאוחסנים. הגרסאות השמורות במטמון יוגשו ללקוחות עתידיים עד שהם אינם תקפים עוד (60 דקות).

פריטי ה- HTTP-Control וה- Exper של ה- HTTP יכובדו, לכן אם אתה רוצה להגדיר תאריך תפוגה במפורש, תוכל לעשות זאת על ידי הגדרת הכותרות הנכונות בכל מה שאתה משלם.

יש הרבה פרמטרים שאתה יכול לכוון - לראות את התיעוד nginx מודול פרוקסי לקבלת מידע נוסף על כל זה, כולל פרטים על המשמעות של הגדרות / פרמטרים שונים: http://nginx.org/r/proxy_cache_path

http {
  proxy_cache_path  /var/www/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
  proxy_temp_path /var/www/cache/tmp; 


  server {
    location / {
      proxy_pass http://example.net;
      proxy_cache my-cache;
      proxy_cache_valid  200 302  60m;
      proxy_cache_valid  404      1m;
    }
  }
}

94
2017-09-23 20:01



זהו צעד ראשון סביר עבור יישומים חדשים שאין להם 20k / req / s. - Barry
@ ברי מה יהיה STP השני? - Jürgen Paul
@Legit - אני לא יודע, אבל באופן מסורתי השלב האחרון הוא "רווח" :-) - Stephen C
למרבה הצער, זה לא עובד עם nginx 1.11. מאז העדכון האחרון היה בערך לפני 3 שנים, זה נראה כאילו זה כבר לא הפתרון. - izogfif
מה עושה ה: inactive=600m מתכוון? לא inactive נניח שזה הזמן? ` [inactive=time] - NeverEndingQueue


אתה יכול באופן ספציפי לפסול את הקובץ השמור עמודים דרך

proxy_cache_bypass       

נניח שאתה רוצה לשמור דף שמור, להגדיר את המטמון בדרך זו

location = /pageid {
  proxy_pass http://localhost:82;
  proxy_set_header   Host             $host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_ignore_headers Set-Cookie; 
  proxy_ignore_headers Cache-Control; 
  proxy_cache_bypass        $http_secret_header;
  add_header X-Cache-Status $upstream_cache_status;
}

עכשיו, כאשר אתה רוצה בטל שוב את הדף ואת הקובץ השמור 

האם להתקשר סלסל סוד עם הכותרת

curl "www.site.com/pageid" -s -I -H "secret_header:true" 

היא תבטל ותטמון אותה בזיכרון המטמון.

עבודות מ- nginx 0.7.

כבונוס נוסף add_header X-Cache-Status יכול לשמש כדי לבדוק אם הדף הוא מטמון או לא.


46
2017-11-26 04:00



פעולה זו יכולה לעדכן רק דפים שמורים כאשר הדף החדש ניתן לשמירה גם כן. אם הסרת דף (404 או שגיאות אחרות מוצגות כעת על-ידי ה- backend), הדף שולח כעת ערכת Set-Cookie או כותרת "Content-Control: private", תוכן הקובץ השמור לא יופסק. - rbu


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

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


36
2018-06-24 02:43



אתה יכול להסביר למה התכוונת על ידי "שינוי שם הקובץ או באמצעות צורה כלשהי של מחרוזת שאילתה מחרוזת מחרוזת"? אני לא בטוח שאני מבין למה זה לא רעיון טוב להשתמש במבצע כמו PURGE. - Continuation
+1 לכה. זה תמיד הרבה יותר טוב להשתמש בכלים המתאימים לתפקיד. - Tom O'Connor
@ Below: אין כמעט שום תקווה לגעת לכה בזירות הביצועים ורבגוניות. זה מגובה על ידי אחד מפתחי הליבה FreeBSD להוביל צוות ייעודי מבוסס באירופה. לכה היא בייצור ב twitter, heroku ועוד רבים. - Barry
הדוגמה הפשוטה ביותר של מטמון-באסטר היא לצרף מספר גירסה במחרוזת שאילתה למשאב סטטי, כך ש- style.css הופך ל- style.css? 123. כאשר אתה רוצה לדחוף גירסה חדשה של הקובץ אתה משנה את כתובת האתר של המשאב כדי style.css? 124 ועכשיו את המטמון יהיה להרים אותו כנכס חדש לגמרי להיות במטמון בנפרד. Apache ישמש את הקובץ style.css עם כל מחרוזת שאילתה המצורפת, ולכן לא נדרשים שינויים בקובץ בפועל. - chmac
אם זה אפשרי, עדיף לשים את המטמון באסטר לתוך שם הקובץ עצמו, כגון style.v123.css משום שכמה מטמונים לא ישמור מטמון על בקשות שמכילות מחרוזת שאילתה. - Noah McIlraith


אם תבטל את הדפים הנבחרים, תוכל להשתמש בתיקיה "cache_purge" עבור nginx-0.8.x אשר עושה בדיוק את מה שאתה רוצה;)

זה זמין כאן.


7
2017-11-17 07:38





רוב כלי המטמון (Citrix) מאפשרים ריענון כוח (Ctrl + r) כדי לאכלס מחדש דף שמור.

הנה טריק מצאתי לעשות משהו דומה nginx.

server  {
        # Other settings
        proxy_pass_header       Set-Cookie; # I want to cache logged-in users
        proxy_ignore_headers    X-Accel-Redirect;
        proxy_ignore_headers    X-Accel-Expires Expires Cache-Control;
        if ($http_cache_control ~ "max-age=0") {set $eac 1;}
        proxy_cache_bypass $eac;
}

זה מניח שכאשר אתה עושה Ctrl + r בדפדפן שלך, הכותרת Cache-Control יש max-age = 0 לפי בקשתו. אני יודע ש- Chrome מבצע זאת, אך לא ניסיתי בדפדפנים אחרים. הוספת שדות כותרת נוספים יכול להיות קל, רק על ידי הוספת יותר אם הצהרות להגדיר את $eac משתנה ל 1.


6
2018-04-10 23:02





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


4
2018-06-24 02:25





אני מאמין NginxHttpProxyModule הוא מסוגל בקשות HTTP heheing. חפש את ההוראות החל מ:

proxy_cache

כן, ניתן לשלוט בהתנהגות המטמון באמצעות הנחיות כגון:

proxy_cache_valid

3
2018-06-24 10:12