Nginx เป็น web server ที่มีประสิทธิภาพสูงและเบา ซึ่งใช้กันอย่างแพร่หลายในการจัดการเว็บไซต์และแอปพลิเคชัน การเข้าใจโครงสร้างไฟล์และไดเรกทอรีของ Nginx เป็นสิ่งสำคัญสำหรับผู้ดูแลระบบและนักพัฒนา เพื่อให้สามารถกำหนดค่า จัดการ และแก้ไขปัญหาได้อย่างมีประสิทธิภาพ
บทความนี้จะอธิบายโครงสร้างไฟล์และไดเรกทอรีหลักของ Nginx ตั้งแต่ไฟล์ config หลัก ไดเรกทอรีต่าง ๆ จนถึงวิธีการจัดระเบียบโครงสร้างให้มีประสิทธิภาพ ซึ่งจะช่วยให้คุณสามารถบริหารจัดการ Nginx บน Cloud VPS ของ DE ได้อย่างเหมาะสม
ไดเรกทอรีหลักของ Nginx
เมื่อติดตั้ง Nginx บนระบบ Linux โดยทั่วไปจะมีไดเรกทอรีหลักอยู่ที่ /etc/nginx ซึ่งเป็นที่เก็บไฟล์ config และการตั้งค่าต่าง ๆ ของ Nginx directory หลักนี้มีโครงสร้างที่เรียบร้อยและมีการแบ่งแยกอย่างชัดเจน
นอกจากนี้ยังมีไดเรกทอรีอื่น ๆ ที่เกี่ยวข้องกับการทำงานของ Nginx เช่น /usr/sbin ที่เก็บ binary ของ Nginx, /var/log/nginx ที่เก็บไฟล์ log, และ /var/cache/nginx ที่ใช้สำหรับการเก็บ cache
ไฟล์ config หลัก nginx.conf
ไฟล์ nginx.conf เป็นไฟล์ config หลักของ Nginx ซึ่งมีอยู่ที่ /etc/nginx/nginx.conf ไฟล์นี้ประกอบด้วยการตั้งค่าพื้นฐานของ Nginx เช่น จำนวน worker processes, timeout settings, และการตั้งค่า global ต่าง ๆ
ตัวอย่างโครงสร้างพื้นฐานของไฟล์ nginx.conf:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
ในไฟล์ nginx.conf จะมีการ include ไฟล์ config อื่น ๆ เช่น ไฟล์ใน /etc/nginx/conf.d/ และ /etc/nginx/sites-enabled/ ซึ่งช่วยให้สามารถจัดการ config ได้อย่างเป็นระเบียบ
โฟลเดอร์ conf.d
โฟลเดอร์ /etc/nginx/conf.d ใช้สำหรับเก็บไฟล์ config เพิ่มเติม โดยทั่วไปไฟล์ config ในที่นี้จะมีนามสกุล .conf เช่น default.conf, ssl.conf, หรือไฟล์ config สำหรับแอปพลิเคชันเฉพาะต่าง ๆ
ไฟล์ config ในโฟลเดอร์นี้จะถูก include อัตโนมัติในไฟล์ nginx.conf ผ่านบรรทัด include /etc/nginx/conf.d/*.conf; ซึ่งหมายความว่าไฟล์ config ทั้งหมดในโฟลเดอร์นี้จะถูกอ่านและใช้งาน
โฟลเดอร์ sites-available และ sites-enabled
โฟลเดอร์ /etc/nginx/sites-available ใช้สำหรับเก็บไฟล์ config ของเว็บไซต์ต่าง ๆ ทั้งหมด แม้ว่าจะยังไม่ได้เปิดใช้งาน ส่วนโฟลเดอร์ /etc/nginx/sites-enabled จะเก็บเฉพาะไฟล์ config ของเว็บไซต์ที่กำลังเปิดใช้งานอยู่
วิธีการจัดการคือ สร้างไฟล์ config ใน sites-available ก่อน แล้วจึงสร้าง symbolic link ไปยัง sites-enabled เมื่อต้องการเปิดใช้งาน ตัวอย่าง:
# สร้างไฟล์ config ใหม่
sudo nano /etc/nginx/sites-available/example.com
# สร้าง symbolic link ไปยัง sites-enabled
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
# ปิดการใช้งานโดยลบ symbolic link
sudo rm /etc/nginx/sites-enabled/example.com
วิธีการนี้ช่วยให้สามารถจัดการหลาย ๆ เว็บไซต์บนเซิร์ฟเวอร์เดียวกันได้อย่างเป็นระเบียบ โดยไม่ต้องแก้ไขไฟล์ nginx.conf ตรง ๆ ซึ่งเหมาะสำหรับผู้ที่ใช้ Cloud VPS หรือ Cloud Hosting ของ DE ที่อาจจัดการเว็บไซต์หลายแห่ง
ไฟล์ mime.types
ไฟล์ /etc/nginx/mime.types ใช้สำหรับกำหนด MIME types ของไฟล์ต่าง ๆ เช่น .html, .css, .js, .jpg เป็นต้น Nginx จะใช้ไฟล์นี้เพื่อบอก browser ว่าไฟล์ที่ส่งมานั้นเป็นประเภทไฟล์อะไร
ตัวอย่างบางส่วนของไฟล์ mime.types:
types {
text/html html htm;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
image/png png;
image/svg+xml svg svgz;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
application/font-woff woff;
application/vnd.ms-fontobject eot;
}
โดยทั่วไป ไฟล์ mime.types นี้จะไม่ต้องแก้ไข เพราะได้รับการออกแบบมาแล้วเพื่อให้ครอบคลุม MIME types ที่ใช้งานทั่วไปทั้งหมด
โฟลเดอร์ log
Nginx จะบันทึก log ทั้ง access log และ error log ลงในไดเรกทอรี /var/log/nginx ซึ่งเป็นสถานที่สำคัญสำหรับการ monitor และ troubleshooting
ไฟล์ log หลัก ๆ ได้แก่:
- access.log — บันทึกทุกคำขอ (request) ที่ Nginx รับได้ รวมถึง IP ของผู้เข้าชม วันเวลา URL ที่เข้าชม HTTP status code และข้อมูลอื่น ๆ
- error.log — บันทึกข้อผิดพลาดและคำเตือน (warning) ที่เกิดขึ้นในการทำงานของ Nginx
ตัวอย่างการดูไฟล์ log:
# ดู access log
tail -f /var/log/nginx/access.log
# ดู error log
tail -f /var/log/nginx/error.log
# ค้นหาข้อมูลเฉพาะในไฟล์ log
grep "error" /var/log/nginx/error.log
grep "404" /var/log/nginx/access.log
โฟลเดอร์ modules
โฟลเดอร์ /etc/nginx/modules-available และ /etc/nginx/modules-enabled ใช้สำหรับจัดการ modules ของ Nginx ในลักษณะเดียวกับ sites-available และ sites-enabled
Modules เป็นส่วนขยายของ Nginx ที่เพิ่มฟังก์ชันการทำงาน เช่น ngx_http_gzip_module สำหรับการบีบอัด ngx_http_ssl_module สำหรับ HTTPS และ ngx_http_auth_module สำหรับการตรวจสอบสิทธิ์
ตัวอย่าง Tree Structure ของ Nginx directory
ต่อไปนี้คือตัวอย่างโครงสร้างไดเรกทอรีของ Nginx ที่สมบูรณ์:
/etc/nginx/
├── nginx.conf # ไฟล์ config หลัก
├── mime.types # ไฟล์กำหนด MIME types
├── conf.d/ # โฟลเดอร์ config เพิ่มเติม
│ └── default.conf
├── sites-available/ # โฟลเดอร์ config เว็บไซต์ทั้งหมด
│ ├── default
│ ├── example.com
│ └── blog.example.com
├── sites-enabled/ # โฟลเดอร์ config เว็บไซต์ที่เปิดใช้
│ ├── default -> ../sites-available/default
│ └── example.com -> ../sites-available/example.com
├── modules-available/ # โฟลเดอร์ modules ทั้งหมด
└── modules-enabled/ # โฟลเดอร์ modules ที่เปิดใช้
/var/log/nginx/
├── access.log # ไฟล์ access log
└── error.log # ไฟล์ error log
/var/cache/nginx/ # โฟลเดอร์ cache
/usr/sbin/
└── nginx # Binary ของ Nginx
/var/run/
└── nginx.pid # ไฟล์ process ID ของ Nginx
ไฟล์ config เว็บไซต์ตัวอย่าง
ตัวอย่างไฟล์ config เว็บไซต์ที่จัดเก็บในโฟลเดอร์ sites-available:
server {
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/log/nginx/example.com_access.log;
error_log /var/log/nginx/example.com_error.log;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
}
location ~ /\.ht {
deny all;
}
}
ไฟล์ config ส่วนกลาง (Global Config)
นอกจากไฟล์ config เฉพาะเว็บไซต์แล้ว Nginx directory ยังอาจมีไฟล์ config ส่วนกลางเพื่อใช้ร่วมกันในหลาย ๆ เว็บไซต์ เช่น:
/etc/nginx/conf.d/ssl.conf— การตั้งค่า SSL/TLS/etc/nginx/conf.d/gzip.conf— การตั้งค่า Gzip compression/etc/nginx/conf.d/security.conf— การตั้งค่าความปลอดภัย
ตัวอย่างไฟล์ config เพื่อเปิดใช้งาน Gzip compression:
# /etc/nginx/conf.d/gzip.conf
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript
application/json application/javascript application/xml+rss
application/rss+xml font/truetype font/opentype
application/vnd.ms-fontobject image/svg+xml;
สรุป
โครงสร้างไฟล์และไดเรกทอรีของ Nginx ได้ถูกออกแบบมาให้มีระเบียบและสะดวกต่อการจัดการ ไฟล์ config หลัก nginx.conf เป็นจุดศูนย์กลางของการตั้งค่า ในขณะที่ไดเรกทอรีต่าง ๆ เช่น conf.d, sites-available, sites-enabled ช่วยให้การจัดการ config มีประสิทธิภาพและเป็นระเบียบมากขึ้น
การทำความเข้าใจโครงสร้างนี้จะช่วยให้ผู้ดูแลระบบสามารถจัดการ Nginx ได้อย่างมืออาชีพ ตั้งแต่การตั้งค่า virtual hosts ไปจนถึงการ troubleshooting ปัญหา ไฟล์ log ที่เก็บไว้ในไดเรกทอรี /var/log/nginx จะช่วยในการติดตามสถานะและประสิทธิภาพของเซิร์ฟเวอร์
แนะนำบริการ DE (Cloud VPS)
หากคุณต้องการที่จะรันเซิร์ฟเวอร์ Nginx ของตัวเอง แนะนำให้ใช้บริการ Cloud VPS จาก DE (Dot Enterprise) ซึ่งเป็นผู้ให้บริการ Cloud Infrastructure ชั้นนำของประเทศไทย
- ประสิทธิภาพสูง — ใช้ hardware ที่ทันสมัย CPU และ RAM ที่มีขนาดเหมาะสม
- เสถียรภาพ — uptime ที่สูง และ support ที่ดี
- ยืดหยุ่น — สามารถปรับแต่งหรือเพิ่มทรัพยากรได้ตามต้องการ
- ราคาเหมาะสม — มีแพ็คเกจราคาต่าง ๆ เพื่อให้เลือกตามงบประมาณ
- Support ไทย — ทีมสนับสนุนที่พูดภาษาไทย
สำหรับข้อมูลเพิ่มเติมและการสมัครใช้บริการ Cloud VPS ของ DE โปรดไปที่ https://de.co.th/cloud-vps

