ইউআরআই অনুরোধের ভিত্তিতে HAproxy 1.6 এর সাথে প্রতিক্রিয়া শিরোনাম কীভাবে যুক্ত করবেন?


9

টমক্যাট সার্ভারের সামনে লোড ব্যালেন্সার হিসাবে আমি HAproxy 1.6 ব্যবহার করি।

ইউআরআই অনুরোধের ভিত্তিতে আমাকে প্রতিক্রিয়া শিরোনাম যুক্ত করতে হবে।

উদাহরণস্বরূপ, আমি Cache-Control public,max-age="600"যখন অনুরোধ ইউরি হ'ল /apiতবে যখন অনুরোধ ইউরি অন্য কোনও কিছু হয় তখন আমি প্রতিক্রিয়া শিরোনামটি যুক্ত করতে চাই ।

  • আমার প্রথম চেষ্টাটি শিরোনামগুলি HTTP- প্রতিক্রিয়াতে যুক্ত করতে পাথের উপর ভিত্তি করে acl ব্যবহার করছিল:

    acl api path_reg ^/api/(.*)$
    http-response add-header Cache-Control public,max-age="600" if api
    

    আমি যখন হ্যাপ্রোক্সিটি শুরু করি তখন আমার -dসতর্কতা ছিল যে path_reg(বা path) এর সাথে বেমানান http-response:

    Dec  6 15:22:29 ip-10-30-0-196 haproxy-systemd-wrapper[315]: 
    [WARNING] 340/152229 (2035) : parsing 
    [/etc/haproxy/haproxy.cfg:78] : acl 'api' will never match because 
    it only involves keywords that are incompatible with 'backend 
    http-response header rule'
    
  • আমি এর http-requestপরিবর্তে শিরোনামটি যুক্ত করার চেষ্টা করেছি http-response:

    acl api path_reg ^/api/(.*)$
    http-request add-header Cache-Control public,max-age="600" if api
    

    এটি কাজ করেছে তবে প্রতিক্রিয়াতে আমার এটি দরকার

  • আমি হ্যাপ্রোক্সি ভেরিয়েবলগুলি ব্যবহার করার চেষ্টাও করেছি:

    http-request set-var(txn.path) path
    acl path_acl %[var(txn.path)] -m ^/api/(.*)$
    http-response add-header Cache-Control public,max-age="600" if path_acl
    

    কিন্তু যখন আমি চেষ্টা করি এইচএপ্রক্সিটি ইভেন্ট শুরু হয় না এবং আমার নিম্নলিখিত ত্রুটি থাকে:

    [ALERT] 340/162647 (2241) : parsing [/etc/haproxy/haproxy.cfg:48] 
    : error detected while parsing ACL 'path_acl' : unknown fetch 
    method '%[var' in ACL expression '%[var(txn.path)]'.
    

আমি প্রতিক্রিয়ার শিরোনাম সেট করতে কীভাবে একটি এসিএলে অনুরোধের পাথটি ব্যবহার করতে পারি?

উত্তর:


9

এটা চেষ্টা কর:

http-response set-header Cache-Control no-cache,\ max-age=600 if { capture.req.uri -m beg /api/ }

capture.req.uriপ্রতিক্রিয়া প্রক্রিয়াজাত না হওয়া পর্যন্ত অব্যাহত থাকে, বিপরীতে path, যা না ঘটে।

কয়েকটি নোট:

এই উদাহরণটি বেনামে এসিএল ব্যবহার করে। আপনি এটি একটি নামযুক্ত এসিএল দিয়েও করতে পারেন তবে এটিতে 2 টি লাইন লাগে।

আপনার সর্বোচ্চ-বয়সের মানটি কেন উদ্ধৃত করা উচিত সে সম্পর্কে আমি সচেতন হওয়ার কোনও কারণ নেই।

আপনি সম্ভবত চান না add-header, আপনি চান set-header, যা নিশ্চিত করে যে যদি কেউ ইতিমধ্যে উপস্থিত থাকে তবে তা সরানো হবে।

acl path_acl %[var(txn.path)] -m ^/api/(.*)$সম্ভবত সঠিকভাবে লেখা হয়েছে acl path_acl var(txn.path) -m ^/api/(.*)$। হ্যাপ্রোক্সি কখন প্রত্যাশা করে %[ ]এবং কখন তা দেয় না সে সম্পর্কে একটু চতুর । আমি নিশ্চিত যে একটি প্যাটার্ন রয়েছে, তবে আমি কী তা ঠিক পরিষ্কার করছি না।


1
আপনার প্রতিক্রিয়ার জন্য আপনাকে ধন্যবাদ. ব্যবহার করে উভয় পদ্ধতি capture.req.uriএবং ভেরিয়েবল যখন সরানোর %[ ]মধ্যে acl̀কাজ করছে। আপনি প্রায় max-ageমান এবং এর set-headerপরিবর্তে উদ্ধৃতি সম্পর্কে ঠিক add-header
jMLrt

1
লক্ষ করুন যে অভ্যন্তরীণভাবে, আমি অনুরূপ কিছু করি, যদি ব্যাক-এন্ড কোনও Cache-Controlপ্রতিক্রিয়া না দেয় : আমি Cache-Control-Authority: implicit, gatewayবিকাশকারী / সমস্যা সমাধানকারী / পরীক্ষককে একটি শিরোনাম দিতে একটি শিরোনাম যুক্ত করি যে আমি, প্রক্সি সেই শিরোনাম সরবরাহ করছি, অ্যাপ্লিকেশনটি নয় , কিন্তু অ্যাপ্লিকেশনটি কেবল তার নিজস্ব শিরোনাম সরবরাহ করে আমাকে অক্ষম করতে পারে। মনে রাখবেন এই শিরোনামটি কোনও মানসম্মত নয় - আমি এই অ্যাপটি নয়, দলের অন্যদের সচেতন হতে সাহায্য করার জন্য এটি তৈরি করেছি। প্রক্সিগুলি এতটা ঝামেলা-মুক্ত যে এগুলি ভুল পথে চালানোর অভ্যাস আছে যে তারা আদৌ পথে আছে।
মাইকেল - sqlbot
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.