ปัญหาที่เกิดขึ้น
เนื่องจากในปัจุบันบริษัทหลายบริษัทเริ่มจากการพัฒนาแอพริเคชั่นซึ่งส่วนใหญ่จะใช้งานภายในองค์กรนั้นๆ ไม่ได้ให้บุคคลภายเข้าถึงแอพริเคชั่นจากภายนอกองค์กร ทำให้เกิดการเสียโอกาสในการดำเนินธรุกิจ เช่นฝ่ายขายต้องการขายสินค้าแล้วต้องการตัดยอดทันทีถ้าไม่มีการเข้าถึงจากภายนอกองค์กร เช่นจากอินเตอร์เน็ต จะไม่สามารถทำได้
แนวทางในการแก้ไขปัญหา
เนื่องจากการเข้าถึงจากภายนอกองค์กรเข้ามาในองค์กรทำได้โดยการตั้ง Reverse proxy ขึ้นมาเพื่อแก้ไขปัญหานี้iโดยวิธีการทำอาจจะมีหลายวิธี มี Software หลายตัวให้เลือกใช้เช่นโอเพนซอร์ต จำพวก Apache Nginx NodeJS HAproxy หรือโปรดักของ Microsoft เองก็มีพวก TMG เป็นต้น ดังนั้นผมข้อเข้าเรื่องเลยนะครับ โดยจะทำการแนะนำวิธีทำ Apache Reverse proxy on docker สำหรับให้ผู้ใช้งานสามารถเข้าข้อมูลภายในได้ โดยวิธีทำมีดังนี้
ภายในองค์กร ต้องมี network ที่สามารถติดต่อกับ internet ได้ และ อีก network หนึ่งต่อกับ intranet ภายใน เราจะใช้ Reverse proxy ในการอนุญาติให้ผู้ใช้ภายนอกองค์กรสามารถเข้าถึงข้อมูลภายในองค์กรได้ โดยการเข้าถึงจะเรียกการเข้า แบบ naming base คือการเข้าถึงข้อมูลภายในจะต้องใช้ชื่อที่จดทะเบียนกับทาง ISP (internet Service provider) แล้วเท่านั้น ซึ่งมีอยู่หลายบริษัทที่รับจดโดเมน เช่น namecheap เป็นต้น เมื่อต้องการ register new domain หรือถ้าใช้โดเมนเดิม ก็ต้องเพิ่มชื่อของ server ที่เราจะให้ผู้ใช้จากภายนอกเห็น และสามารถเข้าถึงจากภายนอกองค์กรได้ เช่น server1.anyidea.club ก็ต้องไปเพิ่มที่เราทำการเช่า VPS หรือ cloud เอาใว้ โดยของผมใช้ cloud กับทาง digitalOcean ซึ่งถ้าสนใจก็เข้าไปดูโปรโมรชั่นกันได้ หรือเข้าไปอ่านบทความของผมได้ครับ XXX โดยต้องเพิ่มชื่อเข้าไปก่อนเพื่อให้สามารถเข้าถึงด้วยชื่อได้ ตามนี้ครับ


เมื่อได้ชื่อแล้วลองไปตรวจสอบโดยใช้ ping หรือ nslookup ตรวจสอบดูว่าชื่อที่เราตั้งไว้ สามารถใช้งานได้หรือยัง เมื่อได้แล้ว แสดงว่าโดเมนเนมของเราใช้งานได้ ตามตัวอย่างครับ
#ping server1.anyidea.club
ขั้นตอนการติดตั้ง
สิ่งที่ต้องเตรียมสำหรับโปรเจค docker apache reverse proxy
- ubuntu version ล่าสุด ตอนนี้ 16.0.4
- URL ของ ภายในองค์กร
- Certificate file สำหรับการทำ security
- image Dockerfile สามารถ Download ได้จาก github มีหลายวิธีที่จะไป download มานะครับ

เมื่อเตรียมทุกอย่างเรียบร้อยแล้วจัดการนำ file ทั้งหมด นำเข้าเครื่อง server ubuntu ที่เราได้ติดตั้งเอาไว้ โดยจะต้องมี ethernet ที่ต่อเข้ากับ internet ภายในองค์การ 1 ขา และส่วนที่เห็นได้จาก internet 1 ขา
อันดับแรก ตรวจสอบการsetup ของ ubuntu ให้เรียบร้อยก่อน มีดังนี้

- network configuration
- host name และ IP address
- docker ได้ทำการติดตั้งแล้วหรือยัง เพราะ reverse proxy จะเป็นการทำงานบน docker ครับ
#ifconfig -a #hostname #more /etc/resolv.conf #docker info #docker image
เมื่อทุกอย่างผ่านแล้วก็ทำการติดตั้งตัว reverse proxy โดยมีขั้นตอนดังนี้
# git clone https://github.com/chananun/docker-apache-reverse-proxy.git #cd docker-apache-reverse-proxy/ #docker build -t="chananun/apache-reverse-proxy" .
เมื่อทำการ rebuild จะได้ image บน docker แล้วครับ เราสามารถตรวจสอบมา สิ่งที่เราได้ build image ได้หรือเปล่า ตรวจสอบดังนี้ครับ
#docker images
หลังจากนั้นต้องมีการ startup container ซึ่งก่อนจะทำการ start container นั้นต้องมีการแก้ไข file configuration ของ url ภายนอกและภายในครับ
VirtualHost *:80> ServerName xxx.com ServerAlias www.xxx.com ErrorLog logs/xxx.com-80_error_log CustomLog logs/xxx.com_80_access_log common RequestHeader set X-Forwarded-Proto "http" ProxyPreserveHost On ProxyPass / http://xx.xx.xx.xx/ ProxyPassReverse / http://xx.xx.xx.xx/ </VirtualHost>
ไฟล์ต้นแบบที่ให้ไปจะต้องเอาไปแก้ไขให้ตรงกับชื่อโดเมนของตัวเองนะครับ จะได้เรียกจาก internet ได้ โดยไฟล๋จะอยู่ /home/docker-apache-reverse-proxy/mod_proxy/conf.d/xxx.conf จัดการเปลี่ยนให้เป็น configuration ของเราเอง เมื่อแก้ไขเรียบร้อย ก็จะเป็นขั้นตอน startup contrainer โดยมีวิธีการดังนี้
docker run -d -h www.xxx.com -p xx.xx.xx.xx:80:80 -p xx.xx.xx.xx:443:443 --name proxy -v $(pwd)/ssl:/ssl:ro -v $(pwd)/logs/proxy:/var/log/apache2 -v $(pwd)/mod_proxy/conf.d:/mod_proxy/conf.d chananun/apache2-reverse-proxy-ssl
โดย xx.xx.xx.xx เป็น ip address ขาที่ต่อกับ internet โดยจะมีรายละเอียดดังนี้ครับ
-d run contranter เป็นแบบ background คือทำงานเป็นเบี้ยงหลัง
–name =ชื่อของ contrainter
-v คือการ map volume ด้านนอกเข้าไปที่ Container
บทความโดย:ชนะนันท์ พรมสวัสดิ์