วันอาทิตย์ที่ 30 ธันวาคม พ.ศ. 2561

[Ubuntu] วิธีการติดตั้ง และ การตั้งค่า Apache 2 ใน Ubuntu 18.04

คำสั่งที่ใช้ในการติดตั้ง

sudo apt install apache2

# สั่งให้เริ่มทำงาน และตั้งค่าให้เริ่มทำงานเมื่อเปิดเครื่อง
sudo systemctl start apache2
sudo systemctl enable apache2
เสร็จแล้วให้เปิดเว็บบราวเซอร์พิมพ์ URL ไปที่ http://localhost/ แสดงหน้า Default ของ Apache 2


คำสั่งจัดการ Service ต่างๆ

sudo systemctl [status|enable|disable|start|restart|stop] apache2

การตั้งค่า Virtual Host

ใช้กรณีที่เครื่องเราทำหน้าที่เป็น Host ให้กับเว็บมากกว่าหนึ่งขึ้นไป เช่น www.example.com และ www.example.net
เพื่อบอกให้ Apache 2 รู้ว่าถ้ามีคนเข้ามาดู www.example.com จะใช้ข้อมูลชุดไหน และ www.example.net ใช้ข้อมูลชุดไหน
<VirtualHost *:80>
  ServerAdmin mail@example.com
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /var/www/html/example.com
  
  ErrorLog /path/to/your_error.log
  CustomLog /path/to/your_custom.log combined
</VirtualHost>

<VirtualHost *:80>
  ServerAdmin mail@example.net
  ServerName example.net
  ServerAlias www.example.net
  DocumentRoot /var/www/html/example.net

  # ถ้าต้องการใช้กับ Reverse Proxy
  # ProxyPreserveHost On

  # ProxyPass / http://127.0.0.1:8080/
  # ProxyPassReverse / http://127.0.0.1:8080/
  
  ErrorLog /path/to/your_error.log
  CustomLog /path/to/your_custom.log combined
</VirtualHost>

# ServerAdmin อีเมล์ของผู้ดูแล
# ServerName บอกถึงว่าตัว Server เอง ส่วน ServerAlias คือชื่อ URL ที่จะต้องตรงกัน
# จะใช้แค่ ServerName อย่างเดียวก็ได้ ต้องเขียนให้ครบ เช่น www.example.com ไปเลย
<VirtualHost *:80>

  # Visual Host และ Redirect

  ServerName example.net
  ServerAlias www.example.net
  Redirect / https://www.example.net/

</VirtualHost>
เสร็จแล้วอย่าลืม Restart Apache 2 สักรอบ
ใครส่งสัยไปอ่านที่ mod_core หรือตัวอย่างอื่นๆ 2.4/vhost/example

การเปิด SSL ให้กับ Apache 2

sudo a2enmod ssl
sudo a2ensite default-ssl
การตั้งค่าไฟล์ ให้ไปที่ /etc/apache2/sites-enabled/default-ssl.conf
sudo nano /etc/apache2/sites-enabled/default-ssl.conf

<VirtualHost *:443>
  SSLEngine on
  SSLCertificateFile /path/to/your_certification.crt
  SSLCertificateKeyFile /path/to/your_private.key

  # ไฟล์นี้ไม่มีก็ได้
  SSLCertificateChainFile /path/to/your_chain.crt
</VirtualHost>
เมื่อเซฟไฟล์แล้วให้รีสตาร์ท Apache 2 ครั้งหนึ่ง

--------- บันทึก ----------

โฟลเดอร์ไฟล์คอนฟิกไฟล์ (config) จะอยู่ที่ /etc/apache2/sites-available/
และ ถ้าใช้คำสั่ง a2ensite ก็จะทำการลิงค์ไฟล์ในโฟลเดอร์ /etc/apache2/sites-enabled/ ให้เรา
ไฟล์ต้นฉบับอยู่ที่ sites-avaliable ส่วนลิงค์จะอยู่ที่ sites-enabled เพื่อให้ง่ายต่อการใช้ ถ้าไม่ใช่ก็แค่ลบใน sites-enabled ออก

------------------------------




การเปิด Mod Rewrite

เปิดการใช้งาน Mod Rewrite ของ Apache2
sudo a2enmod rewrite
sudo systemctl restart apache2
จากนั้นเพิ่มค่าในไฟล์ /etc/apache2/sites-avaliable/000-default
<Directory /var/www/html>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Require all granted
</Directory>
เสร็จแล้วทำการ Restart Apache2 อีกครั้ง
sudo systemctl restart apache2
จากนั้นก็ให้เราเอาไฟล์ .htaccess ไปวางไว้ใน /var/www/html ได้เลย


การทำ Reverse Proxy และ Load Balance

ติดตั้ง Module ที่จำเป็นตามนี้
mod_proxy เป็นโมดูลที่ทำให้ Apache 2 ทำการส่งต่อ และทำหน้าที่เป็น Gateway
mod_proxy_http รองรับการใช้ Proxy ผ่านทาง HTTP
mod_proxy_connect รองรับการใช้ Proxy ผ่านทาง HTTPS ด้วย
mod_proxy_balancer และ mod_lbmethod_byrequests เพิ่มความสามารถในเพื่อทำ Load Balance

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_connect
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests

sudo systemctl restart apache2

การ Config เพื่อทำ Reverse Proxy HTTP -> HTTP ตามนี้
<VirtualHost *:80>
  ProxyPreserveHost On

  ProxyPass / http://192.168.0.5:80/
  ProxyPassReverse / http://192.168.0.5:80/

  # ถ้า Server ปลายทางมี path ควรทำให้เหมือนกัน
  ProxyPass /example/ http://192.168.0.5:80/example/
  ProxyPassReverse /example/ http://192.168.0.5:80/example/

</VirtualHost>

sudo systemctl restart apache2

การ Config เพื่อทำ Reverse Proxy HTTPS -> HTTPS ตามนี้
<VirtualHost *:443>
  SSLProxyEngine On
  ProxyPreserveHost On

  ProxyPass / https://172.16.0.5:443/
  ProxyPassReverse / https://172.16.0.5:443/

  # ถ้า Server ปลายทางมี path ควรทำให้เหมือนกัน
  ProxyPass /example/ https://172.16.0.5:443/example/
  ProxyPassReverse /example/ https://172.16.0.5:443/example/

</VirtualHost>

sudo systemctl restart apache2

การ Config เพื่อทำ Load Balance ตามนี้
<VirtualHost *:80>

<Proxy balance://mycluster>
  BalancerMember http://127.0.0.1:8080
  BalancerMember http://127.0.0.1:8082
</Proxy>
  
  ProxyPreserveHost On

  ProxyPass / banalcer://mycluster/
  ProxyPassReverse / balancer://mycluster/
</VirtualHost>

sudo systemctl restart apache2




ขอบคุณข้อมูล
Digicert | Ubuntu Server Apache2 OpenSSL
Digital Ocean | Virtual Host, Proxy Server and Load Balance

Stack Overflow
Proxy with Authentication, Proxy with HTTPS

ไม่มีความคิดเห็น:

แสดงความคิดเห็น