හැඹිලි ප්‍රතිලෝම ප්‍රොක්සියක් ලෙස Nginx සැකසෙන්නේ කෙසේද?


146

Nginx එහි ප්‍රතිලෝම ප්‍රොක්සි විශේෂාංගයට හැඹිලි එකතු කර ඇති බව මෑතකදී මට අසන්නට ලැබුණි. මම අවට බැලූ නමුත් ඒ ගැන වැඩි තොරතුරු සොයාගත නොහැකි විය.

මට Apache / Jjango ඉදිරිපිට Nginx හැඹිලි ප්‍රතිලෝම ප්‍රොක්සියක් ලෙස සැකසීමට අවශ්‍යයි: සමහර (නමුත් සියල්ලම නොවේ) ගතික පිටු සඳහා Apgin වෙත Nginx ප්‍රොක්සි ඉල්ලීම් ලබා ගැනීමට, පසුව ජනනය කළ පිටු හැඹිලිගත කර එම පිටු සඳහා හැඹිලි වලින් ඉල්ලීම් කරන්න.

හැඹිලිය ආකාර දෙකකින් අවලංගු කිරීමට මට අවශ්‍යය:

  1. හැඹිලි අයිතමයේ කල් ඉකුත් වීමේ දිනයක් සකසන්න
  2. හැඹිලි අයිතමය පැහැදිලිවම අවලංගු කිරීමට. උදා: මගේ ජැන්ගෝ බැකෙන්ඩ් විසින් යම් දත්ත යාවත්කාලීන කර ඇත්නම්, බලපෑමට ලක් වූ පිටුවල හැඹිලිය අවලංගු කරන ලෙස මට එන්ජින්ක්ස් වෙත පැවසීමට අවශ්‍යය

ඒ සඳහා Nginx සැකසිය හැකිද? කොහොමද?


පරීක්ෂා කර නැත, නමුත් gumroad.com/l/ngx_purge වෙතින් : "ngx_purge යනු Nginx සඳහා පිරිසිදු Lua මොඩියුලයක් වන අතර එමඟින් පරිශීලකයාට nginx හැඹිලියෙන් වස්තුව පිරිසිදු කිරීමට ඉඩ ලබා දේ."
ජයිම් හබ්ලුට්සෙල්

Answers:


98

හැඹිලි අයිතම පැහැදිලිවම අවලංගු කිරීමට ක්‍රමයක් ඇතැයි මම නොසිතමි, නමුත් ඉතිරිය කරන්නේ කෙසේද යන්න පිළිබඳ උදාහරණයක් මෙහි දැක්වේ. යාවත්කාලීන කිරීම: තවත් පිළිතුරක පියොටර් සඳහන් කළ පරිදි, ඔබට භාවිතා කළ හැකි හැඹිලි පිරිසිදු කිරීමේ මොඩියුලයක් තිබේ. ඔබට nginx හි proxy_cache_bypass භාවිතා කර හැඹිලි අයිතමයක් නැවුම් කිරීමට බල කළ හැකිය - වැඩි විස්තර සඳහා චෙරියන්ගේ පිළිතුර බලන්න .

මෙම වින්‍යාසය තුළ, හැඹිලි නොකළ අයිතම example.net වෙතින් ලබාගෙන ගබඩා කරනු ලැබේ. හැඹිලි අනුවාද වලංගු නොවන තෙක් අනාගත ගනුදෙනුකරුවන්ට ලබා දෙනු ඇත (මිනිත්තු 60).

ඔබගේ හැඹිලි පාලනය සහ කල් ඉකුත් වන 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;
    }
  }
}

7
20k / req / s නොමැති නව යෙදුම් සඳහා මෙය සාධාරණ පළමු පියවරකි.

5
Ar බැරී දෙවන පියවර කුමක් විය යුතුද?
ජර්ගන් පෝල්

42
E ලෙගිට් - මම නොදනිමි, නමුත් සාම්ප්‍රදායිකව අවසාන පියවර වන්නේ “ලාභය” :-)
ස්ටීවන් සී

කනගාටුවට කරුණක් නම්, එය nginx 1.11 සමඟ ක්‍රියා නොකරයි. අවසාන යාවත්කාලීන කිරීම මීට වසර 3 කට පමණ පෙර බැවින්, මෙය තවදුරටත් විසඳුම නොවන බව පෙනේ.
izogfif

inactive=600mඅදහස් කරන්නේ කුමක්ද : නැත inactiveකාලය ගත සිතමු? `[inactive=time]
කිසිදිනක

48

හැඹිලි පිටු හරහා ඔබට විශේෂයෙන් අවලංගු කළ හැකිය

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පිටුව හැඹිලියෙන්ද නැද්ද යන්න පරීක්ෂා කිරීමට භාවිතා කළ හැකිය.


1
මෙය හැඹිලි පිටු යාවත්කාලීන කළ හැක්කේ නව පිටුව හැඹිලිගත කළ හැකි විට පමණි. ඔබ පිටුවක් ඉවත් කර ඇත්නම් (404 හෝ වෙනත් දෝෂ දැන් බැකෙන්ඩ් මඟින් සපයනු ලැබේ), පිටුව දැන් සෙට්-කුකී හෝ "අන්තර්ගත-පාලනය: පුද්ගලික" ශීර්ෂයක් යවයි, හැඹිලි අන්තර්ගතය "අවලංගු නොවේ".
rbu

37

මම ඔබට යෝජනා කරන්නේ වාර්නිෂ් උත්සාහ කර බලන්න. වාර්නිෂ් විශේෂයෙන් නිර්මාණය කර ඇත්තේ ප්‍රතිලෝම ප්‍රොක්සි හැඹිලියක් ලෙස ය. එය ඔබගේ පළමු ඉල්ලීම සපුරාලන මූල සේවාදායකයෙන් ඔබ යවන සියලුම හැඹිලි පාලන ශීර්ෂයන්ට ගරු කරනු ඇත.

ඔබගේ දෙවන ඉල්ලීම සඳහා, පැහැදිලි අවලංගු කිරීම. මගේ ප්‍රබල නිර්දේශය නම්, ඔබට අවලංගු කිරීමට අවශ්‍ය සම්පතේ url එකේ නම වෙනස් කිරීම, ගොනුව නැවත නම් කිරීම හෝ යම් ආකාරයක විමසුම් නූල් හැඹිලි බස්ටර් භාවිතා කිරීම ය. වාර්නිෂ්ගේ හැඹිලියෙන් PURGEසම්පත් ඉවත් කරන මෙහෙයුමක් වාර්නිෂ් සතුව ඇත , නමුත් එය ඔබ සහ පරිශීලකයා අතර වෙනත් හැඹිලි පාලනය කිරීමට ඉඩ නොදේ. සම්පතක් පැහැදිලිව පිරිසිදු කිරීමට ඔබට අවශ්‍ය යැයි ඔබ පවසා ඇති පරිදි, සම්මත http පාලන ශීර්ෂයන් ඔබට උදව් නොකරනු ඇත. එවැනි අවස්ථාවන්හිදී සම්පතක් හැඹිලි පරාජය කිරීම සඳහා වඩාත්ම මෝඩ ක්‍රමය නම් එය නැවත නම් කිරීමයි.


"ගොනුව නැවත නම් කිරීම හෝ යම් ආකාරයක විමසුම් නූල් හැඹිලි බස්ටර් භාවිතා කිරීම" යන්නෙන් ඔබ අදහස් කළේ කුමක්දැයි ඔබට පැහැදිලි කළ හැකිද? PURGE වැනි මෙහෙයුමක් භාවිතා කිරීම හොඳ අදහසක් නොවන්නේ මන්දැයි මට තේරෙන බව මට විශ්වාස නැත.
අඛණ්ඩව

5
වාර්නිෂ් සඳහා +1. කාර්යය සඳහා නිවැරදි මෙවලම් භාවිතා කිරීම සැමවිටම වඩා හොඳය.
ටොම් ඕ'කොනර්

4
@ බෙලෝ: කාර්ය සාධනය සහ බහුකාර්යතාව යන ක්ෂේත්‍රවල වාර්නිෂ් ස්පර්ශ කිරීමේ බලාපොරොත්තුවක් නැති තරම්ය. මෙයට ප්‍රමුඛ පෙළේ ෆ්‍රීබීඑස්ඩී කර්නල් සංවර්ධකයෙකු සහ යුරෝපය පදනම් කරගත් කැපවූ කණ්ඩායමක් සහාය දක්වයි. වාර්නිෂ් ට්විටර්, හෙරොකු සහ තවත් බොහෝ දේවල නිෂ්පාදනය වෙමින් පවතී.

2
හැඹිලි-බස්ටරයක සරලම උදාහරණය වන්නේ විමසුම් නූලක අනුවාද අංකයක් ස්ථිතික සම්පතක් සඳහා එකතු කිරීමයි, එබැවින් style.css style.css? 123 බවට පත්වේ. ඔබට ගොනුවේ නව අනුවාදයක් තල්ලු කිරීමට අවශ්‍ය වූ විට ඔබ සම්පතෙහි යූආර්එල් එක ස්ටයිල් සීඑස්එස් 124 ලෙස වෙනස් කරන අතර දැන් හැඹිලි එය වෙනම හැඹිලිගත කිරීම සඳහා සම්පූර්ණයෙන්ම නව වත්කමක් ලෙස තෝරා ගනු ඇත. Apache විසින් ඕනෑම විමසුම් නූලක් එකතු කර ඇති style.css ගොනුවට සේවය කරනු ඇත, එබැවින් සත්‍ය ගොනුවේ කිසිදු වෙනසක් අවශ්‍ය නොවේ.
chmac

3
හැකි නම්, style.v123.cssසමහර හැඹිලි විමසුම් දාමයක් ඇති ඉල්ලීම් හැඹිලිගත නොකරන නිසා , හැඹිලි බස්ටරය ගොනු නාමයටම දැමීම වඩාත් සුදුසුය .
නෝවා මැක්ල්රයිත්

10

බොහෝ හැඹිලි මෙවලම් (සිට්‍රික්ස්) හැඹිලි පිටුවක් නැවත ජනනය කිරීමට බල-නැවුම්බව (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 කරන විට, හැඹිලි-පාලන ශීර්ෂය එහි ඉල්ලීමෙහි උපරිම-වයස = 0 ඇති බව උපකල්පනය කරයි. ක්‍රෝම් මෙය කරන බව මම දනිමි, නමුත් මම වෙනත් බ්‍රව්සර්වල උත්සාහ කර නැත. $eacවිචල්‍යය 1 ට සැකසෙන ප්‍රකාශ නම් තවත් එකතු කිරීමෙන් තවත් ශීර්ෂ ක්ෂේත්‍ර එකතු කිරීම පහසුය .


8

තෝරාගත් පිටු අවලංගු කිරීම සඳහා ඔබට nginx-0.8.x සඳහා "cache_purge" පැච් භාවිතා කළ හැකිය, එය ඔබට අවශ්‍ය දේ අතිශයින්ම කරයි;)

එය මෙහි ඇත.


5

හැඹිලි කිරීම nginx හි ඉතා නව කාර්යයකි (දැනට එය එතරම් හොඳින් ලේඛනගත කර නොමැත), නමුත් නිෂ්පාදනයේදී භාවිතා කිරීමට තරම් ස්ථාවර වේ.


4

Http ඉල්ලීම් ඉටුකිරීමට NginxHttpProxyModule සමත් බව මම විශ්වාස කරමි . ආරම්භ වන නියෝග සඳහා බලන්න:

proxy_cache

ඔව්, වැනි විධානයන් හරහා හැඹිලි හැසිරීම පාලනය කළ හැකිය:

proxy_cache_valid

3

ඔබට එය මත ලේඛන සොයාගත නොහැකි වීම මත පදනම්ව, නිෂ්පාදනයේදී එය මත යැපීම ගැන මම ටිකක් විමසිලිමත් වන්නෙමි. ඔබ වාර්නිෂ් ගැන සලකා බැලුවාද? එය මගේ "ප්‍රතිලෝම ප්‍රොක්සි වල එන්ජීඑක්ස්", කුඩා, සැහැල්ලු, එක් රැකියාවක් කිරීම සහ එය හොඳින් කිරීම.


මෙම ලියකියවිලි මෙහි ඇත: wiki.nginx.org/NginxHttpProxyModule#proxy_cache
rmalayter

2

ඔබ ඔබේ යෙදුමට eTags භාවිතා කර එය ඉදිරිපිට nginx තැබුවහොත් එය ඔබ වෙනුවෙන් කල් ඉකුත්වීම ගැන සැලකිලිමත් වනු ඇත, මන්ද eTag වෙනස් වුවහොත් එය හැඹිලිය අවලංගු වේ.


ඇත්තටම? එය පෙනෙන්නේ එන්ග්නික්ස් එටැග් සමඟ ගැලපෙන අතර යාවත්කාලීන කළ එටැග් තිබේදැයි සොයා බැලීමට කිසි විටෙකත් යෙදුම සමඟ කතා නොකරයි.
ජෝන් නයිගල්

2

ඔබට බහු විධානයන් / පරාමිතීන් සමඟ Nginx හි හැඹිලි කල් ඉකුත්වීම පාලනය කළ හැකිය:

  • proxy_cache_valid 200 302 10m;
  • පහත HTTP ශීර්ෂයන්ගෙන් එකක් එක් කිරීම (ප්‍රමුඛතාවය වැදගත් - මගේ බ්ලොග් සටහන බලන්න ):
    • Expires
    • Cache-Control
    • X-Accel-Expires
  • මෙම inactiveතුළ පරාමිතිය proxy_cache_pathඋපදෙස්:

    proxy_cache_path /data/nginx/cache keys_zone=one:10m inactive=60m;

ඔබට Nginx හැඹිලි ගැන වැඩි විස්තර දැන ගැනීමට අවශ්‍ය නම් මම මගේ බ්ලොග් සටහන නිර්දේශ කරමි .

මෙම අංගය පවතින්නේ Nginx Plus (Nginx හි වාණිජ සංස්කරණය) තුළ පමණක් බැවින් පිරිසිදු කිරීමේ මාතෘකාව ඇත්තෙන්ම සිත්ගන්නා සුළුය. මම ඇත්තටම කැමතියි @ රැන්ඩි-වොලස් පිළිතුරට. නමුත් ngx_cache_purge මොඩියුලය වැනි වෙනත් හැකියාවන් ද ඇත .

ඔබට කළ හැකි සරලම දෙය නම් හැඹිලි ගොනුව අතින් ඉවත් කිරීමයි:

  • ඔබේ හැෂ් යතුර ජනනය කරන්න:

    echo -n ‘httpczerasz.com/time.php’ | md5sum
    
  • ගොනු පද්ධතියෙන් ගොනුව ඉවත් කරන්න:

    rm /data/nginx/cache/1/27/2bba799df783554d8402137ca199a271
    

2

අනාගත අමුත්තන් සඳහා: මේ අතර nginx ප්‍රතිවිකුණුම් ප්‍රොක්සිය තුළ හැඹිලි ඒකාබද්ධ වී ඇති අතර ලියකියවිලි ලබා ගත හැක්කේ:

වාක්‍ය ඛණ්ඩය: proxy_cache කලාපය | කපා;

පෙරනිමිය: proxy_cache off;

සන්දර්භය: http, සේවාදායකය, ස්ථානය

හැඹිලි සඳහා භාවිතා කරන හවුල් මතක කලාපයක් අර්ථ දක්වයි. එකම කලාපය ස්ථාන කිහිපයක භාවිතා කළ හැකිය. පරාමිති අගයට විචල්යයන් අඩංගු විය හැකිය (1.7.9). පෙර පරාමිති මට්ටමෙන් උරුම වූ හැඹිලිය අක්‍රීය පරාමිතිය අක්‍රීය කරයි.


හායි තාරික්, සාක්ෂාත් කරගත යුතු දේ පිළිබඳව ප්‍රශ්නය ඉතා නිශ්චිත වූ අතර එය 'හුදෙක් හැඹිලිය සක්‍රීය කරන්න' යන්නෙන් ඔබ්බට ය.
asdmin

0
fastcgi_cache_path / opt / nginx-cache levels = 2: 2 key_zone = img: 50m;

    ස්ථානය / img / {
        fastcgi_pass $ පසුබිම;
        fcgi_params ඇතුළත් කරන්න;
        fastcgi_intercept_errors off;   
        fastcgi_cache_key $ server_addr $ request_uri;       
        fastcgi_cache img;
        fastcgi_cache_valid ඕනෑම 1m;
        fastcgi_hide_header Set-Cookie;
    }

මෙය / img / පිහිටීම සඳහා හැඹිලියක් නිර්මාණය කරයි. එය / opt / nginx-cache තුළ ඇත. වස්තු මිනිත්තු 1 ක් හැඹිලිගත කර ඇත.

ඔබට ඕනෑම එකක් වෙනුවට වෙනස් ප්‍රතිචාර කේත ලිවිය හැකිය.

දැන් ඔබට තෝරාගත් පිටු සඳහා හැඹිලිය අවලංගු කළ නොහැක. සමහර විට 0.8.x වලින් එය කළ හැකි වනු ඇත.


මුල්ම ප්‍රශ්නය වූයේ nginx විසින් හසුරුවනු ලබන fastcgi යෙදුම ඉදිරිපිට නොව Apache ඉදිරිපිට nginx භාවිතා කිරීමයි.
ග්‍රැහැම් ඩම්පල්ටන්

0

Ncache නමින් nginx ප්ලගිනයක් ඇත, එය "nginx වෙබ් සේවාදායකයේ වෙබ් හැඹිලි පද්ධති පදනමක් යැයි කියනු ලැබේ . දැල්ලන්ට වඩා වේගවත් හා කාර්යක්ෂම වේ."

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.