আমি কীভাবে আপগ্রেড সার্ভারের সময়সীমাতে PUT বা POST অনুরোধগুলি পুনরায় চেষ্টা করা থেকে Nginx থামাতে পারি?


11

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

আমাদের কনফিগারেশন নিম্নরূপ:

upstream mash {
    ip_hash;
    server 127.0.0.1:8081;
    server 192.168.0.11:8081;
}

server {
    ...
    location / {
        proxy_pass http://mash/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        
    }
}

উত্তর:


9

এটি ডিফল্ট আচরণ হয়ে উঠেছে সংস্করণ 1.9.13 থেকে শুরু হয়ে

এটিকে আবার ম্যানুয়ালি পরিবর্তন করতে আপনি ব্যবহার করতে পারেন:

proxy_next_upstream error timeout non_idempotent;

6

আমি জানি আমি গেমটি থেকে বেশ দেরি করে ফেলেছি, তবে এই সমস্যাটি অনুসন্ধান করার সময় আমার পক্ষে এটি শীর্ষ ফলাফল so তাই আমি আমার সমাধানটি ভাগ করে নিতে চেয়েছিলাম।

এটি যদি কাস্টম ত্রুটি হ্যান্ডলারের সাথে মিলিত হয় তবে নির্দেশিকাটি (কয়েকটি বৈধ ব্যবহারের ক্ষেত্রে একটির সাথে ) ব্যবহার করে :

upstream backend {
    server backend1;
    server backend2;
}

server {
    server_name proxy;

    location / {
        error_page 598 = @retry;
        error_page 599 = @no_retry;
        if ($request_method = POST) {
            return 599;
        }
        return 598;
    }

    location @retry {
        proxy_pass http://backend;
    }

    location @no_retry {
        proxy_pass http://backend;
        proxy_next_upstream off;
    }
}

4

দস্তাবেজের জন্য দয়া করে এখানে দেখুন: প্রক্সি_নেক্সট_উপস্ট্রিম

দয়া করে নোট করুন এটি একটি অনির্ধারিত সংক্ষিপ্তসার

https://gist.github.com/wojons/6154645


আসলে এটি কাজ করে নি: এনগিনেক্স বলছে "প্রক্সি_পঞ্জী_প্রবাহটি এখানে অনুমোদিত নয়"। আমি যদি ব্লকগুলিকে লোকেশনে স্থানান্তরিত করার চেষ্টা করেছি এবং একই ত্রুটি পেয়েছি। "প্রক্সি_নেক্সট_প্রবাহ ত্রুটি" এর নিজস্ব কাজগুলিতে উভয় স্থানে ব্যবহার করা।
ডেভিড টিঙ্কার

এটি খুব অদ্ভুত যেহেতু ডকুমেন্টেশন স্পষ্টভাবে বলেছে যে এটি অবস্থানের প্রসঙ্গে কাজ করে
ওয়াজন্সটেক

এটি মনে হয় যে (...) pro} কাছাকাছি প্রক্সি_নেক্সট_উইন স্ট্রিমের কাছে যা এনজিনেক্স পছন্দ করে না
ডেভিড টিঙ্কার

কেউ কি এই পরীক্ষা করেছে? 4 টি উর্ধ্বতন কিন্তু এটি বৈধ ব্যবহারের ক্ষেত্রে এখানে মেনে চলেছে বলে মনে হচ্ছে না: nginx.com/resources/wiki/start/topics/depth/ifisevil
EoghanM

0

proxy_methodনির্দেশ ব্যবহার করুন

দেখুন: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_method


2
আপনার উত্তরের একটি লিঙ্ক থেকে দরকারী তথ্য অন্তর্ভুক্ত করার জন্য সাধারণত এটি সুপারিশ করা হয় যে এটি কার্যকর হওয়ার জন্য লিঙ্কের উপর স্পষ্টভাবে নির্ভর করে না
BE77Y

1
সার্ভার ফল্ট আপনাকে স্বাগতম! যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
মার্ক হেন্ডারসন

-1

আমার টমক্যাট সার্ভারে আমার একই সমস্যা। দীর্ঘ অনুরোধ দেখা দিলে প্রক্সি সময় শেষ। আমি প্রক্সি_ড্রেম_আউটআউটটি ব্যবহার করে আমার সমস্যার সমাধান করেছি। যখন সময়সীমা বাড়ান তখন আমার অনুরোধটি কখনই আউট অফ হয়ে যায় এবং কোনও সমস্যা হয় না। ডিফল্ট সময় 60 এর বাইরে। উল্লেখ

location / {
    proxy_pass  http://xxxxxxxxxx.com;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto https;
            proxy_redirect off;
            proxy_connect_timeout      800;
            proxy_send_timeout         800;
            proxy_read_timeout         240;     
}

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