ตัวสร้างไฟล์ config ของ Nginx
การเขียนไฟล์ config ของ Nginx ตั้งแต่ศูนย์ หมายถึงต้องจำทุกบรรทัด proxy_set_header ทุกชนิด MIME ที่ gzip ต้องบีบอัด และความต่างเล็ก ๆ ระหว่าง try_files $uri/ /index.php?$args กับเวอร์ชันที่ทำให้การกำหนดเส้นทางพังโดยไม่รู้ตัว ตัวสร้างนี้จะถามชื่อโดเมน, upstream, ตัวจัดการ PHP และพาธของไฟล์ SSL จากนั้นจึงสร้าง server block ที่มีค่าเริ่มต้นเหมาะสมสำหรับ TLS, HTTP/2, การแคชไฟล์สแตติก และการบีบอัดข้อมูล
วิธีสร้าง server block ของคุณ
-
1
เลือกค่าที่ตั้งไว้ล่วงหน้า
เว็บไซต์สแตติก, PHP-FPM (Laravel หรือ WordPress), reverse proxy สำหรับ Node.js หรือการเปลี่ยนเส้นทางแบบ 301 ธรรมดา
-
2
กรอกชื่อโดเมน
ใส่รายการ server_name ให้ครบ โดยทั่วไปคือทั้งแบบที่มี www และแบบที่ไม่มี www
-
3
ตั้งค่ารายละเอียด SSL
ชี้ไปยังไฟล์ fullchain และ privkey ของคุณ หรือข้ามขั้นตอนนี้หากใช้ HTTP อย่างเดียว
-
4
ปรับค่า upstream
พอร์ต, พาธของ socket หรือ URL ของ backend สำหรับกรณีที่ใช้ proxy_pass
-
5
คัดลอกแล้วนำไปใช้
วางผลลัพธ์ไว้ใน /etc/nginx/sites-available จากนั้นรัน nginx -t แล้วสั่งรีโหลด Nginx
server block ที่ดีมีหน้าตาอย่างไร
virtual host ของ Nginx ในปัจจุบันมักประกอบด้วยส่วนเหล่านี้:
| ส่วนประกอบ | หน้าที่ |
|---|---|
listen 443 ssl http2 |
รับการเชื่อมต่อ HTTPS โดยเปิดใช้งาน HTTP/2 |
ssl_certificate + ssl_certificate_key |
ชี้ไปยังไฟล์ใบรับรองและคีย์ของ TLS |
ssl_protocols TLSv1.2 TLSv1.3 |
ตัด TLS เวอร์ชันเก่าออก |
gzip on + รายการชนิดไฟล์ |
บีบอัดข้อความ/HTML/JSON/JS/CSS ขณะส่งข้อมูล |
ส่วนหัว expires สำหรับไฟล์สแตติก |
ลดจำนวนคำขอซ้ำจากผู้ที่กลับมาเยี่ยมชม |
try_files |
ส่งต่อไปยัง front controller (PHP, Laravel ฯลฯ) |
| HSTS + ส่วนหัวด้านความปลอดภัย | บังคับให้เบราว์เซอร์ใช้ TLS เสมอ |
พื้นฐานของ reverse proxy
สำหรับแอป Node.js, Python และ Ruby ที่ทำงานอยู่หลัง Nginx:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
การลืม X-Forwarded-For คือสาเหตุคลาสสิกที่ทำให้ log ของแอปไม่เห็น IP จริงของผู้ใช้
ข้อผิดพลาดที่พบบ่อย
- ไม่มี server block สำรองสำหรับ server_name หากไม่มีชื่อใดตรงกัน Nginx จะใช้ server block แรกเป็นค่าเริ่มต้น ควรเพิ่ม block
server_name _ที่รับทุกกรณีและตอบกลับด้วยรหัส 444 เพื่อป้องกันการโจมตีผ่านส่วนหัว Host - ลำดับใบรับรองผิด ไฟล์
ssl_certificateต้องเป็นสายใบรับรองแบบเต็ม (fullchain: ใบรับรองของเว็บไซต์ + ใบรับรองตัวกลาง) ไม่ใช่ใบรับรองของเว็บไซต์เพียงใบเดียว - แคชนานเกินไป การส่ง
expires 1yให้กับ/index.htmlจะทำให้การดีพลอยครั้งต่อไปไม่มีผล ควรใส่เลขเวอร์ชันใน URL ของไฟล์สแตติกแทน - รีโหลดโดยไม่ทดสอบก่อน ให้รัน
nginx -tก่อนsystemctl reload nginxทุกครั้ง เพราะไวยากรณ์ผิดเพียงจุดเดียวก็ทำให้เว็บไซต์ล่มได้
คำถามที่พบบ่อย
HTTP/2 เสถียรแล้วและรองรับอย่างทั่วถึงใน Nginx 1.25 ขึ้นไป ส่วน HTTP/3 (QUIC) มีให้ใช้ใน Nginx 1.25 ขึ้นไปแต่ยังเป็นฟีเจอร์ทดลอง สำหรับการตั้งค่าใช้งานจริงในตอนนี้ ให้เปิด HTTP/2 ไว้ และจะเพิ่ม HTTP/3 ด้วยไดเรกทิฟ http3 และ quic ก็ได้ตามต้องการ
ตามธรรมเนียมจะเก็บสายใบรับรองสาธารณะไว้ใน /etc/ssl/certs/ และเก็บคีย์ส่วนตัวไว้ใน /etc/ssl/private/ ส่วน Let’s Encrypt จะเก็บทุกอย่างไว้ใต้ /etc/letsencrypt/live/domain/ ให้ใช้พาธตามที่เครื่องมือต่ออายุใบรับรองของคุณกำหนด
จำเป็นสำหรับเว็บไซต์ส่วนใหญ่ ให้เพิ่ม server block แยกต่างหากบนพอร์ต 80 ที่ตอบกลับด้วย 301 https://$host$request_uri เมื่อใช้ร่วมกับ HSTS แล้ว block HTTP นี้แทบจะไม่ถูกเรียกอีกเลยหลังคำขอแรก
รัน sudo nginx -t เพื่อตรวจไฟล์ config โดยไม่ต้องรีโหลด ถ้าขึ้นข้อความ “syntax is ok” และ “test is successful” จึงค่อยรีโหลดด้วย sudo systemctl reload nginx อย่าใช้ restart ในระบบที่ใช้งานจริงเด็ดขาด เพราะการรีโหลดจะไม่ทำให้บริการหยุดชะงัก
เครื่องมือที่เกี่ยวข้อง
ตารางอ้างอิง ASCII
ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL
อ้างอิงตัวอักษร HTML
รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ
ตารางอ้างอิงแป้นพิมพ์ลัด
ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux
ตัวตรวจสอบอีเมล
ตรวจสอบที่อยู่อีเมล: ตรวจไวยากรณ์ RFC 5322 ค้นหา MX เรกคอร์ดแบบเรียลไทม์ พร้อมรายละเอียดส่วนท้องถิ่น โดเมน และความยาว ไม่มีการส่งอีเมลใด ๆ
เครื่องมือสร้าง EditorConfig
สร้างไฟล์ .editorconfig ด้วยกฎสไตล์และขนาดการเยื้อง การจบบรรทัด ชุดอักขระ และช่องว่างของคุณ เพื่อให้การจัดรูปแบบสอดคล้องกันในทุก IDE และโปรแกรมแก้ไข
ตัวลดรูปพีชคณิตบูลีน
ประเมินนิพจน์บูลีนสำหรับทุกชุดอินพุตและดูตารางค่าความจริงที่สมบูรณ์ รองรับตัวแปรสูงสุดห้าตัวและตัวดำเนินการ &, |, !, ^
เครื่องมือนี้มีให้บริการในภาษาอื่น
- Nginx 設定ジェネレーター [JA]
- Nginx-konfigurationsgenerator [SV]
- Trình tạo cấu hình Nginx [VI]
- Générateur de configuration Nginx [FR]
- Nginx-configuratiegenerator [NL]
- Nginx 설정 생성기 [KO]
- Gerador de Configuração Nginx [PT]
- Generador de Configuración de Nginx [ES]
- مولّد إعدادات Nginx [AR]
- Generator Konfigurasi Nginx [ID]
- Nginx Konfigurationsgenerator [DE]
- Generator konfiguracji Nginx [PL]
- Nginx Config Generator [EN]
- Generatore di Configurazione Nginx [IT]
- Генератор конфигураций Nginx [RU]
- Nginx Yapılandırma Üreteci [TR]
- Nginx 配置生成器 [ZH]