nginx url পুনর্লিখন: বিরতি এবং শেষের মধ্যে পার্থক্য


45

আমি বিরতি এবং শেষের (পুনর্লিখনের পতাকা) এর মধ্যে পার্থক্য বুঝতে পারি না। ডকুমেন্টেশন বরং অচল। আমি আমার কনফিগার কয়েকটিতে দুজনের মধ্যে স্যুইচ করার চেষ্টা করেছি, তবে আচরণে আমি কোনও পার্থক্য খুঁজে পাইনি। কেউ কি এই পতাকাগুলি আরও বিস্তারিতভাবে ব্যাখ্যা করতে পারেন? বিশেষত এমন একটি উদাহরণ সহ যা একটি পতাকা অন্য পতাকা উল্টানোর সময় বিভিন্ন আচরণ দেখায়।


আমি উত্তরটি জানি না, তবে আপনি উত্তর পেয়ে গেলে wiki.nginx.org আপডেট করুন। এছাড়াও, ইংরাজী ভাষার এনগিনেক্স মেলিং তালিকাটি বেশ সক্রিয় রয়েছে এবং ইগর (প্রধান বিকাশকারী) প্রতি মাসে কয়েকশো প্রশ্নের উত্তর দেয়, তাই সম্ভবত সেখানে জিজ্ঞাসা করুন।
rmalayter

@ rmalayter - এই প্রশ্নটি nginx মেলিং তালিকায় জিজ্ঞাসা করা হয়েছিল। ইগর এটার

ডোমেনটি হস্তান্তরিত হওয়ার সাথে সাথে pubbs.net লিঙ্কটি নষ্ট হয়ে গেছে। দুঃখিত, এটি কোথায় চিহ্নিত করা উচিত তা সন্ধান করতে সক্ষম ছিল না। ; (
টিনো

উত্তর:


40

আপনার কাছে বিভিন্ন অবস্থানের জন্য পুনর্লিখনের নিয়মের বিভিন্ন সেট থাকতে পারে। পুনর্লিখনের মডিউলটি দেখা হয়ে গেলে last, এটি বর্তমান সেটটি প্রক্রিয়াজাতকরণ বন্ধ করে দেয় এবং উপযুক্ত স্থান (এবং পুনর্লিখনের নিয়মের নতুন সেট) সন্ধানের জন্য পুনরায় লেখার অনুরোধটি আবার পাস করা হয়েছে। যদি নিয়মটি শেষ হয় break, পুনর্লিখনও বন্ধ হয়ে যায়, তবে পুনর্লিখনের অনুরোধটি অন্য কোনও স্থানে পাস করা হয় না।

এটি হ'ল, যদি দুটি অবস্থান থাকে: লোক 1 এবং লোক 2, এবং লোক 1 এ পুনর্লিখনের নিয়ম রয়েছে যা লোক 1 কে লোক 2 এ পরিবর্তন করে এবং শেষ হয় last, অনুরোধটি পুনর্লিখন এবং লোকেশন লোক 2 এ প্রেরণ করা হবে। যদি নিয়মটি শেষ হয় break, তবে এটি অবস্থান লোক 1 এর সাথে সম্পর্কিত।


আপনার অর্থ যদি পুনরলিখনটিতে ব্রেক পতাকা থাকে তবে এটি কোনও মিলে যাওয়া অবস্থানের ব্লক অনুসন্ধান করবে না, সুতরাং এটি স্থানের লোকেশানের সাথে সম্পর্কিত করে তোলে।
মার্টিন Fjordvald

যথাযথভাবে। সংশোধন করা হয়েছে।
minaev

43

ওপি একটি উদাহরণ পছন্দ করেছেন। এছাড়াও, @ এমনায়েভ যা লিখেছেন, সে গল্পেরই একটি অংশ ছিল! তো, আমরা এখানে যাই ...

উদাহরণ 1: না (ব্রেক বা শেষ) পতাকাগুলি

server {
    server_name example.com;
    root 'path/to/somewhere';

    location / {
        echo 'finally matched location /';
    }

    location /notes {
        echo 'finally matched location /notes';
    }

    location /documents {
        echo 'finally matched location /documents';
    }

    rewrite ^/([^/]+.txt)$ /notes/$1;
    rewrite ^/notes/([^/]+.txt)$ /documents/$1;
}

ফলাফল:

# curl example.com/test.txt
finally matched location /documents

ব্যাখ্যা:

জন্য rewrite, পতাকাগুলি alচ্ছিক!

উদাহরণ 2: বাইরের অবস্থানের ব্লক (বিরতি বা শেষ)

server {
    server_name example.com;
    root 'path/to/somewhere';

    location / {
        echo 'finally matched location /';
    }

    location /notes {
        echo 'finally matched location /notes';
    }

    location /documents {
        echo 'finally matched location /documents';
    }

    rewrite ^/([^/]+.txt)$ /notes/$1 break; # or last
    rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
}

ফলাফল:

# curl example.com/test.txt
finally matched location /notes

ব্যাখ্যা:

বাইরে অবস্থান ব্লক, উভয় breakএবং lastসঠিক আচরণ ...

  • পুনর্লিখনের শর্তগুলির আর কোনও বিশদকরণ নয়
  • Nginx অভ্যন্তরীণ ইঞ্জিন পরবর্তী পর্যায়ে যায় ( locationম্যাচের জন্য সন্ধান করছে )

উদাহরণ 3: লোকেশন ব্লকের ভিতরে - "বিরতি"

server {
    server_name example.com;
    root 'path/to/somewhere';

    location / {
        echo 'finally matched location /';
        rewrite ^/([^/]+.txt)$ /notes/$1 break;
        rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
    }

    location /notes {
        echo 'finally matched location /notes';
    }

    location /documents {
        echo 'finally matched location /documents';
    }
}

ফলাফল:

# curl example.com/test.txt
finally matched location /

ব্যাখ্যা:

কোনও অবস্থানের ব্লকের ভিতরে breakপতাকাটি নিম্নলিখিতগুলি করবে ...

  • পুনর্লিখনের শর্তগুলির আর কোনও বিশদকরণ নয়
  • Nginx অভ্যন্তরীণ ইঞ্জিন বর্তমান locationব্লকটি বিশ্লেষণ করতে অবিরত

উদাহরণ 4: লোকেশন ব্লকের ভিতরে - "শেষ"

server {
    server_name example.com;
    root 'path/to/somewhere';

    location / {
        echo 'finally matched location /';
        rewrite ^/([^/]+.txt)$ /notes/$1 last;
        rewrite ^/notes/([^/]+.txt)$ /documents/$1;  # this is not parsed
    }

    location /notes {
        echo 'finally matched location /notes';
        rewrite ^/notes/([^/]+.txt)$ /documents/$1;  # this is not parsed, either!
    }

    location /documents {
        echo 'finally matched location /documents';
    }
}

ফলাফল:

# curl example.com/test.txt
finally matched location /notes

ব্যাখ্যা:

কোনও অবস্থানের ব্লকের ভিতরে lastপতাকাটি নিম্নলিখিতগুলি করবে ...

  • পুনর্লিখনের শর্তগুলির আর কোনও বিশদকরণ নয়
  • Nginx অভ্যন্তরীণ ইঞ্জিন ফলাফলের ফলাফলের উপর ভিত্তি করে অন্য একটি লোকেশন ম্যাচ সন্ধান করতে শুরু করেrewrite
  • পুনর্লিখনের শর্তগুলির আর কোনও বিশদকরণ নয়, এমনকি পরবর্তী অবস্থানের ম্যাচে!

সারাংশ:

  • rewriteপতাকা breakবা lastম্যাচগুলির সাথে একটি শর্ত যখন , Nginx আর কোনও বিশ্লেষণ বন্ধ করে rewrites!
  • অবস্থান ব্লকের বাইরে breakবা এর সাথে lastএনজিনেক্স একই কাজ করে (শর্তাদি পুনরায় লেখার প্রক্রিয়া বন্ধ করে দেয়)।
  • এর সাথে কোনও অবস্থানের ব্লকের ভিতরে break, এনগিনেক্স কেবল শর্তগুলি পুনরায় লেখার জন্য কেবল প্রক্রিয়াজাতকরণ বন্ধ করে দেয়
  • এর সাথে একটি অবস্থানের ব্লকের ভিতরে last, এনগিনেক্স শর্তগুলি পুনরায় লেখার প্রক্রিয়া বন্ধ করে এবং তারপরে ব্লকের একটি নতুন মিলের সন্ধান করতে শুরু করেlocation ! এনগিনেক্স rewritesনতুন locationব্লকে কোনওটিকেও উপেক্ষা করে !

চূড়ান্ত দ্রষ্টব্য:

আমি আরও কিছু প্রান্তের কেস অন্তর্ভুক্ত করতে মিস করেছি (যেমন পুনরায় লেখার ক্ষেত্রে সাধারণ সমস্যা 500 internal error)। তবে, এটি এই প্রশ্নের আওতার বাইরে থাকবে। সম্ভবত, উদাহরণ 1 এর বাইরেও রয়েছে!


ত্রুটি : "nginx.service ব্যর্থ হয়েছে কারণ ত্রুটি কোডের সাথে নিয়ন্ত্রণ প্রক্রিয়াটি প্রস্থান হয়েছে।" ... অজানা নির্দেশনা "প্রতিধ্বনি"
পিটার ক্রাউস

nginx.com/resources/wiki/modules/echo । কিছু লিনাক্স ডিস্ট্রিবিউশন যেমন উবুন্টু 14.04 এর পরে কিছু প্যাকেজগুলিতে এই মডেলটি বান্ডিল করে (যেমন এনগিনেক্স-এক্সট্রা হিসাবে)। আমি আশা করি এটি সাহায্য করবে.
পোঠি কলিমুথু

1
উদাহরণস্বরূপ 1 যদি পুনর্লিখনের নিয়মগুলি তিনটি অবস্থানের নির্দেশাবলীর উপরে স্থাপন করা হয় তবে এটি কী পার্থক্য করবে?
ক্রেগ হিক্স 9:58

1
@ ক্রেইগহিক্স না, এটি হবে না। পুনর্লিখনের নিয়মের উচ্চতর প্রাধান্য রয়েছে এবং অবস্থানগুলি মিলে যাওয়ার আগে প্রথমে কার্যকর করা হয়।
পোথি কলিমুথু

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