আপনি একাধিক nginx কনফিগারেশন ফাইলগুলিতে কোনও সার্ভারের অবস্থান নির্ধারণ করতে পারেন?


14

আমার কাছে একই হোস্টে একাধিক রুবি অ্যাপ চলছে:

~/app1
~/app2
~/app3

এবং আমি এই অ্যাপ্লিকেশনগুলিকে উপ-ডিরেক্টরিগুলি ব্যবহার করে এই অ্যাপগুলিতে এনজিন্স প্রক্সি রাখতে চাই:

   http://example.com/app1
   http://example.com/app2
   http://example.com/app3

আমি আগ্রহী যদি এনজিঙ্ক্স আমাকে একাধিক ফাইলে এই অবস্থানগুলি সংজ্ঞায়িত করতে সমর্থ করে, যাতে আমি অ্যাপ্লিকেশনটির সাথে সমস্ত অ্যাপ্লিকেশনের জন্য একটি একক কনফিগারেশন ফাইল না রেখে প্রতিটি কনফিগারেশন রাখতে পারি:

~/app1/nginx.conf
~/app2/nginx.conf
~/app3/nginx.conf

3 টি কনফিগ ফাইলের প্রতিটিতে একক অবস্থানের নির্দেশাবলী সহ সার্ভারকে সংজ্ঞায়িত করার আমার নির্বোধ প্রচেষ্টাটি এমন কনফিগার দিয়েছিল conflicting server name "example.com" on [::]:80, ignoredযা দেখে মনে হয়:

upstream app1 { server 127.0.0.1:4567; }
server {
  listen      [::]:80;
  listen      80;
  servername  example.com
  location    /app1 {
     proxy_pass  http://app1;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host $http_host;
     proxy_set_header X-Forwarded-Proto $scheme;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header X-Forwarded-Port $server_port;
     proxy_set_header X-Request-Start $msec;
  }
}

এই পদ্ধতিতে কনফিগার করার কোনও উপায় আছে কি?

উত্তর:


9

আপনি এর মাধ্যমে বাইরের কনফিগারেশন অন্তর্ভুক্ত করতে পারেন:

include /path/to/config1.conf;
include /path/to/config2.conf;
include /path/to/confdir/*.conf;

server {
    server_name example.com;
    listen      [::]:80;
    listen      80;
}

এবং পৃথক কনফিগারেশনের ভিতরে আপনি যে কোনও বৈধ কোড ব্লক ব্যবহার করতে পারেন:

upstream app1 {
    server 127.0.0.1:8080;
}

location /app1 {
    proxy_pass http://app1;
}

5
এটি কি আসলে কাজ করে? আপস্ট্রিম মডিউলটির সার্ভার মডিউল ব্লকের বাইরে থাকা দরকার নেই?
কার্লি 19

5
সার্ভার ব্লকের বাইরে অবস্থানের নির্দেশের অনুমতি নেই বলে মনে হচ্ছে। কমপক্ষে আমার জন্য, এনজিনেক্স জানিয়েছে "location" directive is not allowed here
আলেকজান্ডার আমেলকিন

হ্যাঁ ... আমি প্রয়োগের জন্য একাধিক ফাইল ছাড়াই সঠিকভাবে এটি করার সহজ উপায় দেখতে পাচ্ছি না: সার্ভার ব্লকের অভ্যন্তরে কাজ করবে এমন একটি, বাইরে কাজ করবে। আমার ধারণা, নমনীয়তার জন্য এবং এটি পরিষ্কার করার জন্য একটি ওয়াইল্ডকার্ড ব্যবহার করা যেতে পারে: include /etc/nginx/above_server.d/*এবংinclude /etc/nginx/in_server.d/*
জেটিওন

1
এই উত্তরটি ভুল
আমিরহসিন

11

আমি বিশ্বাস করি, আপনি এই কনফিগারেশনটি ব্যবহার করতে পারেন:

server {
    server_name example.com;
    listen      [::]:80;
    listen      80;

    include /path/to/applications/*/nginx.conf;
}

এবং তারপরে প্রতিটি অ্যাপ্লিকেশন ডিরেক্টরিতে পুনঃনির্দেশটি কনফিগার করুন:

location    /app1 {
    proxy_pass  http://app1;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Request-Start $msec;
}

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