Nginx

โครงสร้างไฟล์และไดเรกทอรีของ Nginx

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