nginx: একাধিক সার্ভারের নির্দেশাবলী সহ প্রবাহ?


15

আমি 2 টি অ্যাপ্লিকেশন প্যাকেজ করার চেষ্টা করছি যা প্রিন্সি হিসাবে এনগিনেক্স ব্যবহার করে এবং প্রতিটি কনফিগ ফাইল সরবরাহ করে /etc/nginx/conf.d/

এক ফাইলে এটি করা ( combined.conf) দুর্দান্ত কাজ করে:

    upstream backend1 {
      http://localhost:8989;
    }

    upstream backend2 {
      http://localhost:8990;
    }

    server {
      location /backend1/ {
        proxy_pass  http://backend1;
      }
      location /backend2/ {
        proxy_pass  http://backend2;
      }

যাইহোক, 2 টি ফাইলে বিভক্ত হয়ে গেলে, পুনর্নির্দেশগুলির মধ্যে একটির পদ্ধতিগতভাবে ব্যর্থ হয়:

  • backend1.conf:

    upstream backend1 {
      http://localhost:8989;
    }
    
    server {
      location /backend1/ {
        proxy_pass  http://backend1;
      }
    
  • backend2.conf:

    upstream backend2 {
      http://localhost:8990;
    }
    
    server {
      location /backend2/ {
        proxy_pass  http://backend2;
      }
    

সুতরাং আমার প্রশ্নটি: কোনও httpনোডের 2 টি আলাদা serverবাচ্চা থাকতে পারে?

এনগিনেক্স ডকুমেন্টেশন এ সম্পর্কে কিছুই বলে না।

অন্যান্য লোকেরা এই ধরণের স্থাপত্যের সাথে সফল হয়েছেন বলে মনে হয় যদিও :(

এনগিনেক্স সংস্করণটি 1.1.19-1ubuntu0.1।

কোন পরামর্শের জন্য ধন্যবাদ!


আরও ভালো হবে, কাছে যখন আমি 2 ফাইল ব্যবহার এটি ডিফল্ট সাইট একটি 404. সঙ্গে উত্তর
oDDsKooL

উত্তর:


8

এতটা দৌড়ঝাঁপ ও পরীক্ষার পরে, আমি এটিকে কাজ করার জন্য এবং প্রতি অ্যাপ্লিকেশনটিতে একটি কনফিগার ফাইল পাঠাতে সক্ষম হবার একটি উপায় পেয়েছি।

এটি এখানে, প্রতিটি অ্যাপ্লিকেশন অনুসারে একটি সাধারণ ফাইল এবং প্রবাহের / অবস্থানের ফাইলগুলির একজোড়া প্রেরণ করা হয়:

  • /etc/nginx/conf.d/common-proxies.conf:

    include /upstreams/*.conf;
    
    server {
    include /locations/*.conf
    }
    
  • /etc/nginx/locations/backend1.conf

    location /backend1/ {
      upstream http://backend1;
    }
    
  • /etc/nginx/locations/backend2.conf

    location /backend2/ {
      upstream http://backend2;
    }
    
  • /etc/nginx/upstreams/backend1.conf

    upstream backend1 {
      http://localhost:8989;
    }
    
  • /etc/nginx/upstreams/backend2.conf

    upstream backend2 {
      http://localhost:8990;
    }
    

1
এটি কি টাইপো? আপস্ট্রিমে " লোকালহস্ট: 8990 ;" এর পরিবর্তে "সার্ভার লোকালহোস্ট: 8990" থাকা উচিত এখানে দেখুন: nginx.org/en/docs/http/ngx_http_upstream_module.html
এমবিদেব

আপনি যে লিঙ্কটি সংযুক্ত করেছেন সেখান থেকে মনে হয় যে কোনও ব্লকের ভিতরে থাকা প্রতিটি কমান্ড একটি আধা কলাম দ্বারা শেষ হয়। যেমন upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; }। এছাড়াও, এটি ;:)
#DsKooL

আমি বোঝাতে চেয়েছিলাম যে কীওয়ার্ড 'সার্ভার' ঠিকানার আগে অনুপস্থিত। সেমিকোলন অংশটি উপেক্ষা করুন।
এমবিদেব

1

একটি HTTP ব্লকের অনেকগুলি সার্ভার চাইল্ড থাকতে পারে। তবে, এনগিনেক্স একটি অনুরোধ প্রক্রিয়া করার জন্য একটি সার্ভার ব্লক নির্বাচন করে। সুতরাং, অনুরোধটি ব্যাকএন্ড 2 অবস্থানটি কখনই 'দেখে না' কারণ এটি প্রথম সার্ভার ব্লকের সাথে মেলে।


আপনি বোঝাতে চেয়েছেন সম্ভবত এটি আমার locationনির্দেশিকা যা ব্যাকএন্ড 2 এর অনুরোধিত অনুরোধটিকে সফল করে তোলে এবং দখল করে?
oDDsKooL

অথবা serverযখন এনজিএনএক্স serverঅনুরোধটি ফরোয়ার্ড করার জন্য উপযুক্ত সন্ধান করে তখন আমার উভয় ব্লকের মধ্যে পার্থক্য করার একটি উপায় প্রয়োজন ?
oDDsKooL

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