এনজিএনক্সের মধ্যে কীভাবে এইচটিটিপি পুনর্নির্দেশগুলি অনুসরণ করবেন?


15

আমার একটি এনগিনেক্স-ভিত্তিক এইচটিটিপি প্রক্সি রয়েছে এবং আমি এর ভিতরে থাকা সমস্ত এইচটিটিপি পুনর্নির্দেশগুলি প্রক্রিয়া করতে চাই যাতে ক্লায়েন্টরা পুনঃনির্দেশ চেইনে কেবল শেষ প্রতিক্রিয়া পায়।

প্রাথমিক কোডটি দেখতে:

location /proxy {
    rewrite ^/proxy/([^/]+) $1 break;

    proxy_pass http://$uri/;
}

নিম্নলিখিত 1 স্তরের পুনঃনির্দেশে আমার প্রচেষ্টাটি হ'ল:

error_page 301 302 307 =200 @redir;

... এবং এই নামকরণ করা অবস্থান:

location @redir {
    proxy_pass $proxy_location;
}

কেবলমাত্র কোনও $ প্রক্সি_লোকশন ভেরিয়েবল নেই এবং আমি এটি তৈরির কোনও উপায় খুঁজে নিতে ব্যর্থ হয়েছি। Location:এটিতে স্ট্রিম থেকে প্রাপ্ত হেডারের মান থাকা উচিত ।

কোন চিন্তা?

উত্তর:


7

আমি বিশ্বাস করি আপনি চলকটি stream upstream_http_location চান

চলকগুলি যা with প্রক্সি * দিয়ে শুরু হয় নিয়ন্ত্রণ করে যা এনজিনেক্স থেকে প্রবাহে যায়। ভেরিয়েবলের $ আপস্ট্রিম * সিরিজটিতে এনগিনেক্স নিজেই যে প্রতিক্রিয়া জানায় সে সম্পর্কে তথ্য ধারণ করে। আপনি up upstream_http_headername সহ একটি প্রবাহী সার্ভার থেকে প্রাপ্ত যে কোনও এরিবিটারি এইচটিটিপি শিরোনাম পেতে পারেন।

নোট করুন যে এই $ upstream ভেরিয়েবলগুলি প্রবাহিত সার্ভারের কাছ থেকে প্রতিক্রিয়া না পাওয়া পর্যন্ত নাল ব্যতীত আর কিছু হতে পারে না, সুতরাং তাদের ব্যবহারে কিছু সীমাবদ্ধতা রয়েছে।


26

আমার জন্য কী কাজ করেছে তার পূর্ণ উদাহরণ এখানে:

server {
    ...

    location / {
        proxy_pass http://backend;
        # You may need to uncomment the following line if your redirects are relative, e.g. /foo/bar
        #proxy_redirect / /;
        proxy_intercept_errors on;
        error_page 301 302 307 = @handle_redirect;
    }

    location @handle_redirect {
        set $saved_redirect_location '$upstream_http_location';
        proxy_pass $saved_redirect_location;
    }
}

1
আপনাকে কেন নতুন ভেরিয়েবলে $ upstream_http_location এর মান সংরক্ষণ করতে হবে?
পার্থ শাহ

1
আমি সঠিক কারণটি জানি না, তবে এটি অন্যথায় কাজ করে না ...
ভ্লাদ ফ্রোলভ

এটি দুর্দান্ত তবে কেবল একটি একক পুনর্নির্দেশের ক্যাচ। একাধিক পুনঃনির্দেশগুলি পরিচালনা করার কোনও উপায়?
থিফমাস্টার

1
@ থিফমাস্টার আমি বিশ্বাস করি যে এই উত্তরটি আপনি খুঁজছেন।
iBug

2020/01/23 09:17:46 [error] 1394#0: *1 invalid URL prefix in "", client: xx.xx.28.3, server: www.example.com, request: "GET /test HTTP/1.1", host: "www.example.com"@ হ্যান্ডল_ড্রেইক্টর ব্লকটি ব্যবহার করে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি, কোনও ধারণা?
সিরিল ডুচন-ডরিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.