HAProxy reqrep ব্যাকএন্ড অনুরোধে ইউআরআই সরান


27

HAProxy পুনঃসংযোগ সম্পর্কিত বাস্তব দ্রুত প্রশ্ন। আমি অনুরোধটি যে ব্যাকএন্ডে প্রেরণ করা হয়েছে তা আবার লিখতে / প্রতিস্থাপন করার চেষ্টা করছি।

আমার নিম্নোক্ত উদাহরণ ডোমেন এবং ইউআরআই রয়েছে, উভয়ই একই ডোমেন নাম ভাগ করে নিচ্ছে তবে বিভিন্ন ব্যাকএন্ড ওয়েব সার্ভার পুল রয়েছে।

http://domain/web1
http://domain/web2

আমি চাইব ওয়েব 1 ব্যাকএন্ড ওয়েবফার্ম 1 এ, এবং ওয়েব 2 ওয়েবফর্ম 2 এ যেতে চাই। বর্তমানে এটি ঘটে। তবে আমি অনুরোধটি ব্যাকএন্ডে প্রেরিত হওয়ার পরে আমি ওয়েব 1 বা ওয়েব 2 ইউআরআই বন্ধ করতে চাই।

এখানে আমার haproxy.cfg

frontend webVIP_80
        mode http
        bind    :80
        #acl routing to backend
        acl web1_path path_beg /web1
        acl web2_path path_beg /web2

        #which backend
        use_backend webfarm1 if web1_path
        use_backend webfarm2 if web2_path
        default_backend webfarm1

backend webfarm1
        mode http
        reqrep ^([^\ ]*)\ /web1/(.*)     \1\ /\2
        balance roundrobin
        option httpchk HEAD /index HTTP/1.1\r\nHost:\ example.com
        server webtest1 10.0.0.10:80 weight 5 check slowstart 5000ms
        server webtest2 10.0.0.20:80 weight 5 check slowstart 5000ms
backend webfarm2
        mode http
        reqrep ^([^\ ]*)\ /web2/(.*)     \1\ /\2
        balance roundrobin
        option httpchk HEAD /index HTTP/1.1\r\nHost:\ example.com
        server webtest1-farm2 10.0.0.110:80 weight 5 check slowstart 5000ms
        server webtest2-farm2 10.0.0.120:80 weight 5 check slowstart 5000ms

যদি আমি এটিতে যাই http://domain/web1বা http://domain/web2আমি এটি ত্রুটিযুক্ত লগগুলিতে দেখতে পাই যে প্রতিটি ব্যাকএন্ডে একটি সার্ভারে অনুরোধটি রিকাস্ট যথাক্রমে রিসোর্স / ওয়েব 1 বা / ওয়েব 2 এর জন্য। সুতরাং আমি বিশ্বাস করি যে আমার নিয়মিত প্রকাশের সাথে এখানে কিছু ভুল আছে, যদিও আমি এটি ডকুমেন্টেশন থেকে অনুলিপি করে আটকিয়েছি। http://code.google.com/p/haproxy-docs/wiki/reqrep

সংক্ষিপ্তসার: আমি ইউআরআই এর উপর ভিত্তি করে ট্র্যাফিক রুট করার চেষ্টা করছি, তবে আমি চাই যে HAProxy ইউআরআই কে সরিয়ে নেবে যখন এটি ব্যাকএন্ড পুলটিতে অনুরোধটি প্রেরণ করে।

ধন্যবাদ!

-Jim


এখন একটি সম্পাদনা এবং মন্তব্য বোতাম আছে।
ক্রিস এস

1
জিম, আপনার মন্তব্য করতে সমস্যা হচ্ছে কারণ আপনি এই প্রশ্নটি তৈরি করার চেয়ে আলাদা অ্যাকাউন্টে লগ ইন করেছেন। দয়া করে চেষ্টা করুন এবং আপনার লগইন অ্যাকাউন্টটি ধারাবাহিক রাখুন যাতে ভবিষ্যতে এটি না ঘটে। আমি এটি সংশোধন করার জন্য একজন পরিচালককে পতাকাঙ্কিত করেছি।
MDMarra

উত্তর:


28

তোমার এটা আছে:

reqrep ^([^\ ]*)\ /web1/(.*)     \1\ /\2

আমি মনে করি আপনি এটি চান:

reqrep ^([^\ ]*\ /)web1[/]?(.*)     \1\2

পার্থক্যটি হ'ল / পরে ওয়েবএন বাদ দিলে দ্বিতীয়টি কাজ করবে।

নীচের আপনার মন্তব্যের উত্তরে, উপরের কাজের প্রকাশগুলি কীভাবে আমি দিতে পারি তার চেয়ে বেশি প্রচেষ্টা about তবে, এটি সাহায্য করবে।

/ ওয়েব 1 এর আগে থাকা সমস্ত কিছুই অনুরোধের স্ট্রিংয়ে ওয়েব 1 এর আগে উপস্থিত সমস্ত কিছু "ক্যাপচার" করে। সুতরাং সাধারণত এটি জিইটি বা পোস্ট হবে। (। *) ওয়েব 1 এর পরে সমস্ত কিছু "ক্যাপচার" করে, কিছুই না থাকলে কিছু সহ।

পরবর্তী অংশ ( \1\2) বলছে যে ক্যাপচারিত অংশগুলি কী করা উচিত। এটি \1(প্রথম দখলকৃত অংশ) এবং \2(দ্বিতীয় গৃহীত অংশের পরে) গঠিত একটি স্ট্রিং তৈরি করতে বলে । যেহেতু ওয়েব 1 কখনই ধরা পড়ে না, তাই এটি চূড়ান্ত ফলাফলের সাথে একত্রিত হয় না।


\ 1 \ \ 2 \ 3 কী বোঝায়? Q ([^ \] *) does কী করে? ডকুমেন্টেশন পৃষ্ঠায় দেওয়া উদাহরণ এখানে। # যে কোনও অনুরোধের পথের শুরুতে "/" সাথে "/ স্থির /" প্রতিস্থাপন করুন। পুনঃপ্রকাশ ^ ([^ \] *) \ / স্ট্যাটিক /(.*) \ 1 \ / \ 2
জিম

আপনার মন্তব্য পড়ার পরে, আমি বুঝতে পারি যে আমার প্রস্তাবিত সমাধানটি কিছুটা অতিরিক্ত জটিল। আমি এটি সরল।
দীর্ঘায়ু

তাহলে রেকেরপ সিনট্যাক্স কী? q স্ট্রিং_2_সার্চ_থ্রু {_ সার্চ_স্ট্রিং {{রিপ্লেজ_স্ট্রিং re? আমি \ 1 \ \ 2 \ 3 হিসাবে বিভ্রান্ত?
জিম

যদি ব্যবহারকারীরা / ওয়েব 1 বা / ওয়েব 1 / রাখে তবে এই পুনরায় কাজটি কীভাবে যুক্ত করার কোনও উপায় আছে?
জিম

তুমি কি চেষ্টা করেছ?
দীর্ঘায়ু

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