System

What is Nginx?

အားလုံးပဲ မင်္ဂလာပါ ခင်ဗျ။

ကျွန်တော်ကတော့ Spiceworks Myanmar မှာ Junior Backend Developer အဖြစ်ဝင်ရောက်လုပ်ကိုင်နေတဲ့ မောင်ဝေလျံပြည့် ဖြစ်ပါတယ်ခင်ဗျ။ ကျွန်တော်အခု မျှဝေပေးသွားမယ့် အကြောင်းအရာလေးကတော့ Nginx ဖြစ်ပါတယ်။

Nginx ဆိုတာကတော့ “engine-ex” လို့ အသံထွက်ပြီး သူက Open-Source Web Server တစ်ခုဖြစ်ပါတယ်။ Nginx ရဲ့ ပထမဆုံးအောင်မြင်မှုက Web Server ဖြစ်ပေမယ့် အခုသူ့ကို Reverse Proxy, HTTP Caching, Load Balancing လုပ်တဲ့ အခါတွေမှာပါအသုံးပြုနိုင်ပြီဖြစ်ပါတယ်။ Nginx ကိုစတင်ပြီး တီထွင်ခဲ့တာကတော့ ၂၀၀၂ ခုနှစ်ကနေ စတင်ခဲ့တာဖြစ်ပြီး သူ့ရဲ့ ကနဦးရည်ရွယ်ချက်ကတော့ C10k ဆိုတဲ့ ပြဿနာကို ဖြေရှင်းဖို့ဖြစ်ပါတယ်။ Nginx ကို ၂၀၀၄ ခုနှစ်မှာ စတင်ပြီး အများသုံးနိုင်ဖို့ ထုတ်လုပ်ခဲ့ပြီး ၂၀၁၁ ခုနှစ်မှာတော့ စီးပွားရေးလုပ်ငန်းတစ်ခုအနေနဲ့ စတင်ပြီးတော့ ဝန်ဆောင်မှုတွေပေးခဲ့ပါတယ်။ Nginx ကို C10k ဆိုတဲ့ တပြိုင်နက်တည်း ဆက်သွယ်မှုပေါင်း ၁၀၀၀၀ ကို ဖြေရှင်းနိုင်တဲ့ အဖြေတစ်ခုအနေနဲ့စတင်ပြီးသိလာကြပါတယ်။

Nginx ကို နာမည်ကြီး ကုမ္ပဏီများဖြစ်တဲ့ Autodesk, Atlassian, Intuit, T-Mobile, GitLab, DuckDuckGo, Microsoft, IBM, Google, Adobe, Salesforce, VMWare, Xerox, LinkedIn, Cisco, Facebook, Target, Citrix Systems, Twitter, Apple, Intel စသည့်တို့မှာ အသုံးပြုနေပြီးတော့ Nginx ကတခြား နာမည်ကြီးနေတဲ့ Web Server တွေနဲ့ ယှဉ်လိုက်ရင်တော်တော်လေးကို သူ့ရဲ့စွမ်းဆောင်ရည်က သိသာပါတယ်။ အထူးသဖြင့်ကတော့ static content တွေနှင့် high concurrent requests (တစ်ပြိုင်နက်တည်းတောင်းဆိုလာတဲ့တောင်းဆိုမှု) တွေကို ဖြေရှင်းတဲ့အခါမှာ  သူ့ရဲ့စွမ်းဆောင်ချက်ကို သိသိသာသာ မြင်နိုင်မှာဖြစ်ပါတယ်။

Nginx က ဘယ်လိုအလုပ်လုပ်သလဲဆိုတော့ သူ့ကို စပြီးတီထွင်လိုက်တဲ့ ရည်ရွယ်ချက်အတိုင်းပဲ C10k ကို ဖြေရှင်းပေးနိုင်ဖို့ nginx က Low Memory Usage နှင့် High Concurrency တို့ကို ပေးစွမ်းပြီးတော့ အလုပ်လုပ်ပါတယ်။ Nginx ရဲ့လုပ်ဆောင်ပုံကတော့ web server ကိုဝင်လာတဲ့ တောင်းဆိုချက်တစ်ခုချင်းစီကို အသစ်တောင်းဆိုချက်အဖြစ် မလုပ်ဆောင်ဘဲ asynchronous (တစ်ပြိုင်တည်းမလုပ်ဆောင်သော) ကိုအသုံးပြုပြီး ဝင်လာတဲ့ တောင်းဆိုမှုတွေကို Thread တစ်ခုတည်းမှာပဲ ကိုင်တွယ်ဖြေရှင်းပါတယ်။ Nginx မှာ Master Process တစ်ခုကနေပြီးတော့ Worker Processes တွေအများကြီးကို ထိန်းချုပ်ထားနိုင်ပြီးတော့ အဲ့ Master Process တစ်ခုကနေပဲ ကျန်တဲ့ လုပ်ဆောင်ချက်တွေကို ထိန်းထားပြီး Master Worker မဟုတ်တဲ့ တခြား worker တွေက တကယ့်လုပ်ဆောင်ချက်တွေကိုလုပ်ဆောင်ပေးတာပါ။ ဘာလို့လည်းဆိုတော့ သူက Asynchronous ဖြစ်ပြီးတော့ ဝင်လာတဲ့ တောင်းဆိုချက်တွေကို Master မဟုတ်တဲ့ worker တစ်ခုကနေပြီး ဆောင်ရွက်ပေးနိုင်ပြီး တခြားဝင်လာတဲ့ တောင်းဆိုချက်တွေကို ပိတ်ဆို့ထားခြင်းမရှိတာကြောင့် မြန်မြန်ဆန်ဆန်နှင့် ထိထိရောက်ရောက်ဖြေရှင်းနိုင်တာဖြစ်တယ်။ Nginx မှာပါတဲ့ Features တွေကတော့ Reverse Proxy, Load Balancing, FastCGI, Websockets နှင့် TLS/SSL စတာတွေပါဝင်ပါတယ်။

 

Nginx ကို ဘယ်လိုအသုံးပြုရလဲဆိုတော့ သူ့ကို ပထမဦးဆုံး installation လုပ်ရပါမယ်။ GNU/Linux မှာဆိုရင်တော့ sudo apt-get install nginx ဆိုပြီး Terminal မှာ ရိုက်ပြီးသွင်းလိုက်ရင် ရပါပြီ။ MacOS မှာဆိုရင်တော့ homebrew ကို အသုံးပြုပြီး သွင်းရပါမယ်။ Terminal မှာ brew install nginx ဆိုပြီး ရိုက်သွင်းလိုက်ရင်ရပါပြီ။ Nginx ရဲ့ configuration files တွေကို /etc/nginx/ ဆိုတဲ့လမ်းကြောင်းမှာ တွေ့နိုင်ပြီးတော့ log files တွေကိုတော့ /var/log/nginx ဆိုတဲ့လမ်းကြောင်းမှာ တွေ့နိုင်ပါတယ်။ Nginx ကိုသွင်းပြီးသားလား၊ သွင်းတာအောင်မြင်လားကို စစ်ချင်ရင်တော့ Terminal မှာ nginx -v လို့ ရိုက်ပြီးစစ်ကြည့်နိုင်ပါတယ်။ Nginx ကိုဘယ်လို configure လုပ်ရတယ်ဆိုတာကို  ဒီ https://www.nginx.com/blog/setting-up-nginx/ ဘလော့မှာလေ့လာနိုင်ပါတယ်။ Nginx ရဲ့ configuration တွေကိုထည့်ပြီးသွားရင် ကိုယ်ထည့်လိုက်တဲ့ အချက်အလက်တွေကမှန်မမှန်ကို Terminal မှာ nginx -t သို့မဟုတ် nginx -T ဆိုပြီးရိုက်စစ်နိုင်ပါတယ်။ nginx -t ကတော့ ကိုရေးလိုက်တဲ့ အချက်အလက်တွေမှန်ရင် အောင်မြင်တဲ့အကြောင်းကို ပြန်ပြောမှာဖြစ်ပါတယ်။ အကယ်၍ မှားနေတယ်ဆိုရင် မှားတဲ့နေရာကို ဖြေရှင်းဖို့ပြမှာဖြစ်ပါတယ်။ Nginx ရဲ့ configuration လုပ်ဆောင်ချက်အောင်မြင်တယ်ဆိုရင် Nginx ကို reload လုပ်ပေးရပါမယ်။ သူ့ကို reload လုပ်ဖို့အတွက် nginx -s reload ဆိုပြီး Terminal မှာရိုက်ပေးရပါမယ်။ အားလုံးပြီးရင်တော့ Browser မှာကိုယ်ထည့်ခဲ့တဲ့ server port အတိုင်း ရိုက်ပြီးတော့ ကိုယ့်ရဲ့ Project ကိုစမ်းသပ်နိုင်ပြီဖြစ်ပါတယ်။

အခုဒီ Blog လေးကိုဖတ်ပြီး Nginx ရဲ့ဆိုလိုရင်းနဲ့ အသုံးပြုပုံတွေကိုသိရှိပြီး ဆက်လက်လေ့လာနိုင်ဖို့ အထောက်အကူပြုမယ်လို့ မျှော်လင့်ရင်း နှုတ်ဆက်လိုက်ပါတယ်ခင်ဗျ။

Hello

Leave a Reply

Your email address will not be published. Required fields are marked *