এনগিনেক্স ডেটা ক্যাশে করছে না


16

আমার একটি এনজিঙ্ক্স প্রক্সিটির পিছনে একটি REST এপিআই রয়েছে। প্রক্সিং ঠিকঠাক কাজ করে তবে আমি কোনও প্রতিক্রিয়া ক্যাশে করতে অক্ষম। কোন সাহায্যের অনেক প্রশংসা হবে:

Nginx কনফিগারেশন:

worker_processes  10;
error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
        proxy_cache_path /path/to/cache/dir keys_zone=one:60m;
        proxy_cache_methods GET HEAD POST;

     upstream backend {
        server server1 backup;
        server server2 weight=5;
    }
    access_log  logs/access.log;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       7076;
        server_name  localhost;
        #charset koi8-r;
        access_log  logs/host.access.log;

        location / {
            add_header 'Access-Control-Allow-Origin' *;
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Headers' 'Content-Type,Accept';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

            proxy_cache one;
            proxy_cache_key $host$uri$is_args$args;

            add_header X-Proxy-Cache $upstream_cache_status;

            proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
            proxy_ignore_headers Set-Cookie;
            proxy_ignore_headers Cache-Control;

            proxy_hide_header Cache-Control;
            proxy_hide_header Set-Cookie;
            proxy_pass http://backend;
        }
    }
}

আমি যা চেষ্টা করেছি তা বিবেচনা না করেই প্রক্সি-ক্যাশে সবসময় একটি এমআইএসএস হিসাবে ফিরে আসে:

অনুরোধ শিরোনাম হ'ল:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:nginxserver:portnumber
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36

প্রতিক্রিয়া শিরোনাম হ'ল:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type,Accept
Access-Control-Allow-Methods:GET, POST, OPTIONS
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Type:text/plain;charset=UTF-8
Date:Wed, 15 Oct 2014 16:30:18 GMT
Server:nginx/1.7.4
Transfer-Encoding:chunked
X-Proxy-Cache:MISS

আমার সন্দেহ হ'ল এটি ক্লায়েন্টের শিরোলেখগুলির সাথে কিছু, তবে আমি কার্লের মাধ্যমে কলটি প্রদান করে এবং শিরোনামগুলি দেখে নিলেও কোনও প্রতিক্রিয়া নেই is

আগাম ধন্যবাদ


1
অনুরোধ শিরোনামে: Cache-Control:max-age=0... এর অর্থ "এই অনুরোধটিকে ক্যাশে করবেন না"।
নাথান সি

1
ক্লায়েন্ট শিরোনামে আমার তা উপেক্ষা করার কোনও উপায় আছে? এটি যদিও
কার্লের

@ ব্যবহারকারী 2630270 প্রাথমিক অনুরোধ URL এবং পদ্ধতি কী? মধ্যবর্তী প্রতিক্রিয়া কী?
জাভিয়ার লুকাস

উপরের শিরোনামগুলির জন্য @ জাভিয়ারলুসাসের পদ্ধতিগুলি হ'ল GET হ'ল যেহেতু আমি এখন ক্রম সমস্যাটি সমাধান করছি। অনুরোধটি nginxserver এর লাইন বরাবর কিছু : পোর্ট / সোলার / আসাদ / নির্বাচন? কিউ = *: * * আমি কীভাবে মধ্যবর্তী প্রতিক্রিয়া ক্যাপচার করব জানি না। আমি এই বিষয়ে নির্দেশিকা কোথায় পেতে পারি?
ব্যবহারকারী 2630270

যদি আমি ঠিক একই প্রশ্নের সাথে এনজিনেক্স না দিয়ে সরাসরি হিট করি তবে আমি নিম্নলিখিত প্রতিক্রিয়া শিরোনামগুলি পেয়েছি: সামগ্রী-প্রকার: পাঠ্য / প্লেইন; চরসেট = ইউটিএফ -8 স্থানান্তর-এনকোডিং: খণ্ডিত
ব্যবহারকারী 2630270

উত্তর:


45

প্রতিক্রিয়াটি কতটা সময় বৈধ এবং ক্যাশে থেকে অবশ্যই পরিবেশন করা উচিত তার জন্য আপনি এনজিনেক্সকে জানাননি।

এটি অবশ্যই proxy_cache_validনির্দেশের সাথে নির্দিষ্ট করতে হবে ।

proxy_cache one;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 10m;

তবে, এটি পোষ্ট অনুরোধগুলির জন্য কাজ করবে না কারণ আপনার কাছে কোনও ক্যাশে কী নেই যা একই URL এ অন্যের কাছে পোষ্ট অনুরোধের থেকে আলাদা হয় যদি তাদের কাছে একই বিষয়বস্তু না থাকে।

সুতরাং আপনাকে এতে ক্যাশে কীটি সামঞ্জস্য করতে হবে $host$request_uri|$request_body। আপনাকে ক্যাশে আকার ( proxy_cache_pathপরামিতি max_size) এবং প্রক্সি প্রতিক্রিয়া বাফারটি পর্যবেক্ষণ করতে হবে proxy_buffer_sizeযাতে এটি আপনার প্রয়োজন অনুসারে হয়।


ভাল লাগল, থ্যাঙ্কস ম্যান! এটা কাজ করেছে. আশা করি এটি কোথাও আরও স্পষ্টভাবে ডকুমেন্টেড ছিল।
ব্যবহারকারী 2630270

যদি এই নির্দেশটি সেট না করা থাকে তবে কোনও প্রতিক্রিয়া ক্যাশে হবে। তবে একটি অ্যাপ্লিকেশনটির শিরোনাম এক্স-অ্যাক্সেল-এক্সপায়ার, ক্যাশে-নিয়ন্ত্রণ বা মেয়াদ শেষ হয়ে যায়। কমপক্ষে, সেট-কুকি এবং ভেরি ক্যাশে এড়াতে পারে। এই তথ্যগুলি ডকটিতে প্রকাশিত হয়েছে। আমি পরীক্ষার জন্য একটি সহজ স্ক্রিপ্ট তৈরি করেছি কারণ আমার কাঠামো, লারাভেল সর্বদা উপরের শিরোনামগুলি প্রেরণ করে।
ভিক্টর আগুইলার

এটি জিয়াভিয়ার লুকাস কাজ করেছিল। ধন্যবাদ। আমি পৃথক এইচটিটিপি কোডগুলির জন্য একটি পার্থক্য ক্যাশে সময় মানও যুক্ত করেছি: প্রক্সি_ক্যাচি_অডিয়াল 200 302 10 মি; ////// প্রক্সি_কাছে_অর্থ 404 1 মি;
Deunz

16

থেকে: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_ अवैध

সিনট্যাক্স: প্রক্সি_ক্যাচি_ বৈধ [কোড ...] সময়;

...

ক্যাচিংয়ের পরামিতিগুলি প্রতিক্রিয়া শিরোনামেও সরাসরি সেট করা যেতে পারে। দিকনির্দেশনা ব্যবহার করে ক্যাচিংয়ের সময় সেট করার চেয়ে এটির বেশি অগ্রাধিকার রয়েছে।

  • "এক্স-অ্যাক্সেল-মেয়াদ শেষ হবে" শিরোনাম ক্ষেত্রটি সেকেন্ডের মধ্যে প্রতিক্রিয়ার ক্যাচিং সময় সেট করে। শূন্য মান একটি প্রতিক্রিয়ার জন্য ক্যাশে অক্ষম করে। যদি মানটি @ উপসর্গ দিয়ে শুরু হয় তবে এটি ইপোকের পর থেকে কয়েক সেকেন্ডে একটি নিখুঁত সময় সেট করে, যার প্রতিক্রিয়া ক্যাশে করা যেতে পারে।
  • যদি শিরোনামটি "এক্স-অ্যাক্সেল-মেয়াদ শেষ" ক্ষেত্রটি অন্তর্ভুক্ত না করে, শিরোনাম ক্ষেত্রগুলিতে "মেয়াদ শেষ হবে" বা
    "ক্যাশে-নিয়ন্ত্রণ" ক্ষেত্রে ক্যাশিংয়ের প্যারামিটার সেট করা যেতে পারে ।
  • যদি শিরোনামটিতে "সেট-কুকি" ক্ষেত্র অন্তর্ভুক্ত থাকে তবে এই জাতীয় প্রতিক্রিয়া ক্যাশে হবে না।
  • যদি শিরোনামটিতে "মান" * এর সাথে বিশেষ মান "*" অন্তর্ভুক্ত থাকে তবে এ জাতীয় প্রতিক্রিয়া ক্যাশে হবে না (1.7.7)। যদি
    শিরোনামটিতে অন্য মান সহ "ভেরি" ক্ষেত্র অন্তর্ভুক্ত থাকে
    তবে অনুরোধের শিরোনাম ক্ষেত্রগুলিকে (1.7.7) বিবেচনা করে এই জাতীয় প্রতিক্রিয়া ক্যাশে হবে ।

এর মধ্যে এক বা একাধিক প্রতিক্রিয়া শিরোনাম ক্ষেত্রগুলির প্রসেসিং প্রক্সি_গাইনোর_হেডার্স নির্দেশিকা ব্যবহার করে অক্ষম করা যেতে পারে ।

বেশিরভাগ ওয়েব অ্যাপ্লিকেশন Set-Cookieশিরোনাম সেট করে , তাই কোনও প্রতিক্রিয়া ক্যাশে হবে না। এটি ঠিক করতে, এই নির্দেশটি ব্যবহার করুন:

proxy_ignore_headers Set-Cookie;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.