Nginx

Nginx คืออะไร — เว็บเซิร์ฟเวอร์ที่มีประสิทธิภาพสูงบน Cloud VPS

Nginx (อ่านว่า “Engine-X”) คือเว็บเซิร์ฟเวอร์ที่ทำงานด้วยสถาปัตยกรรม event-driven ซึ่งออกแบบมาเพื่อให้มีประสิทธิภาพสูง ใช้ทรัพยากรน้อย และสามารถจัดการการเชื่อมต่อพร้อมกันจำนวนมากได้อย่างมีประสิทธิภาพ ต่างจาก Apache ที่ใช้สถาปัตยกรรม process-based หรือ thread-based ทำให้ Nginx กลายเป็นตัวเลือกยอดนิยมสำหรับการสร้าง Cloud VPS ที่ต้องการประสิทธิภาพสูงสุด

บทความนี้จะอธิบายรายละเอียดเกี่ยวกับ Nginx คืออะไร ประวัติความเป็นมา วิธีการทำงาน คุณสมบัติหลัก และวิธีการติดตั้งและตั้งค่า Nginx บน Cloud VPS ของคุณ เพื่อให้คุณเข้าใจและสามารถใช้เว็บเซิร์ฟเวอร์ทรงพลังนี้ได้อย่างเต็มที่

Nginx คืออะไร — บทนำเบื้องต้น

Nginx เป็นเว็บเซิร์ฟเวอร์แบบเปิดซอร์ส (Open Source) ที่เก่าแก่และขึ้นชื่อในการจัดการการเชื่อมต่อพร้อมกันจำนวนมหาศาล โดยใช้หน่วยความจำและทรัพยากร CPU น้อยกว่าเว็บเซิร์ฟเวอร์แบบดั้งเดิมอย่าง Apache HTTP Server มากมาย Nginx ไม่ได้เพียงแค่เป็นเว็บเซิร์ฟเวอร์ธรรมดาเท่านั้น แต่สามารถทำหน้าที่เป็น Reverse Proxy, Load Balancer, HTTP Cache, หรือ Mail Proxy ได้อีกด้วย

การใช้ Nginx บน Cloud VPS นั้นเป็นทางเลือกที่ฉลาด เนื่องจากมันช่วยให้คุณได้รับประสิทธิภาพสูงสุดจากทรัพยากรเซิร์ฟเวอร์ที่คุณจ่ายเงินไป และสามารถรองรับจำนวนผู้ใช้งานพร้อมกันได้มากขึ้นโดยไม่จำเป็นต้องปรับขยายระบบ

ประวัติความเป็นมา — Igor Sysoev และการสร้าง Nginx

Nginx ถูกสร้างขึ้นในปี 2002 โดย Igor Sysoev ซึ่งเป็นนักพัฒนาซอฟต์แวร์ชาวรัสเซีย เขาออกแบบ Nginx เพื่อแก้ปัญหา “C10K Problem” หรือปัญหาการจัดการการเชื่อมต่อกว่า 10,000 ครั้งพร้อมกัน ซึ่งเป็นปัญหาใหญ่ของเว็บเซิร์ฟเวอร์แบบดั้งเดิมในยุคนั้น

Nginx ได้ถูกเปิดตัวต่อสาธารณะในปี 2004 และได้รับความนิยมอย่างรวดเร็วจากชุมชนนักพัฒนา เนื่องจากประสิทธิภาพและความเสถียรของมันนั้นดีกว่าเว็บเซิร์ฟเวอร์ตัวอื่น ๆ มาก ปัจจุบัน Nginx ถูกใช้โดย Airbnb, Netflix, Dropbox, GitHub, และหลาย ๆ บริษัทขนาดใหญ่อื่น ๆ ในโลก

วิธีการทำงานของ Nginx — Event-Driven Architecture

สาเหตุที่ Nginx มีประสิทธิภาพสูงเพราะมันใช้สถาปัตยกรรม “Event-Driven” แบบ asynchronous ที่ต่างจากเว็บเซิร์ฟเวอร์แบบดั้งเดิมอย่าง Apache ที่ใช้แนวทาง “Process-Based” หรือ “Thread-Based” ดังนี้:

Apache ใช้ Process-Based หรือ Thread-Based

Apache จะสร้าง Process หรือ Thread ใหม่สำหรับแต่ละการเชื่อมต่อ (Connection) ของผู้ใช้งาน ซึ่งหมายความว่าหากมีผู้ใช้งาน 1,000 คนพร้อมกัน Apache จะต้องสร้าง Process หรือ Thread ได้ 1,000 ตัว ทำให้ใช้หน่วยความจำและทรัพยากร CPU จำนวนมากมาย

Nginx ใช้ Event-Driven Architecture

Nginx ใช้วิธีการที่ชาญฉลาดมากขึ้น โดยใช้ Single Process หรือกี่ Process เท่านั้น (ขึ้นอยู่กับจำนวน CPU Cores) และใช้ Event Loop (Epoll, Kqueue, หรือ IOCTL) ในการตรวจสอบและจัดการการเชื่อมต่อจากผู้ใช้งานพร้อมกัน ทำให้สามารถจัดการการเชื่อมต่อหลายพันหรือหลายแสนครั้งพร้อมกันได้ด้วยหน่วยความจำและ CPU ที่น้อยกว่ามาก

คุณสมบัติหลักของ Nginx

Nginx มีคุณสมบัติและความสามารถดังนี้:

  • Web Server — Nginx สามารถทำหน้าที่เป็นเว็บเซิร์ฟเวอร์เพื่อเสิร์ฟไฟล์เว็บไซต์ (HTML, CSS, JavaScript, Images) ได้อย่างมีประสิทธิภาพสูง
  • Reverse Proxy — Nginx สามารถทำหน้าที่เป็น Reverse Proxy เพื่อจัดส่ง (Forward) คำขอจากผู้ใช้งานไปยัง Backend Server ต่างๆ ได้ เช่น Application Server (Node.js, Python, etc.) ทำให้ Nginx สามารถแยกตัวออกจาก Application Logic และทำให้ประสิทธิภาพดีขึ้น
  • Load Balancer — Nginx สามารถจัดสรรภาระงาน (Distribute Load) ให้กับ Backend Servers หลายตัวได้อย่างเท่าเทียมกัน (Round-robin, Least connections, IP Hash, Weight) ทำให้สามารถรองรับจำนวนผู้ใช้งานพร้อมกันได้มากขึ้น
  • HTTP Cache — Nginx สามารถแคช (Cache) เนื้อหาของเว็บไซต์ได้ เพื่อให้การตอบสนอง (Response) เร็วขึ้น และลดภาระของ Backend Server
  • SSL/TLS Termination — Nginx สามารถจัดการ HTTPS และถอดรหัส (Decrypt) SSL/TLS ได้ ทำให้ Backend Servers ไม่ต้องจัดการอีกครั้ง
  • URL Rewriting — Nginx สามารถเขียนใหม่ (Rewrite) URLs ได้ ซึ่งเป็นประโยชน์สำหรับการปรับแต่ง URLs และ SEO Optimization
  • Mail Proxy — นอกจากเว็บแล้ว Nginx ยังสามารถทำหน้าที่เป็น Mail Proxy สำหรับ IMAP, POP3, และ SMTP ได้อีกด้วย

วิธีการติดตั้ง Nginx บน Cloud VPS

ตอนนี้เรามาเรียนรู้วิธีการติดตั้ง Nginx บน Cloud VPS ของคุณกัน ขั้นตอนนี้เหมาะสำหรับระบบปฏิบัติการที่ใช้ Debian/Ubuntu หรือ Linux บน Cloud VPS ของคุณ

ขั้นตอนที่ 1: อัพเดท Package Manager

ก่อนเริ่มการติดตั้ง ให้อัพเดท Package Manager (apt-get) บน Cloud VPS ของคุณ:

sudo apt-get update

ขั้นตอนที่ 2: ติดตั้ง Nginx

ติดตั้ง Nginx โดยใช้คำสั่ง apt-get ดังนี้:

sudo apt-get install -y nginx

ขั้นตอนที่ 3: เริ่มการทำงาน Nginx

เมื่อติดตั้ง Nginx เสร็จแล้ว ให้เริ่มการทำงานของ Nginx:

sudo systemctl start nginx

ขั้นตอนที่ 4: เปิดใช้งาน Nginx ให้ทำงานอัตโนมัติในแต่ละครั้งที่ Boot

เพื่อให้ Nginx เริ่มทำงานอัตโนมัติในแต่ละครั้งที่ Boot Server ของคุณ ให้ใช้คำสั่ง:

sudo systemctl enable nginx

ขั้นตอนที่ 5: ตรวจสอบสถานะของ Nginx

ตรวจสอบว่า Nginx ทำงานอยู่ หรือไม่:

sudo systemctl status nginx

การตั้งค่า Nginx เบื้องต้น

ไฟล์การตั้งค่าหลักของ Nginx อยู่ที่ /etc/nginx/nginx.conf โครงสร้างพื้นฐานของไฟล์นี้มีลักษณะดังนี้:

user nginx;
worker_processes auto;  # จำนวน Worker Processes
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;  # จำนวนการเชื่อมต่อต่อ Worker Process
}

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 Server Blocks
    include /etc/nginx/conf.d/*.conf;
}

สำหรับการตั้งค่า Server Block (Virtual Host) ของแต่ละเว็บไซต์ ให้สร้างไฟล์ใหม่ในโฟลเดอร์ /etc/nginx/conf.d/ หรือ /etc/nginx/sites-available/ ดังนี้:

server {
    listen 80;
    server_name example.com www.example.com;

    # ตั้งค่า Root Directory
    root /var/www/html/example.com;

    # ตั้งค่า Index File
    index index.html index.htm index.php;

    # ตั้งค่า Logging
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    # ตั้งค่า PHP-FPM (ถ้าใช้ PHP)
    location ~ \\.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
    }

    # ป้องกันการเข้าถึงไฟล์ที่มีความไว (Hide sensitive files)
    location ~ /\. {
        deny all;
    }
}

ตัวอย่าง: Reverse Proxy ด้วย Nginx

หากคุณต้องการใช้ Nginx เป็น Reverse Proxy สำหรับ Node.js Application ให้ตั้งค่าดังนี้:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

ตัวอย่าง: Load Balancing ด้วย Nginx

หากคุณมี Backend Servers หลายตัว คุณสามารถใช้ Nginx เป็น Load Balancer ได้ดังนี้:

upstream backend {
    server 192.168.1.10:8000;
    server 192.168.1.11:8000;
    server 192.168.1.12:8000;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

การตั้งค่า SSL/TLS สำหรับ HTTPS

เพื่อให้เว็บไซต์ของคุณใช้ HTTPS ให้ปลอดภัย ต้องติดตั้ง SSL Certificate ก่อน จากนั้นตั้งค่า Nginx ดังนี้:

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    # ตั้งค่า SSL Certificate
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # ตั้งค่า SSL Protocols และ Ciphers
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # ตั้งค่า Root Directory
    root /var/www/html/example.com;
    index index.html index.htm;

    location / {
        # ตัวอย่าง: Reverse Proxy ไปยัง Backend Server
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# Redirect HTTP ไปยัง HTTPS
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

คำสั่ง Nginx ที่สำคัญ

มีคำสั่ง Nginx ที่สำคัญและมีประโยชน์ที่คุณควรรู้จัก:

คำสั่งคำอธิบาย
sudo systemctl start nginxเริ่มการทำงาน Nginx
sudo systemctl stop nginxหยุดการทำงาน Nginx
sudo systemctl restart nginxรีสตาร์ท Nginx
sudo systemctl reload nginxโหลดการตั้งค่า Nginx ใหม่โดยไม่หยุดการทำงาน
sudo systemctl status nginxตรวจสอบสถานะของ Nginx
sudo systemctl enable nginxเปิดใช้งาน Nginx ให้ทำงานอัตโนมัติ
sudo systemctl disable nginxปิดใช้งาน Nginx อัตโนมัติ
sudo nginx -tตรวจสอบความถูกต้องของไฟล์ config
sudo nginx -s reloadโหลดการตั้งค่าใหม่

สรุป

Nginx เป็นเว็บเซิร์ฟเวอร์ที่มีประสิทธิภาพสูง ใช้ทรัพยากรน้อย และสามารถจัดการการเชื่อมต่อจำนวนมหาศาลได้ ไม่ว่าคุณจะต้องการเซิร์ฟเว็บไซต์ทั่วไป ใช้เป็น Reverse Proxy สำหรับ Application Servers หรือใช้เป็น Load Balancer สำหรับการกระจายภาระงาน Nginx นั้นมีความสามารถที่สำคัญและมีประโยชน์มากมายที่สามารถช่วยให้ระบบของคุณมีประสิทธิภาพสูงสุด

บทความนี้ได้อธิบายวิธีการติดตั้ง ตั้งค่า และใช้งาน Nginx บน Cloud VPS ของคุณแล้ว หากคุณมีคำถามหรือต้องการข้อมูลเพิ่มเติม โปรดอ่านเอกสารอย่างเป็นทางการของ Nginx ได้ที่ https://nginx.org หรือติดต่อทีมสนับสนุน DE เพื่อได้รับความช่วยเหลือเพิ่มเติมในการติดตั้งและตั้งค่า Nginx บน Cloud VPS ของคุณ

แนะนำบริการ DE — Cloud VPS และ Cloud Hosting

หากคุณกำลังมองหา Cloud VPS หรือ Cloud Hosting ที่มีประสิทธิภาพสูง มีความเสถียร และด้วยการสนับสนุนจากทีม Support ที่มีความรู้ด้วย DE นั้นเป็นตัวเลือกที่ดีที่สุด ทีมของเรารู้จักการติดตั้งและการตั้งค่า Nginx ได้อย่างลึกซึ้ง และพร้อมที่จะช่วยเหลือคุณในการตั้งค่า Nginx หรือทำงานอื่น ๆ ที่เกี่ยวข้อง

นอกจากนี้ หลาย ๆ แพ็คเกจของ DE Cloud Hosting นั้นมี Nginx ติดตั้งให้เรียบร้อยแล้ว และเพียงแค่ที่ว่าต้องเพิ่มไซต์เว็บใหม่ก็เสร็จแล้ว ทำให้ประหยัดเวลาในการติดตั้งและตั้งค่า และคุณสามารถเน้นความสำคัญของคุณไปที่การพัฒนาเว็บไซต์ของคุณแทน

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับบริการ DE และการเลือก Cloud VPS หรือ Cloud Hosting ที่เหมาะสมกับความต้องการของคุณ โปรดเยี่ยมชม DE Cloud VPS หรือเลือกใช้ DE Cloud Hosting ที่มาพร้อม Nginx ติดตั้งให้ พร้อมทีม Customer Support ที่พร้อมช่วยเหลือคุณตลอด 24 ชั่วโมง