Nginx Reverse Proxy คืออะไร? ทำไมต้องใช้?

ก่อนที่เราจะลงมือตั้งค่า SSL ด้วย Let's Encrypt เรามาทำความเข้าใจพื้นฐานของ Nginx Reverse Proxy กันก่อนครับ Nginx เป็นเว็บเซิร์ฟเวอร์ประสิทธิภาพสูงที่นิยมใช้กันอย่างแพร่หลาย หน้าที่หลักคือการจัดการกับการร้องขอ (Request) จากผู้ใช้งาน และส่งต่อไปยังเซิร์ฟเวอร์ต้นทาง (Backend Server) ที่ประมวลผลคำขอจริง
การทำงานแบบ Reverse Proxy หมายถึง Nginx จะทำหน้าที่เป็นประตูหน้า ดักจับคำขอทั้งหมดจากอินเทอร์เน็ต และกระจายงานไปยังเซิร์ฟเวอร์ภายใน (Backend) ที่อาจมีหลายตัว หรือมีหน้าที่ต่างกันไป ประโยชน์ของการใช้ Nginx Reverse Proxy มีมากมาย เช่น การกระจายโหลด (Load Balancing) เพื่อไม่ให้เซิร์ฟเวอร์ใดทำงานหนักเกินไป, การเพิ่มความปลอดภัยโดยซ่อนเซิร์ฟเวอร์จริงจากภายนอก, การทำ Caching เพื่อให้การตอบสนองเร็วขึ้น, และที่สำคัญคือการจัดการ SSL/TLS Certificate ซึ่งเป็นหัวใจหลักของบทความนี้ครับ การมี Nginx เป็นด่านหน้า ทำให้การจัดการ SSL ง่ายขึ้นมาก เพราะเราสามารถติดตั้งและต่ออายุ Certificate ได้ที่ Nginx เพียงจุดเดียว โดยไม่ต้องไปยุ่งกับ Backend Server ทุกตัวเลยทีเดียว
ประโยชน์หลักของการใช้ Nginx Reverse Proxy
1. Load Balancing: ช่วยกระจาย Traffic ไปยัง Backend Server หลายๆ ตัว ลดภาระงานของแต่ละ Server และเพิ่มความเสถียรของระบบ 2. Security: เป็นปราการด่านหน้า ปกป้อง Backend Server จากการโจมตีโดยตรง สามารถตั้งค่า Firewall หรือ Rate Limiting ที่ Nginx ได้ 3. SSL/TLS Termination: จัดการการเข้ารหัส/ถอดรหัส SSL ที่ Nginx เพียงจุดเดียว ทำให้ Backend Server ไม่ต้องรับภาระ และง่ายต่อการจัดการ Certificate 4. Caching: เก็บสำเนาของไฟล์ที่ถูกร้องขอบ่อยๆ ไว้ที่ Nginx เพื่อส่งมอบให้ผู้ใช้ได้เร็วขึ้น ลดภาระ Backend Server 5. Compression: บีบอัดข้อมูลก่อนส่งให้ผู้ใช้ ช่วยลด Bandwidth และเพิ่มความเร็วในการโหลดหน้าเว็บ 6. URL Rewriting & Routing: จัดการเส้นทาง URL ที่ซับซ้อน หรือส่งต่อไปยัง Backend ที่เหมาะสมตามเงื่อนไขต่างๆ
Let's Encrypt คืออะไร? ทำไมถึงฟรีและน่าใช้?
Let's Encrypt คือ Certificate Authority (CA) หรือผู้ออกใบรับรองดิจิทัล ที่ให้บริการ SSL/TLS Certificate ฟรี โดยมีเป้าหมายหลักคือการทำให้การเข้ารหัส HTTPS เป็นมาตรฐานบนอินเทอร์เน็ตทุกคนสามารถเข้าถึงได้
สิ่งที่ทำให้ Let's Encrypt แตกต่างและน่าสนใจคือ: 1. ฟรี: ไม่ต้องเสียค่าใช้จ่ายในการออก Certificate ซึ่งต่างจาก CA แบบดั้งเดิมที่ต้องเสียเงินทุกปี 2. อัตโนมัติ: มีโปรโตคอลที่เรียกว่า ACME (Automated Certificate Management Environment) ที่ช่วยให้การออก, ติดตั้ง, และต่ออายุ Certificate เป็นไปโดยอัตโนมัติ ลดภาระงานของผู้ดูแลระบบได้อย่างมาก 3. ปลอดภัย: Certificate ที่ออกโดย Let's Encrypt มีความน่าเชื่อถือเทียบเท่ากับ Certificate แบบเสียเงินทั่วไป สามารถใช้งานได้กับทุก Browser และอุปกรณ์ 4. โปร่งใส: การดำเนินงานของ Let's Encrypt เปิดเผยต่อสาธารณะ เป็นโครงการ Open Source ที่ได้รับการสนับสนุนจากองค์กรชั้นนำมากมาย
การใช้ Let's Encrypt ร่วมกับ Nginx Reverse Proxy จึงเป็นการผสมผสานที่ลงตัว ช่วยให้เว็บไซต์หรือแอปพลิเคชันของคุณปลอดภัยด้วย HTTPS โดยไม่ต้องลงทุนสูง และจัดการได้ง่ายด้วยระบบอัตโนมัติครับ
ความสำคัญของ HTTPS และ SSL/TLS Certificate
HTTPS (Hypertext Transfer Protocol Secure) คือโปรโตคอลที่ใช้ในการรับส่งข้อมูลระหว่าง Web Browser และ Web Server โดยมีการเข้ารหัสข้อมูลผ่าน SSL/TLS (Secure Sockets Layer/Transport Layer Security) เพื่อให้ข้อมูลที่ส่งผ่านอินเทอร์เน็ตเป็นความลับ ไม่ถูกดักอ่าน หรือแก้ไขระหว่างทาง
SSL/TLS Certificate ทำหน้าที่เหมือนบัตรประชาชนของเว็บไซต์ครับ เป็นการยืนยันตัวตนของเซิร์ฟเวอร์ และเปิดใช้งานการเข้ารหัส HTTPS เมื่อผู้ใช้งานเห็นสัญลักษณ์รูปกุญแจใน Browser แสดงว่าการเชื่อมต่อมีความปลอดภัย ข้อมูลส่วนตัว เช่น ชื่อผู้ใช้, รหัสผ่าน, ข้อมูลบัตรเครดิต จะถูกเข้ารหัสไว้ ทำให้ผู้ไม่ประสงค์ดีไม่สามารถนำข้อมูลไปใช้ได้ นอกจากนี้ Search Engine อย่าง Google ยังให้ความสำคัญกับเว็บไซต์ที่ใช้ HTTPS โดยจัดอันดับให้สูงขึ้นด้วยครับ
การติดตั้ง Certbot เครื่องมือจัดการ Let's Encrypt
Certbot คือเครื่องมือ Command-line ที่พัฒนาโดย Electronic Frontier Foundation (EFF) ทำหน้าที่เป็น Client สำหรับสื่อสารกับ Let's Encrypt เพื่อขอ, ติดตั้ง, และต่ออายุ SSL/TLS Certificate โดยอัตโนมัติ Certbot รองรับการทำงานร่วมกับ Web Server หลากหลายชนิด รวมถึง Nginx ด้วยครับ
ขั้นตอนการติดตั้ง Certbot บนระบบ Linux (ตัวอย่างนี้ใช้ Ubuntu/Debian): 1. อัปเดต Package List: เริ่มต้นด้วยการอัปเดตรายการแพ็กเกจให้เป็นเวอร์ชันล่าสุดเสมอ ```bash sudo apt update ``` 2. ติดตั้ง Snapd (ถ้ายังไม่มี): Certbot แนะนำให้ติดตั้งผ่าน Snap ซึ่งเป็นระบบจัดการแพ็กเกจแบบใหม่ที่ทันสมัย ```bash sudo apt install snapd ``` 3. ติดตั้ง Certbot ผ่าน Snap: ใช้คำสั่ง snap install เพื่อติดตั้ง Certbot ```bash sudo snap install --classic certbot ``` 4. สร้าง Symbolic Link: เพื่อให้สามารถเรียกใช้คำสั่ง certbot ได้ง่ายขึ้น ```bash sudo ln -s /snap/bin/certbot /usr/bin/certbot ```
หลังจากติดตั้ง Certbot เรียบร้อยแล้ว เราก็พร้อมที่จะเริ่มกระบวนการขอ Certificate สำหรับ Nginx Reverse Proxy ของเราแล้วครับ ขั้นตอนต่อไปคือการกำหนดค่า Nginx ให้รองรับการทำงานร่วมกับ Certbot และการออก Certificate
การตั้งค่า Nginx เบื้องต้นสำหรับ Reverse Proxy
ก่อนจะติดตั้ง SSL เราต้องแน่ใจว่า Nginx Reverse Proxy ของเราทำงานถูกต้องก่อนครับ โดยทั่วไป การตั้งค่า Nginx สำหรับ Reverse Proxy จะอยู่ในไฟล์ Configuration ของ Nginx (เช่น `/etc/nginx/nginx.conf` หรือไฟล์ใน `/etc/nginx/sites-available/` แล้วทำ symlink ไปยัง `/etc/nginx/sites-enabled/`) เราต้องระบุ `server` block ที่รับ Request และใช้ `proxy_pass` เพื่อส่งต่อไปยัง Backend Server
ตัวอย่างการตั้งค่า `server` block แบบง่าย: ```nginx server { listen 80; server_name your_domain.com;
location / { proxy_pass http://backend_server_ip:port; 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; } } ```
**คำอธิบาย:** * `listen 80;`: Nginx จะรอรับการเชื่อมต่อที่ Port 80 (HTTP) * `server_name your_domain.com;`: ระบุชื่อ Domain ที่ต้องการให้ Nginx จัดการ * `location /`: บล็อกนี้จะทำงานกับทุก Request ที่เข้ามา * `proxy_pass http://backend_server_ip:port;`: สั่งให้ Nginx ส่งต่อ Request ไปยัง Backend Server ที่ IP และ Port ที่ระบุ * `proxy_set_header ...`: การตั้งค่า Header เหล่านี้สำคัญมาก เพื่อส่งข้อมูลที่ถูกต้องไปยัง Backend Server เช่น IP จริงของผู้ใช้งาน, ชื่อ Host ที่ร้องขอ
เมื่อตั้งค่า Nginx เบื้องต้นเสร็จแล้ว อย่าลืมทดสอบ Configuration และ Restart Nginx: ```bash sudo nginx -t sudo systemctl restart nginx ```
การขอและติดตั้ง SSL Certificate ด้วย Certbot และ Nginx

เมื่อเราติดตั้ง Certbot และตั้งค่า Nginx Reverse Proxy เบื้องต้นเรียบร้อยแล้ว ขั้นตอนต่อไปคือการใช้ Certbot เพื่อขอ SSL Certificate จาก Let's Encrypt และให้ Certbot ช่วยตั้งค่า Nginx ให้รองรับ HTTPS อัตโนมัติ
คำสั่งหลักที่เราจะใช้คือ: ```bash sudo certbot --nginx ```
เมื่อรันคำสั่งนี้ Certbot จะเริ่มกระบวนการ: 1. **สอบถามข้อมูล:** Certbot จะถาม Domain Name ที่คุณต้องการเปิดใช้งาน HTTPS (จาก `server_name` ในไฟล์ Nginx config) 2. **ตรวจสอบสิทธิ์:** Certbot จะพยายามตรวจสอบว่าคุณเป็นเจ้าของ Domain จริงหรือไม่ โดยการสร้างไฟล์ชั่วคราวบนเว็บเซิร์ฟเวอร์ของคุณ 3. **ออก Certificate:** หากตรวจสอบสิทธิ์ผ่าน Certbot จะติดต่อ Let's Encrypt เพื่อขอ Certificate 4. **แก้ไข Nginx Config:** **นี่คือส่วนที่เจ๋งที่สุด!** Certbot จะทำการแก้ไขไฟล์ Nginx Configuration ของคุณโดยอัตโนมัติ โดยจะ: * สร้าง `server` block ใหม่สำหรับ Port 443 (HTTPS) * ตั้งค่า `ssl_certificate` และ `ssl_certificate_key` ให้ชี้ไปยังไฟล์ Certificate ที่ Let's Encrypt ออกให้ * ตั้งค่า SSL Parameter ต่างๆ ให้เหมาะสม (เช่น TLS versions, Ciphers) * สร้างการ Redirect จาก HTTP (Port 80) ไปยัง HTTPS (Port 443) เพื่อให้ผู้ใช้ทุกคนเข้าผ่านช่องทางที่ปลอดภัยเสมอ
หลังจาก Certbot ทำงานเสร็จสิ้น คุณจะเห็นข้อความแจ้งว่าการติดตั้งสำเร็จ และแนะนำให้ทดสอบการต่ออายุอัตโนมัติ
**สิ่งสำคัญ:** Certbot จะทำการ Restart Nginx ให้โดยอัตโนมัติหลังจากการตั้งค่าเสร็จสิ้น ทำให้การเปลี่ยนแปลงมีผลทันที
การตั้งค่า Redirect จาก HTTP เป็น HTTPS
โดยปกติแล้วเมื่อเราใช้คำสั่ง `sudo certbot --nginx` Certbot จะทำการตั้งค่าการ Redirect จาก HTTP (Port 80) ไปยัง HTTPS (Port 443) ให้โดยอัตโนมัติ ซึ่งเป็น Best Practice ที่ดีที่สุด เพื่อให้แน่ใจว่าผู้ใช้งานทุกคนจะได้รับประสบการณ์การท่องเว็บที่ปลอดภัย
หากต้องการตรวจสอบ หรือตั้งค่าเอง สามารถแก้ไขไฟล์ Nginx Configuration ได้ โดยเพิ่ม `return 301 https://$host$request_uri;` ใน `server` block ที่ `listen 80`: ```nginx server { listen 80; server_name your_domain.com; return 301 https://$host$request_uri; }
server { listen 443 ssl; server_name your_domain.com;
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / { proxy_pass http://backend_server_ip:port; # ... proxy settings ... } } ```
การ Redirect แบบ 301 (Permanent Redirect) เป็นวิธีที่ Search Engine เข้าใจว่า URL ได้ย้ายถาวรไปยังตำแหน่งใหม่ (HTTPS) ซึ่งดีต่อ SEO ครับ
การตั้งค่าให้ Certbot ต่ออายุอัตโนมัติ
Let's Encrypt Certificate มีอายุ 90 วัน Certbot ถูกออกแบบมาให้ทำงานร่วมกับระบบ Cron job หรือ Systemd timer ของ Linux เพื่อทำการต่ออายุ Certificate โดยอัตโนมัติก่อนที่จะหมดอายุ
โดยทั่วไปเมื่อติดตั้ง Certbot ผ่าน Snap หรือ Package Manager การตั้งค่าการต่ออายุอัตโนมัติจะถูกเปิดใช้งานไว้แล้ว เราสามารถทดสอบการต่ออายุได้ด้วยคำสั่ง: ```bash sudo certbot renew --dry-run ```
หากคำสั่งนี้ทำงานโดยไม่มีข้อผิดพลาด แสดงว่าระบบการต่ออายุอัตโนมัติของคุณพร้อมใช้งานแล้ว Certbot จะพยายามต่ออายุ Certificate ทั้งหมดที่มีอยู่ หากถึงเวลาที่ต้องต่ออายุจริง
หากต้องการดูว่า Cron job หรือ Systemd timer ถูกตั้งค่าไว้อย่างไร สามารถตรวจสอบได้: * **Cron:** `sudo ls -l /etc/cron.d/certbot` * **Systemd timer:** `sudo systemctl list-timers | grep certbot`
การต่ออายุอัตโนมัตินี้เป็นหัวใจสำคัญที่ทำให้การใช้ Let's Encrypt สะดวกสบายและปลอดภัยในระยะยาวครับ
ข้อควรระวังและเทคนิคเพิ่มเติม
แม้ว่าการตั้งค่า Nginx Reverse Proxy กับ Let's Encrypt ด้วย Certbot จะค่อนข้างตรงไปตรงมา แต่ก็มีบางจุดที่ผู้ดูแลระบบควรให้ความสนใจ เพื่อให้ระบบทำงานได้อย่างราบรื่นและปลอดภัยที่สุดครับ
1. **Firewall Configuration:** ตรวจสอบให้แน่ใจว่า Firewall ของเซิร์ฟเวอร์ (เช่น `ufw` บน Ubuntu) อนุญาตการเชื่อมต่อขาเข้าที่ Port 80 (HTTP) และ Port 443 (HTTPS) อย่างถูกต้อง Certbot จำเป็นต้องเข้าถึง Port 80 เพื่อใช้ HTTP-01 challenge ในการตรวจสอบสิทธิ์ Domain หาก Port 80 ถูกบล็อก Certbot จะไม่สามารถออก Certificate ได้ ```bash sudo ufw allow 'Nginx Full' sudo ufw enable ``` 2. **Nginx Configuration Syntax:** ก่อนและหลังการรัน Certbot ควรตรวจสอบ Syntax ของไฟล์ Nginx Configuration เสมอด้วยคำสั่ง `sudo nginx -t` เพื่อป้องกันข้อผิดพลาดที่อาจทำให้ Nginx ไม่สามารถ Start ได้ 3. **Wildcard Certificates:** หากคุณต้องการเปิดใช้งาน HTTPS สำหรับ Subdomain ทั้งหมดภายใต้ Domain หลัก (เช่น `*.your_domain.com`) คุณจะต้องใช้ DNS-01 challenge ซึ่งซับซ้อนกว่า HTTP-01 challenge และอาจต้องใช้ Plugin พิเศษสำหรับ Certbot ที่ทำงานร่วมกับ DNS Provider ของคุณโดยตรง 4. **Rate Limits ของ Let's Encrypt:** Let's Encrypt มี Rate Limit ในการออก Certificate เพื่อป้องกันการใช้งานในทางที่ผิด หากคุณทดสอบการออก Certificate บ่อยเกินไป อาจถูกจำกัดการใช้งานชั่วคราว ควรใช้ `certbot renew --dry-run` สำหรับการทดสอบ 5. **Backup Configuration:** ก่อนทำการเปลี่ยนแปลงใดๆ กับ Nginx Configuration หรือ Certbot ควรสำรองข้อมูลไฟล์ Configuration และ Certificate ที่เกี่ยวข้องไว้เสมอ เผื่อกรณีเกิดข้อผิดพลาดจะได้สามารถกู้คืนได้ 6. **Security Best Practices:** นอกจากการใช้ HTTPS แล้ว ควรพิจารณาตั้งค่า SSL Parameter เพิ่มเติม เช่น การเลือกใช้ TLS Version ที่ปลอดภัย (TLS 1.2, 1.3), การตั้งค่า HSTS (HTTP Strict Transport Security) เพื่อบังคับให้ Browser เชื่อมต่อผ่าน HTTPS เท่านั้น
การตั้งค่า HSTS (HTTP Strict Transport Security)
HSTS เป็นกลไกความปลอดภัยที่ช่วยให้ Web Server สั่งให้ Browser เชื่อมต่อกับเว็บไซต์ผ่าน HTTPS เท่านั้น แม้ว่าผู้ใช้จะพิมพ์ `http://` หรือคลิกลิงก์ HTTP ก็ตาม เมื่อ Browser ได้รับ HSTS Header จาก Server แล้ว จะจดจำว่า Domain นี้ต้องใช้ HTTPS เท่านั้น เป็นเวลาตามที่กำหนด (Max-Age)
ในการเปิดใช้งาน HSTS ให้เพิ่ม Header นี้ใน `server` block ของ Nginx ที่รับ Port 443 (HTTPS): ```nginx add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; ```
* `max-age=31536000`: กำหนดระยะเวลา 1 ปี (31536000 วินาที) ที่ Browser จะจดจำการบังคับใช้ HTTPS * `includeSubDomains`: สั่งให้บังคับใช้ HTTPS กับ Subdomain ทั้งหมดด้วย
**ข้อควรระวัง:** ควรเปิดใช้งาน HSTS หลังจากที่มั่นใจว่า HTTPS ทำงานได้อย่างสมบูรณ์แบบแล้ว เพราะหากมีปัญหาในการเข้าถึงผ่าน HTTPS ผู้ใช้งานจะไม่สามารถเข้าเว็บไซต์ของคุณได้เลยจนกว่า HSTS Policy จะหมดอายุใน Browser
การจัดการ Certificate ที่หมดอายุ (นอกเหนือจาก Auto-Renewal)
แม้ว่า Certbot จะตั้งค่าการต่ออายุอัตโนมัติไว้แล้ว แต่ก็มีบางกรณีที่อาจจำเป็นต้องจัดการด้วยตนเอง เช่น:
* **การเปลี่ยน Domain Name:** หากคุณเพิ่มหรือลบ Domain Name ที่ผูกกับ Certificate ต้องทำการขอ Certificate ใหม่ * **การแก้ไขปัญหาการต่ออายุ:** หากการต่ออายุอัตโนมัติล้มเหลว (อาจเกิดจากการเปลี่ยนแปลง Network, Firewall, หรือการตั้งค่า Nginx) * **การออก Certificate ชั่วคราว:** ในบางสถานการณ์ที่ต้องการ Certificate ด่วน หรือทดสอบระบบ
หากต้องการขอ Certificate ใหม่สำหรับ Domain ที่มีอยู่ หรือ Domain ที่เพิ่มเข้ามา สามารถใช้คำสั่ง Certbot อีกครั้ง โดย Certbot จะตรวจจับการตั้งค่าที่มีอยู่และทำการอัปเดต: ```bash sudo certbot --nginx -d your_domain.com -d www.your_domain.com ```
หากต้องการดูรายการ Certificate ที่มีอยู่และวันหมดอายุ: ```bash sudo certbot certificates ```
หากต้องการลบ Certificate ที่ไม่ใช้ออก: ```bash sudo certbot delete ```
การเข้าใจกระบวนการจัดการ Certificate ด้วยตนเองจะช่วยให้คุณแก้ไขปัญหาเฉพาะหน้าได้เมื่อระบบอัตโนมัติไม่สามารถทำงานได้ครับ
ตัวอย่างการใช้ Nginx Reverse Proxy + SSL ในสถานการณ์จริง
การนำ Nginx Reverse Proxy และ Let's Encrypt ไปใช้งานจริงนั้นมีหลากหลายรูปแบบ ขึ้นอยู่กับความต้องการและสถาปัตยกรรมของระบบ นี่คือตัวอย่าง 3 กรณีที่พบบ่อย:
**1. การโฮสต์เว็บแอปพลิเคชันหลายตัวบนเซิร์ฟเวอร์เดียว:** สมมติว่าคุณมีเซิร์ฟเวอร์ Nginx หนึ่งเครื่อง และต้องการโฮสต์เว็บแอปพลิเคชัน 3 ตัวที่พัฒนาด้วยเทคโนโลยีต่างกัน (เช่น Node.js, Python/Django, PHP/Laravel) โดยแต่ละแอปพลิเคชันรันอยู่บน Port ที่ต่างกัน (เช่น 3000, 8000, 9000)
* **Nginx:** ทำหน้าที่เป็น Reverse Proxy รับ Request ทั้งหมดผ่าน Port 80/443 * **Certbot:** ติดตั้ง SSL Certificate ให้กับ Domain หลักและ Subdomain (เช่น `app1.yourdomain.com`, `app2.yourdomain.com`, `app3.yourdomain.com`) * **Nginx Config:** ใช้ `server_name` และ `location` ที่แตกต่างกัน เพื่อ Map แต่ละ Subdomain ไปยัง Backend Application ที่ถูกต้องผ่าน `proxy_pass` * `app1.yourdomain.com` -> `proxy_pass http://localhost:3000;` * `app2.yourdomain.com` -> `proxy_pass http://localhost:8000;` * `app3.yourdomain.com` -> `proxy_pass http://localhost:9000;`
ประโยชน์คือ เรามีเพียง Nginx Server ตัวเดียวที่ต้องจัดการเรื่อง Public IP และ SSL ทำให้การจัดการง่ายขึ้นมาก
2. การทำ Load Balancing สำหรับแอปพลิเคชันที่ต้องการ Scalability
ในกรณีที่แอปพลิเคชันของคุณมีผู้ใช้งานจำนวนมาก และต้องการรองรับ Traffic ที่สูงขึ้น คุณอาจมี Backend Server หลายตัวที่รันแอปพลิเคชันเดียวกัน
* **Nginx:** ทำหน้าที่เป็น Reverse Proxy และ Load Balancer * **Certbot:** ติดตั้ง SSL Certificate ให้กับ Domain หลัก * **Nginx Config:** ใช้ `upstream` block เพื่อกำหนดกลุ่มของ Backend Server ที่จะใช้ในการ Load Balance จากนั้นใน `location` block จะใช้ `proxy_pass` ชี้ไปยังชื่อ `upstream` group นั้นๆ Nginx จะมี Algorithm ในการกระจาย Request ไปยัง Server ในกลุ่ม (เช่น Round Robin, Least Connections) ```nginx upstream backend_servers { server backend1_ip:port; server backend2_ip:port; server backend3_ip:port; }
server { listen 443 ssl; server_name your_app.com; # ... SSL settings ...
location / { proxy_pass http://backend_servers; # ... proxy settings ... } } ```
กรณีนี้ช่วยให้ระบบมีความยืดหยุ่นสูง สามารถเพิ่มหรือลดจำนวน Backend Server ได้ตามต้องการโดยไม่ต้องกระทบกับการเข้าถึงของผู้ใช้งาน และ Nginx ยังช่วยจัดการ SSL ที่จุดเดียว
