การเพิ่มช่องทางเข้าถึงแอพริเคชั่นภายในองค์กรด้วย Apache reverse proxy on Docker

584

ปัญหาที่เกิดขึ้น

เนื่องจากในปัจุบันบริษัทหลายบริษัทเริ่มจากการพัฒนาแอพริเคชั่นซึ่งส่วนใหญ่จะใช้งานภายในองค์กรนั้นๆ ไม่ได้ให้บุคคลภายเข้าถึงแอพริเคชั่นจากภายนอกองค์กร ทำให้เกิดการเสียโอกาสในการดำเนินธรุกิจ เช่นฝ่ายขายต้องการขายสินค้าแล้วต้องการตัดยอดทันทีถ้าไม่มีการเข้าถึงจากภายนอกองค์กร เช่นจากอินเตอร์เน็ต จะไม่สามารถทำได้

แนวทางในการแก้ไขปัญหา

เนื่องจากการเข้าถึงจากภายนอกองค์กรเข้ามาในองค์กรทำได้โดยการตั้ง 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 โดยต้องเพิ่มชื่อเข้าไปก่อนเพื่อให้สามารถเข้าถึงด้วยชื่อได้ ตามนี้ครับ

create_cname_server1_anyidea
รุปที่ 1 เลือก CNAME
cname_server1_anyidea
รูปที่ 2 ให้เพิ่มชือ server ที่เราต้องการ

เมื่อได้ชื่อแล้วลองไปตรวจสอบโดยใช้ ping หรือ nslookup ตรวจสอบดูว่าชื่อที่เราตั้งไว้ สามารถใช้งานได้หรือยัง เมื่อได้แล้ว แสดงว่าโดเมนเนมของเราใช้งานได้ ตามตัวอย่างครับ
#ping server1.anyidea.club

ขั้นตอนการติดตั้ง

สิ่งที่ต้องเตรียมสำหรับโปรเจค docker apache reverse proxy

  1. ubuntu version ล่าสุด ตอนนี้ 16.0.4 
  2. URL ของ ภายในองค์กร
  3. Certificate file สำหรับการทำ security
  4. image Dockerfile   สามารถ Download ได้จาก github มีหลายวิธีที่จะไป download มานะครับ
github_1
รุปที่ 3 แสดงการ download apache reverse proxy source จาก github

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

อันดับแรก ตรวจสอบการsetup ของ ubuntu ให้เรียบร้อยก่อน มีดังนี้

reverse
รุปที่ 4 การทำงาน Reverse proxy
  • 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

docker_image

หลังจากนั้นต้องมีการ 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

 

บทความโดย:ชนะนันท์ พรมสวัสดิ์

Facebook Comments