অ্যাপাচি কীভাবে একাধিক মিলের অবস্থান বিভাগগুলিকে একীভূত করে


35

আমি কিছু বেসিক অ্যাপাচি কনফিগারেশন নিয়ে কাজ করছি, তবে <Location>তাদের বেশ কয়েকটি আসন্ন অনুরোধের ইউআরএলের সাথে মেলে যখন অ্যাপাচি বিভিন্ন বিভাগগুলিকে কীভাবে মার্জ করে তা আমি ঠিক বুঝতে পারি না । Apache ডকুমেন্টেশন তার "কিভাবে বিভাগে মার্জ করা হয়" অধ্যায়ে একটি সামান্য বিট বিভ্রান্তিকর যখন এটি একই ধরণের বিভিন্ন মিলে যাওয়া বিভাগ ক্রম / অগ্রাধিকার আসে।

উদাহরণস্বরূপ, নিম্নলিখিত অ্যাপাচি কনফিগারেশনটি কল্পনা করুন (প্রকৃত বিষয়বস্তুগুলি বুদ্ধিযুক্ত কিনা তা উপেক্ষা করুন, আমি কেবল প্রতিটি নিয়ম / বিভাগের প্রয়োগ আদেশে আগ্রহী):

<Location / >
  ProxyPass http://backend.com/
  Order allow,deny
  Satisfy any
</Location>

<Location /sub/foo>
  Order allow,deny
</Location>

<Location /sub >
  Order deny,allow
  Require valid-user
  Satisfy all
</Location>

<Location /doesnt/match >
  ProxyPass !
</Location>

এখন যদি কোনও ক্লায়েন্ট কোনও অনুরোধ /sub/foobarকরে তবে এই অনুরোধটিতে চূড়ান্ত কনফিগারেশন প্রয়োগ করা হবে কি?

প্রয়োগকৃত কনফিগারেশনটি কি এর সমতুল্য:

# All the directives contained in all the matchin Locations in declaration order
ProxyPass http://backend.com/
Order allow,deny
Satisfy any
Order allow,deny
Order deny,allow
Require valid-user
Satisfy all

অথবা হতে পারে

# same as above, but with longest matching path last
ProxyPass http://backend.com/
Order allow,deny
Satisfy any
Order deny,allow
Require valid-user
Satisfy all
Order allow,deny

বা সম্পূর্ণ আলাদা কিছু।

আপনার সাহায্যের জন্য ধন্যবাদ, আমি সত্যিই বিভ্রান্ত করছি।

উত্তর:


44

মার্জ করার ক্রমটি মোটামুটি জটিল, এবং ব্যতিক্রমগুলি দ্বারা ধরা পড়ে যাওয়া সহজ ... অ্যাপাচি ডকটি হ'ল বিভাগগুলি কীভাবে একত্রিত করা হয় "

সেই ডকুমেন্টেশন অনুসারে, বিভাগগুলির মার্জ করার ক্রমটি প্রতিটি ম্যাচের ধরণের জন্য মিলিত সমস্ত এন্ট্রিগুলিকে ক্রমরূপে কনফিগারেশন ফাইলগুলিতে মোকাবেলা করে এবং তারপরে পরবর্তী ধরণে (<ডিরেক্টরি বাদ দিয়ে ব্যতীত) চলে যায় >, যা পাথের নির্দিষ্টতা অনুসারে চিকিত্সা করা হয়)।

ধরনের অর্ডার Directory, DirectoryMatch, Files, এবং পরিশেষে Location। পরে ম্যাচগুলি আগের ম্যাচগুলিকে ওভাররাইট করে। (* প্রক্সিপাস এবং আলিয়াস আবার আলাদাভাবে চিকিত্সা করা হয়, নোটটি শেষে দেখুন)

এবং এই বিধিগুলির জন্য বেশ কয়েকটি গুরুত্বপূর্ণ ব্যতিক্রম রয়েছে যা একটি প্রকটপাস এবং <লোকেশন> বিভাগে প্রক্সিপাশ ব্যবহার করে। (নিচে দেখ)

সুতরাং উপরোক্ত আপনার উদাহরণ থেকে http://somehost.com/sub/foobar কে ফোলউইং কনফিগারেশনের সাথে অনুরোধ করছি ;

<Location / >
  ProxyPass http://backend.com/
  Order allow,deny
  Satisfy any
</Location>

<Location /sub/foo>
  Order allow,deny
</Location>

<Location /sub >
  Order deny,allow
  Require valid-user
  Satisfy all
</Location>

<Location /doesnt/match >
  ProxyPass !
</Location>

এটি নিম্নলিখিত নির্দেশাবলী জমে ...

  ProxyPass http://backend.com/
  Order allow,deny
  Satisfy any
  Order allow,deny
  Order deny,allow
  Require valid-user
  Satisfy all   

পরবর্তী ম্যাচগুলির সাথে পূর্ববর্তী সদৃশগুলি মুছে ফেলা হয়, যার ফলস্বরূপ;

  ProxyPass http://backend.com/
  Order deny,allow
  Require valid-user
  Satisfy all   

ব্যাখ্যার
পরে ম্যাচগুলি <Directory>যেখানে ক্রমে ম্যাচগুলি প্রক্রিয়াকরণ করা হয় সেখানে ব্যতীত আগের ম্যাচগুলি ওভাররাইট করে: সংক্ষিপ্ত ডিরেক্টরি উপাদানটি সবচেয়ে দীর্ঘ lon

সুতরাং উদাহরণস্বরূপ, কনফিগারেশনে এই নির্দেশিকাগুলি কী আদেশে নির্দিষ্ট করা হয়েছে এবং আরও নির্দিষ্ট ম্যাচের জয়গুলি নির্বিশেষে
<Directory /var/web/dir>
প্রক্রিয়া করা হবে
<Directory /var/web/dir/subdir>

কোনও মিলে যাওয়া Locationনির্দেশনা সর্বদা পূর্ববর্তী মিলের Directoryদিকনির্দেশকে ওভাররাইড করে ।

মৌলিক ধারণা যে ভালো একটি অনুরোধ জন্য GET /some/http/request.htmlঅভ্যন্তরীণভাবে এটি একটি মাধ্যমে ফাইলসিস্টেম একটি অবস্থান অনুবাদ করা হবে Alias, ScriptAliasঅথবা অধীনে সাধারন ফাইল অবস্থানের জন্য DocumentRootVirtualHost জন্য এটি মেলে না।

সুতরাং একটি অনুরোধের নীচের বৈশিষ্ট্যগুলি মিলবে যা এটি মিলে যাওয়ার জন্য ব্যবহার করে:
Location: /some/http/request.html File: /var/www/html/mysite/some/http/request.html Directory: /var/www/html/mysite/some/http

এ্যাপাচি তারপর প্রয়োগ করা হবে এ সব চালু Directory, ম্যাচ কনফিগ থেকে ডিরেক্টরির বিশেষত্বের জন্য, এবং তারপর ঘুরে আবেদন DirectoryMatch, Files, এবং পরিশেষে Locationযে ক্রমে তারা সম্মুখীন হয় সাথে মেলে।

সুতরাং Locationওভাররাইডগুলি Files, যা সর্বনিম্ন অগ্রাধিকারের DirectoryMatchসাথে পাথের সাথে মিল Directoryরয়েছে over সুতরাং আপনার উপরের উদাহরণে, অনুরোধটি /sub/foobarপ্রথম 3 অবস্থানের সাথে মিলিত হওয়ার অনুরোধ , অতএব শেষটি বিরোধী নির্দেশাবলীর জন্য জয়ী।

(আপনি ঠিক বলেছেন যে কোনও প্রান্তের কেস কীভাবে সমাধান করা হয় তা ডক্স থেকে স্পষ্ট নয়, এটি যে কোনও allow from *ধরণের নির্দেশাবলী সংশ্লিষ্টদের সাথে সংযুক্ত হতে পারে তা সম্ভব Order allow,deny, তবে আমি এটি পরীক্ষা করিনি Also এছাড়াও আপনি যদি মেলে Satisfy Anyতবে কি হয় তবে আপনি পূর্বে একটি সংগ্রহ করেছে Allow from *...)

প্রক্সিপাস এবং এলিয়াস সম্পর্কে আকর্ষণীয় নোট

বিরক্তিকর হতে, ProxyPassএবং Aliasঅন্য দিকে কাজ করতে দেখা যায় .... ;-) এটি মূলত প্রথম ম্যাচটি হিট করে, তারপরে থেমে যায় এবং এটি ব্যবহার করে!

Ordering ProxyPass Directives

The configured ProxyPass and ProxyPassMatch rules are 
checked in the order of configuration. 
The first rule that matches wins. So
usually you should sort conflicting ProxyPass rules starting with the
longest URLs first. Otherwise later rules for longer URLS will be
hidden by any earlier rule which uses a leading substring of the URL.
Note that there is some relation with worker sharing.

For the same reasons exclusions must come before the general 
ProxyPass directives.

সুতরাং মূলত, এলিয়াস এবং প্রক্সিপাস নির্দেশাবলী নির্দিষ্ট করতে হবে, প্রথমে সুনির্দিষ্ট;

Alias "/foo/bar" "/srv/www/uncommon/bar"
Alias "/foo"     "/srv/www/common/foo"

এবং

ProxyPass "/special-area" "http://special.example.com" smax=5 max=10
ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsessionid nofailover=On

যাইহোক, @orev হিসাবে উল্লেখ করেছেন। কোনও অবস্থানের নির্দেশিকায় আপনার প্রক্সিপাস নির্দেশিকা থাকতে পারে এবং তাই কোনও অবস্থানের মধ্যে আরও নির্দিষ্ট প্রক্সিপাস পূর্বের পাওয়া প্রক্সিপাসকে ছাড়িয়ে যাবে।


3
অর্ডারিং প্রক্সিপাস নির্দেশিকাগুলি সম্পর্কে সতর্কতা প্রত্যাবর্তনের জন্য ধন্যবাদ। আমাকে প্রচুর মাথা ব্যাথা থেকে বাঁচিয়েছে
জেরেমি ফরাসি

2
সংক্রান্ত ProxyPass "অন্যান্য দিক কাজ" , এই একটি নির্মাণ করে চলেছি বাহিরে একমাত্র সত্য যদি তারা <Location>। এর অভ্যন্তরে <Location>, মার্জ করার নিয়মগুলি <Location>অনুসরণ করা হয়, এর অর্থ আপনি নিজের সুনির্দিষ্ট-নির্দিষ্ট <Location>নির্দেশিকাগুলি আরও সুনির্দিষ্টের আগে আসতে চান । এটি আরও সুনির্দিষ্টকে কম নির্দিষ্ট দিকনির্দেশকে ওভাররাইড করতে দেয়। আপনি কেবল ProxyPassপ্রতি এক করতে পারেন <Location>
ওরেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.