Nginx যে স্ট্যাটিক ফাইলগুলি পরিবেশন করে সেগুলিতে আমি এনজিনেক্স এনভায়রনমেন্ট ভেরিয়েবলগুলি ব্যবহার করতে পারি?


10

আমি যদি এনজিএনএক্স কনফিগারেশনে পরিবেশের পরিবর্তনশীল ব্যবহার করি এবং এনজিএনএক্স কেবল স্থিতিশীল ফাইল (এইচটিএমএল, জেএসএস, সিএসএস - উদাহরণস্বরূপ একটি কৌনিকজ অ্যাপ্লিকেশন) পরিবেশন করার জন্য কনফিগার করা থাকে তবে এনজিএনক্স যে কোনও জেএস ফাইলের মধ্যে পরিবেশের পরিবর্তনশীলটি ব্যবহার করতে পারি তার কোনও উপায় আছে কি? ? অথবা অ স্থিতিশীল সার্ভার চালানোর জন্য এটি করার একমাত্র উপায়, যেমন io.js, php, ইত্যাদি run


বিটিডব্লিউ আপনি এনজিনেক্সের কনফিগারেশনে স্থানীয়ভাবে ভেরিয়েবল ব্যবহার করতে পারবেন না।

আমি যখন পরিবেশ সম্পর্কে কথা বলতে মধ্যে Vars nginx কনফিগ আমি গড় মত এই পোস্টে: আমি কিভাবে Nginx.conf মধ্যে এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করতে পারেন তারা কোথায় ব্যবহার env APP_WEB_1_PORT_5000_TCP_ADDR;এবং$ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"};


আপনার ব্যবহারের ক্ষেত্রে হুবহু ব্যাখ্যা করুন

আমার নির্দিষ্ট ব্যবহারের ক্ষেত্রে হ'ল আমার একটি ডকার পাত্রে একটি এনগিনেক্স-চালিত অ্যাঙ্গুলারজেএস অ্যাপ রয়েছে। অ্যাপ্লিকেশনটি একটি "সিঙ্গল পেজ অ্যাপ্লিকেশন" যা সম্পূর্ণরূপে অন্য সিস্টেমে চলমান একটি এপিআই খায়। বর্তমানে আমি উত্পাদন এবং মঞ্চের মধ্যে একটি পৃথক ডকার ধারক পরিচালনা করি কারণ অ্যাপটিতে কিছু কনফিগার রয়েছে যা পৃথক, উদাহরণস্বরূপ গুগল-অ্যানাল্টিক্স কোড। এই পরিবেশ-সম্পর্কিত ডেটা একটি config.jsফাইলে রাখা হয় এবং মানগুলি বর্তমানে হার্ডকোড করা হয়, গিটে masterশাখার জন্য একটি মান এবং শাখার জন্য আলাদা মান staging। আমি নকশাটি পরিবর্তন করতে চাই যাতে আমি উত্পাদন এবং মঞ্চ উভয়ের জন্য একই ধারকটি ব্যবহার করতে পারি । আমি যখন এটি চালাচ্ছি তখন কনটেইনারটিতে একটি ENV ভার পাস করতে চাই ( docker run -e GACODE=UA-12345-6 ...) এবং এনজিএনএক্স ENV ভেরি ব্যবহার করতে পারি (এর মাধ্যমে env GACODE;এবং $ENV{"GACODE"}তাইconfig.jsফাইল GoogleAnaltyics কোডগুলিকে হার্ডকোডিংয়ের পরিবর্তে পাস করা ব্যবহার করতে পারে)। আমি জানি না এটি সম্ভব কিনা (তাই প্রশ্ন;))। কেবলমাত্র এনজিএনএক্স ব্যবহার করা আমার ধারকটিকে একটি একক প্রক্রিয়া করে তোলে, আমি যদি io.js ব্যবহার করতে হয় তবে আমার একাধিক সংযুক্ত ধারক প্রয়োজন এবং আরও চলমান অংশগুলি আরও জটিল)।


কি ?! আপনার ব্যবহারের কেসটি হুবহু ব্যাখ্যা করুন যেহেতু এটি প্রদর্শিত হচ্ছে আপনি এটি ভুল দিকে দেখছেন। বিটিডব্লিউ আপনি এনজিনেক্সের কনফিগারেশনে স্থানীয়ভাবে ভেরিয়েবল ব্যবহার করতে পারবেন না।
জাভিয়ের লুকাস

ধন্যবাদ @ জাভিয়ারলুসাস - আরও ব্যাখ্যা করার চেষ্টা করার জন্য আমি প্রশ্নটি আপডেট করেছি।
টম

উত্তর:


4

sub_filter

আপনি যদি একটি সাধারণ স্ট্রিং-প্রতিস্থাপন করতে চান তবে আপনি সাব_ফিল্টার ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:

server {
    sub_filter "REPLACE_THIS" "with this";
    sub_filter_once off; # Don't stop at the first match, replace all of them
    sub_filter_types "text/javascript" "application/json"; # Apply to these mime types in addition to text/html 

    # Everything else
}

তবে এটি একটি এনভায়রনমেন্ট ভেরিয়েবল পড়া সম্ভব নয় মধ্যে nginx কনফিগ - আপনি অবশ্যই স্ক্রিপ্ট লেখার পারেন nginx কনফিগ কোন ভাবেই আপনার যা দরকার দায়ের / একটি বৈধ কনফিগ ফাইল উত্পাদন করতে এবং তারপর রিলোড nginx চাই।


4

আমি সাব_ফিল্টার এবং এনজিএনএক্স এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে পরীক্ষা-নিরীক্ষা করেছি তবে সিদ্ধান্তে পৌঁছেছি যে এটি সম্ভব নয়

উদাহরণস্বরূপ, এটি আমার পরীক্ষা-নিরীক্ষা দেখায় এবং এনজিনেক্সে পাস হওয়া এনভি ব্যবহার করে কোনও ব্লকের মধ্যে কাজ করে নাserver :

env TOMTEST1; # OK - makes $ENV{"TOMTEST1"} available but NOT in server block.

http {

    server {

        # set $TOMTEST1 $ENV{"TOMTEST1"};    # KO - DOES NOT WORK - NGINX WONT START
        set $TOMTEST2   'tomtest2 Var';      # OK - THIS DOES WORK OK

        sub_filter 'TOM_TEST2' $TOMTEST2;       # OK - but not useful to me.
        sub_filter 'TOM_TEST3' 'tomtest3 Var';  # OK - but not useful to me.
        sub_filter_once off;                    # Don't stop at the first match, replace all of them
        sub_filter_types "text/javascript" "application/json"; # Apply to these mime types in addition to text/html

        # Serve static files
        location / {
           try_files $uri /index.html =404;
        }
        ...

যেখানে আমি যে স্ট্যাটিক কনফিগারেশন.জসন ফাইলটি পরিবেশন করছি তার নীচের মতো বিভিন্ন পরীক্ষার স্ট্রিং রয়েছে:

{
    "environment": "local",
    "test1": "$ENV{"TOMTEST1"}",
    "test3": "TOM_TEST2",
    "test4": "TOM_TEST3",
}

@ AD7six উল্লিখিত হিসাবে, এগিয়ে যাওয়ার উপায়টিতে একটি স্ক্রিপ্ট রয়েছে যা nginx স্থানধারীদের থেকে কোনও বৈধ কনফিগারেশন ফাইল তৈরি করা শুরু করার আগে চলে। তবে এটি প্রশ্নটি উত্থাপন করে, যদি কোনও স্ক্রিপ্ট এনজিএনএক্স শুরু হওয়ার আগে চলতে থাকে, আমি পাশাপাশি আমার config.jsonস্ক্রিপ্টটিতে আমার ফাইলের বিষয়বস্তুগুলি সেট করতে পারি এবং এতে মোটেই বিরক্ত না করি sub_filter


2
যদি এটি একটি স্ট্যাটিক ফাইলের জন্য হয় - তবে এটি অবশ্যই এনজিএনএক্স কনফিগারেশনের মাধ্যমে না করা অর্থপূর্ণ হয়ে যায়, আমি ধরেছিলাম আপনার ব্যবহারের হাতের তুলনায় এটি কিছুটা বিস্তৃত। তথ্য / বিপরীতে আমি sub_filter "example.com" "example.dev";স্থানীয় পরিবেশে উত্পাদন ডোমেনের যেকোন এবং সমস্ত রেফারেন্স প্রতিস্থাপন করতে একটি ডেভ সেটআপে ব্যবহার করি কারণ সেই রেফারেন্সগুলি তৃতীয় পক্ষের এপিআই প্রতিক্রিয়াগুলি / অ্যাপ্লিকেশন কোড / জেএস / ডিবি ডাম্পস / ইত্যাদি থেকে আসে। - অর্থাত্ এনজিনেক্সের জন্য এটি যে কোনও HTML / জেএস / জসন প্রতিক্রিয়ার যে কোনও জায়গায় হতে পারে। +1
AD7six

3

আমি ওপি হিসাবে একই সমস্যার সমাধান করার দিকে নজর রেখেছি এবং এই পোস্টটি গুগল অনুসন্ধানে উঠে এসেছে, তাই ভেবেছিলাম আমি একটি সম্ভাব্য সমাধান যুক্ত করব।

এই পোস্টটি কীভাবে এনজিএনএক্স কনফিগারেশনের মধ্যে আপনি পরিবেশের পরিবর্তনশীল প্রকাশ করতে পারবেন: https://blog.doismellburning.co.uk/en वातावरण-variables-in-nginx-config/

এবং আপনি ফাইল সিস্টেমে ফাইল না রেখে সামগ্রী ফিরতে পারেন: এনগিনেক্স কনফিগারেশন থেকে 200 টি ফাইল সরবরাহ না করে জবাব দিন

এই দুটি জিনিস একসাথে রেখে আমরা নিম্নলিখিতটি শেষ করি:

env MY_ENV_VAR;

# Snip

http {
    # Snip

    server {
        # Snip

        location ~ ^/config.js$ {
            add_header Content-Type text/javascript;
            set_by_lua $env_var 'return os.getenv("MY_ENV_VAR")';
            return 200 'const MY_ENV_VAR = \'$env_var\'';
        }
    }
}

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

আশা করি এইটি কাজ করবে.

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