Apache Web Server — ติดตั้งและตั้งค่าบน Linux

Apache Web Server — ติดตั้งและตั้งค่าบน Linux
Apache Web Server — ติดตั้งและตั้งค่าบน Linux - ภาพประกอบบทความ

ติดตั้ง Apache บน Ubuntu/CentOS ตั้งค่า VirtualHost, mod_rewrite, SSL, MPM tuning พร้อมตัวอย่าง Config จริงที่ใช้ได้ทันที

Apache Web Server

Apache HTTP Server คืออะไร

Apache HTTP Server หรือที่เรียกสั้นๆว่า Apache เป็น Web Server แบบ Open Source ที่ได้รับความนิยมสูงสุดมาตั้งแต่ปี 1995 พัฒนาโดย Apache Software Foundation ปัจจุบันยังคงเป็น Web Server ที่ใช้งานมากที่สุดในโลกโดยมี Market Share ประมาณ 30% จากข้อมูลของ Netcraft Survey ปี 2026

Apache ทำงานบนระบบปฏิบัติการหลักทุกตัวทั้ง Linux, Windows และ macOS แต่ในบทความนี้จะเน้นการติดตั้งและตั้งค่าบน Linux ซึ่งเป็น Platform ที่นิยมใช้งานมากที่สุดสำหรับ Production Server

ติดตั้ง Apache บน Ubuntu/Debian

การติดตั้งบน Ubuntu หรือ Debian ทำได้ง่ายผ่าน apt package manager ดังนี้

# อัพเดท package list
sudo apt update

# ติดตั้ง Apache2
sudo apt install apache2 -y

# เปิดใช้งานและตั้งค่าให้ start อัตโนมัติ
sudo systemctl enable apache2
sudo systemctl start apache2

# ตรวจสอบสถานะ
sudo systemctl status apache2

หลังติดตั้งเสร็จ Apache จะเริ่มทำงานที่ Port 80 ทันที เปิด Browser ไปที่ http://your-server-ip จะเห็นหน้า Default Page ของ Apache

โครงสร้างไฟล์สำคัญบน Ubuntu:

ติดตั้ง Apache บน CentOS/RHEL/AlmaLinux

บน CentOS หรือ RHEL-based distros ใช้ dnf หรือ yum:

# ติดตั้ง httpd
sudo dnf install httpd -y

# เปิดใช้งาน
sudo systemctl enable httpd
sudo systemctl start httpd

# เปิด Firewall สำหรับ HTTP/HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

โครงสร้างไฟล์บน CentOS แตกต่างจาก Ubuntu เล็กน้อย:

ตั้งค่า VirtualHost — รันหลายเว็บบน Server เดียว

VirtualHost คือฟีเจอร์ที่ทำให้ Apache รันหลายเว็บไซต์บน Server เครื่องเดียวได้ โดยแยกตาม Domain Name ซึ่งเป็นสิ่งที่ใช้งานจริงแทบทุก Server

สร้าง VirtualHost บน Ubuntu

# สร้าง Directory สำหรับเว็บไซต์
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example.com

# สร้างไฟล์ VirtualHost
sudo nano /etc/apache2/sites-available/example.com.conf

เนื้อหาของไฟล์ VirtualHost:

<VirtualHost *:80>
 ServerName example.com
 ServerAlias www.example.com
 ServerAdmin admin@example.com
 DocumentRoot /var/www/example.com/public_html

 <Directory /var/www/example.com/public_html>
 Options -Indexes +FollowSymLinks
 AllowOverride All
 Require all granted
 </Directory>

 ErrorLog /example.com-error.log
 CustomLog /example.com-access.log combined
</VirtualHost>
# เปิดใช้งาน VirtualHost
sudo a2ensite example.com.conf

# ปิด Default Site (ถ้าไม่ต้องการ)
sudo a2dissite 000-default.conf

# ตรวจสอบ Syntax
sudo apache2ctl configtest

# Reload Apache
sudo systemctl reload apache2

คำสั่ง a2ensite และ a2dissite เป็นเครื่องมือเฉพาะของ Debian/Ubuntu ที่ช่วยจัดการ Symlink ใน sites-enabled โดยอัตโนมัติ บน CentOS ให้วาง Config ไว้ใน /etc/httpd/conf.d/ แล้ว Reload ได้เลย

ตั้งค่า mod_rewrite — URL Rewriting

mod_rewrite เป็น Module ที่ใช้สำหรับเปลี่ยนแปลง URL ทำ Redirect และสร้าง Clean URL ซึ่งสำคัญมากทั้งเรื่อง SEO และ User Experience

# เปิดใช้งาน mod_rewrite (Ubuntu)
sudo a2enmod rewrite
sudo systemctl restart apache2

ตัวอย่างการใช้ .htaccess สำหรับ WordPress หรือ CMS ทั่วไป:

# เปิด Rewrite Engine
RewriteEngine On

# บังคับใช้ HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L, R=301]

# บังคับใช้ www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301, L]

# Clean URL สำหรับ PHP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L, QSA]

สิ่งสำคัญคือต้องตั้ง AllowOverride All ใน VirtualHost Config ด้วย ไม่งั้น .htaccess จะไม่ทำงาน ถ้าไม่ต้องการใช้ .htaccess (เพื่อประสิทธิภาพที่ดีกว่า) ให้ใส่ Rewrite Rules ใน VirtualHost Config โดยตรงแทน

ติดตั้ง SSL Certificate ด้วย Let's Encrypt

HTTPS เป็นสิ่งจำเป็นสำหรับทุกเว็บไซต์ในปัจจุบัน ทั้งเรื่องความปลอดภัยและ SEO Ranking วิธีที่ง่ายที่สุดคือใช้ Certbot กับ Let's Encrypt ซึ่งให้ SSL Certificate ฟรี

# ติดตั้ง Certbot (Ubuntu)
sudo apt install certbot python3-certbot-apache -y

# ขอ SSL Certificate
sudo certbot --apache -d example.com -d www.example.com

# ทดสอบ Auto-Renew
sudo certbot renew --dry-run

Certbot จะแก้ไข VirtualHost Config ให้อัตโนมัติ สร้างไฟล์ example.com-le-ssl.conf ที่ Listen Port 443 พร้อม Redirect จาก HTTP ไป HTTPS

ตัวอย่าง SSL VirtualHost ที่ Certbot สร้างให้:

<VirtualHost *:443>
 ServerName example.com
 ServerAlias www.example.com
 DocumentRoot /var/www/example.com/public_html

 SSLEngine on
 SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
 Include /etc/letsencrypt/options-ssl-apache.conf

 Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

แนะนำให้เพิ่ม HSTS Header เพื่อบอก Browser ว่าเว็บนี้ใช้ HTTPS เท่านั้น และตั้ง Cron Job สำหรับ Renew Certificate อัตโนมัติ:

# เพิ่มใน crontab
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload apache2"

ปรับแต่ง MPM — Multi-Processing Module

MPM เป็นหัวใจของ Apache ที่กำหนดวิธีจัดการ Connection จาก Client มี 3 แบบหลัก:

# ตรวจสอบ MPM ที่ใช้อยู่
apachectl -V | grep MPM

# เปลี่ยนเป็น event MPM (Ubuntu)
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2

ตั้งค่า MPM Event สำหรับ Server ที่มี RAM 8GB:

# /etc/apache2/mods-available/mpm_event.conf
<IfModule mpm_event_module>
 StartServers 4
 MinSpareThreads 75
 MaxSpareThreads 250
 ThreadLimit 64
 ThreadsPerChild 25
 MaxRequestWorkers 400
 MaxConnectionsPerChild 10000
 ServerLimit 16
</IfModule>

คำอธิบายค่าสำคัญ:

สูตรคำนวณ MaxRequestWorkers: ดู RAM ที่เหลือหลังหัก OS และ Service อื่น หารด้วย RAM ที่ Apache ใช้ต่อ Process ตรวจสอบด้วย ps aux | grep apache2 | awk '{sum+=$6} END {print sum/NR/1024 " MB"}'

Security Hardening สำหรับ Apache

การตั้งค่าความปลอดภัยเป็นสิ่งที่ต้องทำทันทีหลังติดตั้ง อย่ารอจนมีปัญหา

# /etc/apache2/conf-available/security.conf

# ซ่อน Apache Version
ServerTokens Prod
ServerSignature Off

# ปิด Directory Listing
<Directory /var/www/>
 Options -Indexes
</Directory>

# ป้องกัน Clickjacking
Header always set X-Frame-Options "SAMEORIGIN"

# ป้องกัน XSS
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"

# Content Security Policy
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'"

# ปิด HTTP TRACE Method
TraceEnable Off

# จำกัดขนาด Request Body (10MB)
LimitRequestBody 10485760
# เปิดใช้งาน headers module
sudo a2enmod headers
sudo a2enconf security
sudo systemctl reload apache2

นอกจากนี้ควรตั้งค่า Firewall ด้วย UFW หรือ iptables ให้เปิดเฉพาะ Port 80, 443 และ SSH เท่านั้น:

sudo ufw allow 'Apache Full'
sudo ufw allow ssh
sudo ufw enable

Performance Tuning — เพิ่มความเร็ว Apache

นอกจาก MPM แล้ว ยังมีอีกหลายจุดที่ปรับแต่งได้:

เปิด Compression ด้วย mod_deflate

sudo a2enmod deflate

# /etc/apache2/mods-available/deflate.conf
<IfModule mod_deflate.c>
 AddOutputFilterByType DEFLATE text/html text/plain text/xml
 AddOutputFilterByType DEFLATE text/css text/javascript
 AddOutputFilterByType DEFLATE application/javascript application/json
 AddOutputFilterByType DEFLATE application/xml application/xhtml+xml
 DeflateCompressionLevel 6
</IfModule>

ตั้งค่า Cache ด้วย mod_expires

sudo a2enmod expires

<IfModule mod_expires.c>
 ExpiresActive On
 ExpiresByType image/jpeg "access plus 1 year"
 ExpiresByType image/png "access plus 1 year"
 ExpiresByType image/webp "access plus 1 year"
 ExpiresByType text/css "access plus 1 month"
 ExpiresByType application/javascript "access plus 1 month"
 ExpiresByType text/html "access plus 1 hour"
</IfModule>

ปิด .htaccess Lookup (ถ้าไม่ใช้)

การตั้ง AllowOverride None จะทำให้ Apache ไม่ต้องค้นหาไฟล์ .htaccess ในทุก Directory ซึ่งช่วยเพิ่มความเร็วได้มาก โดยเฉพาะเว็บที่มีโครงสร้าง Directory ลึกหลายชั้น ย้าย Rules จาก .htaccess ไปใส่ใน VirtualHost Config แทน

เปิด HTTP/2

# เปิด HTTP/2 (ต้องใช้กับ HTTPS)
sudo a2enmod http2

# เพิ่มใน VirtualHost
Protocols h2 h2c http/1.1

HTTP/2 รองรับ Multiplexing ทำให้โหลดหลาย Resource พร้อมกันได้เร็วขึ้นมาก แต่ต้องใช้คู่กับ mpm_event เท่านั้น ไม่ทำงานกับ mpm_prefork

Monitoring และ Log Analysis

การดูแล Apache ที่ดีต้องมีระบบ Monitoring ครบถ้วน:

# เปิด mod_status สำหรับ Monitoring
sudo a2enmod status

# เพิ่มใน Config
<Location "/server-status">
 SetHandler server-status
 Require ip 127.0.0.1
 Require ip 192.168.1.0/24
</Location>

เข้าดูได้ที่ http://localhost/server-status จะเห็นข้อมูล Connection ปัจจุบัน, Workers ที่ใช้งาน, Request per Second และอื่นๆ

สำหรับ Log Analysis แนะนำ GoAccess ซึ่งวิเคราะห์ Log แบบ Real-time:

# ติดตั้ง GoAccess
sudo apt install goaccess -y

# วิเคราะห์ Access Log แบบ Real-time
goaccess /var/log/apache2/access.log --log-format=COMBINED -o /var/www/html/report.html --real-time-html

เปรียบเทียบ Apache กับ Nginx

คุณสมบัติApacheNginx
สถาปัตยกรรมProcess/Thread-basedEvent-driven (Async)
.htaccessรองรับไม่รองรับ
Dynamic Contentประมวลผลเองได้ (mod_php)ต้อง Proxy ไป PHP-FPM
Static Contentเร็วเร็วกว่า
RAM Usageสูงกว่า (prefork)ต่ำกว่า
Config Flexibilityสูงมาก (.htaccess)ต้องแก้ Config แล้ว Reload
Module Systemโหลดแบบ Dynamic ได้ต้อง Compile ใหม่ (ส่วนใหญ่)

ในทางปฏิบัติ หลายองค์กรใช้ Nginx เป็น Reverse Proxy ด้านหน้าแล้วส่ง Request ไปให้ Apache ที่อยู่ด้านหลัง ได้ข้อดีของทั้งสองฝั่งคือ Nginx จัดการ Static Files และ SSL Termination ส่วน Apache จัดการ Dynamic Content ผ่าน mod_php หรือ mod_rewrite

FAQ คำถามที่พบบ่อย

Q: Apache กับ Nginx ตัวไหนดีกว่า?
A: ขึ้นอยู่กับ Use Case ถ้าต้องการ .htaccess หรือใช้ mod_php เลือก Apache ถ้าเน้น Reverse Proxy หรือ Static Content เลือก Nginx หรือจะใช้ทั้งคู่ร่วมกันก็ได้
Q: ควรใช้ MPM แบบไหน?
A: แนะนำ mpm_event สำหรับ Production ใหม่ทุกตัว ใช้ prefork เฉพาะกรณีที่ต้องใช้ mod_php แบบ built-in เท่านั้น ถ้าใช้ PHP-FPM ได้ให้ใช้ event แทน
Q: Apache รองรับ Connection พร้อมกันได้กี่ตัว?
A: ขึ้นอยู่กับค่า MaxRequestWorkers และ RAM ของ Server ตั้งค่า mpm_event บน Server RAM 8GB รับได้ประมาณ 400-800 Connection พร้อมกัน ถ้าต้องการมากกว่านี้ต้อง Scale แบบ Horizontal
Q: Let's Encrypt Certificate หมดอายุทุกกี่วัน?
A: หมดอายุทุก 90 วัน แต่ Certbot จะ Renew ให้อัตโนมัติผ่าน Cron Job หรือ Systemd Timer ตรวจสอบด้วยคำสั่ง certbot certificates ว่า Certificate ยังไม่หมดอายุ

สรุป

Apache HTTP Server ยังคงเป็น Web Server ที่เชื่อถือได้และเหมาะกับงาน Production ในปี 2026 จุดเด่นคือ Module System ที่ยืดหยุ่น, รองรับ .htaccess, Community ขนาดใหญ่ และ Documentation ที่ครบถ้วน

สิ่งสำคัญที่ต้องจำ:

หวังว่าบทความนี้จะช่วยให้ทุกู้คืนติดตั้งและตั้งค่า Apache ได้อย่างมั่นใจครับ ถ้ามีคำถามเพิ่มเติมสอบถามได้เลย

อ.บอม (Bom)
อ. บอม (Bom)
IT Expert & Founder of SiamCafe.net Since 1997
ประสบการณ์ IT 30+ ปี, Forex 13+ ปี, XM VIP Partner

Apache Web Server

Apache Web Server เป็นส่วนสำคัญที่ช่วยเพิ่มประสิทธิภาพการทำงานของระบบ การตั้งค่าอย่างถูกต้องจะช่วยลดปัญหาและเพิ่มความเสถียรให้กับ Infrastructure โดยรวม