আমি কীভাবে এইচএপ্রক্সিতে এসিএল তালিকায় একটি ওয়াইল্ডকার্ড হোস্টের সাথে মিল করব?


10

আমার haproxy.conf এ আমার নীচের লাইনগুলি রয়েছে:

acl valid_domains hdr(Host) -i mysite.com images.mysite.com docs.mysite.com admin.mysite.com
redirect location http://mysite.com/invalid_domain if !valid_domains

আমি কোনও সাবডোমেনের সাথে কীভাবে মিলব?

আমি চেষ্টা করেছিলাম:

acl valid_domains hdr(Host) -i *.mysite.com

এবং:

acl valid_domains hdr(Host) -i [a-z]+.mysite.com

... তবে কোনটিই কাজ করেনি।

ধন্যবাদ

উত্তর:


15

আমি মনে করি যে আপনার প্রয়োজনের জন্য hdr_sub ভাল। আমি কিছুক্ষণ hdr_end ব্যবহার করছিলাম তবে এটি নিম্নলিখিত সমস্যার মধ্যে চলে:

80 পোর্টের সাথে অনুরোধগুলি সাধারণত পোর্টটি ছিটিয়ে দেয় যাতে হোস্ট শিরোনামটি "উদাহরণ.com" এর মতো দেখায়, তবে আপনি যদি একটি পোর্টে উদাহরণস্বরূপ, যেমন। com.8080 এর মতো অনুরোধ করছিলেন, তবে শিরোনামটিতে পোর্টটি থাকবে এবং hdr_end ব্যর্থ হবে "example.com" এর জন্য পরীক্ষা করুন।

এইচডিআর_সুব একটি স্ট্রিং ম্যাচ করবে যা আপনার (এবং আমার) জন্য ভাল ফিট বলে মনে হচ্ছে।

উভয় সমাধানের এখনও একটি বাজে জিনিস আছে আমি পছন্দ করি না। ফলাফল নির্ভর মূল্যায়নের আদেশ দিন।

উদাহরণস্বরূপ (আমার শর্তগুলি সীমান্তের মতো দেখতে)

acl is_dbadmin hdr_sub(host) -i dbadmin.example.com

8080 বন্দরে অনুরোধ করা এরকম হবে:

Jul  9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {**example.com:8080**||http://example.com:} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"

যেখানে পোর্ট 80 সম্ভবত এটির মতো হতে পারে

Jul  9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {example.com||***http://example.com***:} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"

12

hdr_endআপনি যা খুঁজছেন এটা চেষ্টা কর:

acl valid_domains hdr_end(host) -i mysite.com 
redirect location http://mysite.com/invalid_domain if !valid_domains

আপনার যদি দুটি ডোমেন থাকে তবে কি হবে। একজন যাকে বলে মাইসাইট ডট কম আর নটমাইসাইট ডট কম? মাইসাইট ডট কম দিয়ে দুজনেরই শেষ। তাহলে ম্যাচটি নির্দিষ্ট ভাবা যায় না, তাই না?
সাব

1
@ সাবাব সে ক্ষেত্রে আমি acl valid_domains hdr(host) -i mysite.com+ লিখব acl valid_domains hdr_end(host) -i .mysite.com, বা কেবল ব্যবহার acl valid_domains hdr_dom(host) -i mysite.com
করবো

7

এমন কয়েকটি ক্ষেত্রে আপনার স্পষ্ট হওয়া দরকার, যেমন একাধিক স্তরের সাব-ডোমেন সহ ওয়াইল্ডকার্ড এসএসএল-এর পুনঃনির্দেশগুলি পরিচালনা করা।

ম্যাচিং এন্ড ( hdr_endবা -m end) বা সাবস্ট্রিং ( hdr_subবা -m sub) এর সাথে আপনার প্রত্যাশার চেয়ে বেশি মিলের অনিচ্ছাকৃত পার্শ্ব-প্রতিক্রিয়া থাকতে পারে। বেশিরভাগ ক্ষেত্রে এটি সত্যই গুরুত্বপূর্ণ নয়, যেহেতু আপনার কাছে সেই ডোমেনগুলির জন্য সার্ভারে আসা ট্র্যাফিক নেই, তবে এর অর্থ এটি প্রযুক্তিগতভাবে সঠিক সমাধান নয়।

একটি স্পষ্ট মিল খুঁজে পাওয়া জন্য আমি নিয়মিত এক্সপ্রেশন ব্যবহার করা সবচেয়ে ভাল উপায় the উদাহরণস্বরূপ, আপনি যদি *.example.orgনা মিলে কেবল মেলাতে চান sub.domain.example.org:

acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org$

আপনি যদি (কোনও) অ-মানক পোর্টগুলি পরিচালনা করতে চান তবে এটি সামান্য বাড়ানো যেতে পারে:

acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org(:[0-9]+)?$

উপরেরটি মিলবে :

  • test1.example.org
  • test2.example.org:8080

এবং হবে না মেলে :

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