আপনি কীভাবে শর্তসাপেক্ষে এনগিনেক্স ভোস্টে ফাইলগুলি অন্তর্ভুক্ত করবেন?


12

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

server {
        listen 80 default;
        server_name _;
        root /path/www/$host;

        # Pass PHP scripts to php-fastcgi listening on port 9000
        location ~ \.php {
                include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;


                if (-f /path/www/$host/nginx.conf) {
                        include /path/www/$host/nginx.conf;
                }
        }
}

তবে এটি কাজ করে না এবং আমি যে ত্রুটি পাই তা হ'ল:

nginx: [emerg] "অন্তর্ভুক্ত" নির্দেশিকা এখানে অনুমোদিত নয় ...

হালনাগাদ

আমি ভেবেছিলাম যে পৃথক পৃথকভাবে পরীক্ষা করার পরিবর্তে আমি আমার জন্য চেক অন্তর্ভুক্ত করতে পারি।

server {
        listen 80 default;
        server_name _;
        root /path/www/$host;

        # Pass PHP scripts to php-fastcgi listening on port 9000
        location ~ \.php {
                include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;

                include /path/www/$host/*.nginx;
        }
}

তবে, এটি কাজ করছে বলে মনে হয় না।


আপনি কি এই সমস্যার সমাধান খুঁজে পেয়েছেন? আমি একই নৌকায় আছি, এবং আমি ভাবছি আপনি এটি কীভাবে করলেন?
jackWirdy

দুঃখিত, আমি মনে করি যে সমস্যাটি অন্যরকম ছিল তা শেষ পর্যন্ত সমাধান করেছি।
শিওনক্রস

উত্তর:


8

includeসার্ভার শুরুর সময় এর কাজটি করে - রানটাইম ভেরিয়েবল যেমন $hostব্যবহার করা ifযায় না, যেমন আপনি খুঁজে পেয়েছেন তেমন কোনও প্রসঙ্গে ব্যবহার করাও সক্ষম নয় ।

আপনাকে serverবিভিন্ন হোস্টের জন্য ব্লকগুলি বিভক্ত করতে হবে । দুঃখিত!


31

ভাল, এটি বরং পুরানো, তবে যাইহোক, আমি একটি কাজের আশেপাশে খুঁজে পেয়েছি।

আমার এই স্টাইলে কনফিগার করা vhosts এর সাথে একটি সেটআপ আছে:

/etc/nginx/sites-enabled/site.com.conf

ফাইলটি উপস্থিত রয়েছে কিনা যা যাচাইয়ের পরিবর্তে (যা সম্ভব নয়), আমি কেবল এটি করি:

include /etc/nginx/sites-customizations/site.com.*.conf

এইভাবে আমি সহজেই-ফোল্ডারে একটি ফাইল তৈরি করতে sites-customizationsপারি, যা আমার কনভেনশন অনুসারে মূল কনফিগারেশন হিসাবে একই নামকরণ করা হয়েছে। *আছে যদি কোন অতিরিক্ত কনফিগারেশন ফাইল কাজ প্রায় কাছাকাছি চাই, এটি ভাঙে না হিসাবে। আপনি যদি চান তবে এটি পৃথক ফাইলে একাধিক অতিরিক্ত কনফিগারেশন যুক্ত করতে সক্ষম করে।


5

আমি জানি এটি পুরানো তবে সমাধানের সাহায্যে কেউ যেমন আমার মতো উত্তর চেয়েছিল তেমন সহায়তা করতে পারে।

আমার কাছে কেবল একটি নির্দিষ্ট হোস্টের জন্য আমার অন্তর্ভুক্ত হওয়া পুনর্নির্দেশগুলির একটি গুচ্ছ ছিল এবং যখন নির্দেশে includeঅনুমতি না পাওয়া যায় if, তখন আমি ifযে ফাইলটি অন্তর্ভুক্ত করেছিলাম তার ভিতরে যুক্ত করে শেষ করেছিলাম ...

সুতরাং আমার কাছে include /etc/nginx/conf.d/redirectsসেই ফাইলটির একটি রয়েছে এবং এর ভিতরে:

if ($host = "www.example.com") {
    # Some conf or redirects for this site only.
}

5

আমি glob()ফাংশন প্যাটার্ন সম্প্রসারণের সুবিধা গ্রহণ করি , যা includeনির্দেশনায় এনজিনেক্স দ্বারা ব্যবহৃত হয় এবং আমার ডেবিয়ান সার্ভারগুলিতে ভাল কাজ করে।

আপনার ক্ষেত্রে, এই লাইনটি প্রতিস্থাপন করার চেষ্টা করুন:

include /path/www/$host/nginx.conf;

এটার সাথে:

include /path/www/<hostname>/nginx[.]conf;

এটি একটি ফাইল মুখোশ যা কেবল একটি ফাইলের সাথে মেলে, এবং ফাইলটি উপস্থিত না থাকলে এনজিনেক্স অভিযোগ করবে না। তবে চলকগুলিকে নির্দেশাবলী অন্তর্ভুক্ত করার অনুমতি নেই, সুতরাং আপনাকে অবশ্যই একটি নির্দিষ্ট মান সরবরাহ করতে হবে <hostname>। আমাদের একটি স্ক্রিপ্ট তৈরি করতে হয়েছিল যা স্বতন্ত্র .conf ফাইলগুলি তৈরি করে (প্রতি ভোস্টে একটি)।

সম্পাদন করা

জেরাল্ড স্নাইডার যেমন উল্লেখ করেছেন, আমি $hostপ্রতিস্থাপনে রাখার পরামর্শ দিচ্ছিলাম, যা অনুমোদিত নয়। আমি উপরের পরামর্শ পরিবর্তন করেছি।


1
ভেরিয়েবল $hostএখনও এখানে কাজ করে না।
জেরাল্ড স্নাইডার

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