Calm Hill My Random Thoughts

Webserver Proxy

ပုံမှန်အားဖြင့် Web Server တွေက Server-side Programming Language အတော်များများကို Support လုပ်ပါတယ် ဥပမာဆိုရင် Apache ပေါ်မှာ mod_php, mod_ruby, mod_wsgi, mod_python, mod_perl စသည်ဖြင့်ပေါ့ Nginx မှာလည်း FastCGI နဲ့ Language အတော်များများကို သုံးလို့ရတာပါပဲ။ ဒါပေမယ့် သုံးချင်တဲ့ Programming Language က လက်ရှိသုံးနေတဲ့ Web Server မှာ ဘယ်လိုမှသုံးလို့မရတာလည်းရှိတယ် ဥပမာဆိုရင် JSP အတွက်ဆို Tomcat, GlassFish စသည်ဖြင့် မသုံးမဖြစ်သုံးရမယ် node.js အတွက် Apache Module ရှာနေလို့လည်းမရှိဘူး။ Physical Resource ကလည်း အကန့်အသတ်နဲ့ဆိုရင် Physical Server တစ်လုံးမှာ Multiple Web Server တင်ရတတ်တယ်။

Multiple Web Server ဖြစ်လာရင် ပထမဆုံးအခက်အခဲက Port တစ်ခုထဲမှာ Multiple Web Server Install လုပ်လို့မရတာပါ Web Server ဖြစ်တဲ့အတွက် Standard မဟုတ်တဲ့ Port မှာလည်း Setup လုပ်လို့မဖြစ်နိုင်ဘူး။ အဲဒီ့အခြေအနေမှာ ကိုယ်သုံးမယ့် Web Server တွေမှာ အဓိကထားသုံးမယ့် Server ကိုရွေးပြီးတော့ ကျန်တဲ့ Server တွေကို Non-Standard Port မှာ Run နေပြီးတော့ Primary Web Server ကို Proxy အနေနဲ့တဆင့်ခံပြီး Access လုပ်ရတော့တယ်။ Proxy ကို Configure လုပ်တာက သုံးမယ့် Server အပေါ်မူတည်တယ်။ ဥပမာဆိုရင်

Apache

ProxyPass / http://localhost:8080
ProxyPassReverse / http://localhost:8080

Nginx

location / {
    proxy_pass http://localhost:8080;
}
Proxy သုံးရင် Performace ပြဿနာတော့ရှိပါတယ် Performace က Physical Server Configuration ရယ် သုံးထားတဲ့ Primary Web Server အပေါ်မှာမူတည်တယ် Apache မှာဆိုရင် Proxy နောက်က Server ကို Access လုပ်နေရင် Apache Thread ဟာ တစ်ဘက်က Reply ပြန်မလာမချင်း Block ဖြစ်တဲ့အတွက် Resource လည်းပိုကုန်တယ် အဲဒီလိုအခြေအနေမှာတော့ Nginx ရဲ့ Non-blocking တွေက သိသိသာသာ ပိုကောင်းပါတယ်။ ဒါပေမယ့်လည်း အဲဒါတစ်ခုထဲနဲ့ Nginx ပြောင်းသုံးမယ်လည်း ဆုံးဖြတ်လို့ဖြစ်တာမဟုတ် လက်ရှိအလုပ်လုပ်နေတဲ့ System တစ်ခုကို ပြောင်းဖို့ဆုံးဖြတ်ရတာက ပိုပြီးတော့အန္တရာယ်ကြီးပါတယ်။ Performance တစ်ခုထဲအတွက်ဆိုရင်တော့ တစ်ခြားနည်းလမ်းနဲ့ ဖြေရှင်းလို့ရနိုင်ရင်လည်းရ ဒါမှမဟုတ် သိပ်ကွာဟမှုမရှိရင်လည်း ထားလိုက်ရတာလည်း ရှိတာပါပဲ။