Calm Hill My Random Thoughts

Apache 2.4 & HTTP Header

တလောက Ubuntu ကို Upgrade လုပ်လိုက်တာ Apache 2.4 ဖြစ်သွားလို့ Virtual Host တွေ အတော်လိုက်ပြင်လိုက်ရတယ်။ ဒီတခါတော့ Main Server ကြီးကို Upgrade လုပ်ရတော့မယ်ဆိုပြီး လုပ်လိုက်ရတော့ Virtual Host အပြင် ပြဿနာအကြီးအကျယ် တက်လာတာက App တွေမှာသုံးနေတဲ့ API တချို့မှာ အလုပ်မလုပ်ပဲရပ်ကုန်တော့ Client တွေတပြိုင်တည်း ပူညံပူညံလုပ်ကြတယ် တကယ်ကတော့ Admin ဆိုတာ လပေါင်းများစွာ ချောချောမွေ့မွေ့နဲ့ ပြဿနာမတက်ခင်အထိ သူရှိမှန်းမသိကြပေမယ့် ပြဿနာစတက်တာနဲ့ မိနစ်ပိုင်းအတွင်း ဘယ်မလဲဆိုပြီး စပြီးတော့လက်ညှိုး အထိုးခံရတဲ့လူတန်းစားပဲ။

အဲဒါနဲ့အကုန်လုံး တစစီဖြုတ်ပြီးတော့ Trace လိုက်ရတော့တယ် HTTP Method တွေအကုန်လုံး POST, GET, DELETE, PUT ဘာမှမဖြစ်ဘူး အဲဒီတော့ အတော်လေးခေါင်းခြောက်ရတယ်။ နောက်မှအသေအချာ သတိထားမိတာက Header တွေမှာ အလုပ်မလုပ်တာ ဖြစ်နေတယ် ဒါပေမယ့် Header သုံးတာက API တခုထဲလည်းမဟုတ်ဘူး အများကြီးသုံးတာ တချို့ Header တွေပဲအလုပ်မလုပ်တော့ အတော်လေး စဉ်းစားရခက်တယ် Apache 2.4 Change List ဖတ်ကြည့်တော့မှ Header Variable Name တွေမှာ Special Character ပါရင် Drop လုပ်ချပါတယ် Special Character ထဲမှာ Underscore ပါအပါအဝင် ဖြစ်နေတယ်။ ကိုယ့်ဆီကသုံးထားတဲ့ Header Name တွေက APPID123_USERNAME ဆိုတာမျိုးတွေ ပေးထားတော့ Drop လုပ်တဲ့အထဲ ပါကုန်တယ်။

API အကုန်လုံးလည်း ချက်ချင်း လိုက်မပြင်နိုင်သေးတော့ ချက်ချင်းလက်ငင်း Backward Compatible ဖြစ်မယ့်နည်းလမ်းကို လိုက်ရှာရတော့တယ်။ Apache ရဲ့ Document မှာကတော့ ပြင်ဖို့နည်းလမ်းကို ရေးထားပြီးသား ဒါပေမယ့် အသေအချာ လိုက်ဖတ်ကြည့်မှ တွေ့နိုင်မယ့် နေရာမှာရှိတယ်။ ခက်ခက်ခဲခဲတော့ မဟုတ်ပါဘူး mod_setenvif ရယ် mod_header ရယ်ကို Enable လုပ်ရမယ် setenvif ရဲ့ Config ကိုနည်းနည်းပြင်ရမယ်။

Add to setenvif.conf

SetEnvIfNoCase ^Accept.Encoding\( ^(.*)\) fix_accept_encoding=$1
RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding

Enable setenvif & headers

sudo a2enmod setenvif
sudo a2enmod headers

Restart Apache

sudo service apache2 restart

ဒီ့ထက်ပိုပြီး သေသေသပ်သပ် ဖြစ်ချင်ရင်တော့ setenvif.conf ထဲမှာပြင်ရမယ့် Config ကို /etc/apache2/conf-available ထဲမှာ File တခုနဲ့ သွားရေးပြီးတော့ a2enconf နဲ့ Enable လုပ်ရင်ရပါတယ် ဘာပိုကောင်းလဲဆိုတော့ နောင်တချိန် Upgrade မှာ mod_setenvif မှာ အပြောင်းအလဲ တခုခုအနေနဲ့ ပါလာခဲ့ရင် Config က ပြင်ပြီးတာ ဖြစ်နေတဲ့အတွက် Manual Diff လုပ်ရလိမ့်မယ် ခွဲရေးထားတော့ စဉ်းစားစရာမလိုပဲနဲ့ Upgrade လုပ်ရလွယ်လိမ့်မယ်။