Virtual Host หรือที่เรียกว่า Server Block ใน Nginx คือเทคนิคที่ช่วยให้เซิร์ฟเวอร์เดียวสามารถโฮสต์เว็บไซต์หลายแห่งได้พร้อมกัน แต่ละเว็บไซต์จะมีการตั้งค่าและช่องทางการทำงานของตัวเอง แนวคิดนี้มีความสำคัญมากสำหรับผู้ดูแลระบบ เพราะช่วยให้สามารถใช้ประโยชน์จากทรัพยากร Cloud VPS ได้อย่างคุ้มค่า โดยไม่ต้องซื้อเซิร์ฟเวอร์แยกสำหรับแต่ละเว็บไซต์
ในบทความนี้ เราจะอธิบายว่า Virtual Host หรือ Server Block คืออะไร ความแตกต่างระหว่าง Apache และ Nginx วิธีการสร้าง Server Block ตัวอย่างการตั้งค่าจริง และวิธีการทดสอบการตั้งค่าให้ถูกต้อง หากคุณกำลังใช้ Cloud VPS หรือ Cloud Hosting จาก DE แล้วต้องการจัดการเว็บไซต์หลายแห่ง บทความนี้จะช่วยให้คุณเข้าใจหลักการทำงานของ Nginx Server Block อย่างลึกซึ้ง
Virtual Host คืออะไร และ Server Block ใน Nginx คืออะไร
Virtual Host เป็นวิธีการที่เว็บเซิร์ฟเวอร์ใช้ในการจัดการเว็บไซต์หลายแห่งบนเซิร์ฟเวอร์เดียว ไม่ว่าจะมีที่อยู่ IP เดียวหรือหลายที่อยู่ IP ก็ตาม ระบบจะใช้ชื่อโดเมนที่ส่งมาในคำขอ HTTP (HTTP Header: Host) เพื่อระบุว่าผู้ใช้ต้องการเข้าถึงเว็บไซต์ใด
ใน Nginx นั้น Virtual Host เรียกว่า Server Block ซึ่งถือเป็นหน่วยการตั้งค่าหลักของ Nginx ที่ใช้กำหนดว่าเซิร์ฟเวอร์ควรรับฟังพอร์ต (port) ใด ชื่อเซิร์ฟเวอร์ (server name) ใด และจะทำการประมวลผลคำขอ HTTP อย่างไร โดยแต่ละ Server Block สามารถมีการตั้งค่าเฉพาะตัวเอง เช่น root directory, SSL certificates, location directives เป็นต้น
ความแตกต่างระหว่าง Apache Virtual Host และ Nginx Server Block
Apache Virtual Host ใช้ไดเรกทีฟ VirtualHost ในไฟล์ httpd.conf หรือไฟล์อื่น ๆ ที่นำเข้า Apache อ่านไฟล์ทั้งหมดและตัดสินใจว่าจะใช้ Virtual Host ใด โดยจะตรวจสอบชื่อเซิร์ฟเวอร์จากคำขอ HTTP
Nginx Server Block มีประสิทธิภาพสูงกว่าเพราะ Nginx จะใช้ Hash Table เพื่อค้นหา Server Block ที่เหมาะสม ทำให้การค้นหานั้นเร็วกว่าแบบเชิงเส้น นอกจากนี้ Nginx ใช้ Server Block หลายชุดภายในไฟล์ nginx.conf โดยโครงสร้างการตั้งค่ามีความยืดหยุ่นมากขึ้น
วิธีการสร้าง Server Block ใน Nginx
การสร้าง Server Block ใน Nginx ทำได้โดยสร้างไฟล์ตั้งค่าแยกสำหรับแต่ละโดเมนในโฟลเดอร์ /etc/nginx/sites-available/ แล้วสร้าง Symbolic Link ไปยัง /etc/nginx/sites-enabled/
ขั้นตอนที่ 1: สร้างโฟลเดอร์เก็บไฟล์เว็บไซต์
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example.com/logs
sudo chown -R $USER:$USER /var/www/example.com
sudo chmod -R 755 /var/www/example.com
ขั้นตอนที่ 2: สร้างไฟล์ Server Block
sudo nano /etc/nginx/sites-available/example.com
ขั้นตอนที่ 3: เขียนการตั้งค่า Server Block
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.php;
access_log /var/www/example.com/logs/access.log;
error_log /var/www/example.com/logs/error.log;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
ขั้นตอนที่ 4: สร้าง Symbolic Link และ Reload
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo nginx -t
sudo systemctl reload nginx
ตัวอย่างการสร้าง Server Block สำหรับเว็บไซต์หลายแห่งบน Cloud VPS เดียว
หากคุณใช้ Cloud VPS จาก DE และต้องการโฮสต์เว็บไซต์หลายแห่ง คุณสามารถสร้าง Server Block หลายชุดบนเซิร์ฟเวอร์เดียวได้ ตัวอย่างต่อไปนี้แสดงวิธีการตั้งค่า Server Block สำหรับเว็บไซต์สองแห่ง
Server Block สำหรับ example.com
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
Server Block สำหรับ another-site.com
server {
listen 80;
listen [::]:80;
server_name another-site.com www.another-site.com;
root /var/www/another-site.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
}
location /api {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
การสร้าง Server Block พร้อม SSL Certificate
ในยุคปัจจุบัน การใช้ HTTPS มีความสำคัญมากสำหรับเว็บไซต์ทั้งหมด ต่อไปนี้คือตัวอย่างการตั้งค่า Server Block พร้อม SSL Certificate ที่ได้มาจาก Let’s Encrypt
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/example.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
การทดสอบและ Reload Nginx
หลังจากสร้าง Server Block ใหม่ ต้องตรวจสอบให้แน่ใจว่าไฟล์ตั้งค่าไม่มีข้อผิดพลาดก่อน Reload Nginx
# ทดสอบ config
sudo nginx -t
# Reload Nginx
sudo systemctl reload nginx
# ตรวจสอบสถานะ
sudo systemctl status nginx
# ดู error log
sudo tail -f /var/log/nginx/error.log
เคล็ดลับเพิ่มเติมสำหรับการจัดการ Server Block
1. ใช้ Server Block Default — หากต้องการให้เว็บไซต์หนึ่งตอบสนองต่อคำขอที่ไม่จับคู่กับชื่อเซิร์ฟเวอร์ใด ให้เพิ่ม default_server:
listen 80 default_server;
listen [::]:80 default_server;
2. ใช้ Wildcard Server Name — สำหรับ Subdomain หลายแห่ง:
server_name *.example.com example.com;
3. การใช้ Include Directives — หากมีการตั้งค่าที่ซ้ำกัน สามารถสร้างไฟล์ snippet:
include /etc/nginx/snippets/ssl-params.conf;
include /etc/nginx/snippets/php-fpm.conf;
สรุป
Virtual Host หรือ Server Block ใน Nginx เป็นคุณสมบัติพื้นฐานที่มีความสำคัญมากสำหรับการจัดการเว็บไซต์หลายแห่งบนเซิร์ฟเวอร์เดียว ด้วยการตั้งค่า Server Block อย่างถูกต้อง คุณสามารถโฮสต์เว็บไซต์หลายแห่งพร้อมกันบน Cloud VPS เดียว มีการตั้งค่าที่แตกต่างกันสำหรับแต่ละโดเมน และใช้ประโยชน์จากทรัพยากรเซิร์ฟเวอร์ได้อย่างมีประสิทธิภาพ
แนะนำบริการ DE — Cloud VPS และ Cloud Hosting
หากคุณกำลังพิจารณาการใช้ Server Block และต้องการเซิร์ฟเวอร์ที่มีความน่าเชื่อถือและประสิทธิภาพสูง Cloud VPS จาก Dot Enterprise (DE) เป็นตัวเลือกที่ยอดเยี่ยม บริการ Cloud VPS ของ DE มอบความยืดหยุ่นในการปรับแต่งระบบปฏิบัติการและซอฟต์แวร์ตามความต้องการของคุณ
สำหรับผู้ที่ต้องการโซลูชันที่ง่ายกว่า Cloud Hosting จาก DE ก็เป็นตัวเลือกที่ดี โดยมีการจัดการโดเมนหลายแห่งและบริหารจัดการง่ายผ่าน Control Panel ดูข้อมูลเพิ่มเติมได้ที่ https://de.co.th

