บทนำ

Nginx เป็นเว็บเซิร์ฟเวอร์ที่รวดเร็วมีประสิทธิภาพน้ำหนักเบาและมีประสิทธิภาพสูงซึ่งทำงานอย่างน้อย 40% ของเว็บไซต์ที่ติดอันดับทั่วโลก เนื่องจากความสามารถรอบตัวของ Nginx จึงมีการใช้ load balancer, reverse proxy และ HTTP cache server.


คุณลักษณะที่ดีที่สุดของ Nginx คือความเร็วซึ่งช่วยให้สามารถจัดการการเชื่อมต่อพร้อมกันได้หลายพันรายการได้อย่างง่ายดาย.

ในบทความนี้เราจะแสดงวิธีที่ดีที่สุดในการปรับและปรับแต่งเว็บเซิร์ฟเวอร์ Nginx.

requisites ก่อน

  • การติดตั้ง Linux VPS (ทุกรสของ Linux)
  • ความเข้าใจพื้นฐานของการกำหนดค่า Nginx
  • ติดตั้ง Nginx แล้ว

การปรับและเพิ่มประสิทธิภาพ Nginx จะเกี่ยวข้องกับการปรับพารามิเตอร์ในไฟล์กำหนดค่า Nginx เริ่มต้น /etc/nginx/nginx.conf.

นี่คือตัวอย่างไฟล์กำหนดค่าเริ่มต้น Nginx /etc/nginx/nginx.conf

ผู้ใช้ www-data;
อัตโนมัติ _processes;
pid /run/nginx.pid;
รวมถึง /etc/nginx/modules-enabled/*.conf;

กิจกรรม {
คนงาน 7connections_68;
# multi_accept on;
}

http {

##
# การตั้งค่าพื้นฐาน
##

sendfile บน;
tcp_nopush บน;
tcp_nodelay บน;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens ปิด;
add_header X-XSS- คุ้มครอง "1; mode = บล็อก";
add_header X-Frame-Options "SAMEORIGIN";

# server_names_hash_bucket_size 64;
ปิด # server_name_in_redirect

รวมถึง /etc/nginx/mime.types;
default_type application / octet-stream;

##
# การตั้งค่า SSL
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # การวาง SSLv3 อ้างอิง: POODLE
ssl_prefer_server_ciphers เปิด;

##
# การตั้งค่าการบันทึก
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# การตั้งค่า Gzip
##

gzip บน

# gzip_vary เมื่อ;
# gzip_proxied ๆ ;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types ข้อความ / ข้อความธรรมดา / แอปพลิเคชัน css / แอปพลิเคชัน json / ข้อความ javascript / แอปพลิเคชัน xml / แอปพลิเคชัน xml / xml + rss text / javascript;

##
# โฮสต์เสมือน Configs
##

รวมถึง /etc/nginx/conf.d/*.conf;
รวม / etc / nginx / sites-enabled / *;
}

#mail {
# # ดูสคริปต์การตรวจสอบสิทธิ์ตัวอย่างได้ที่:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost / auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# เซิร์ฟเวอร์ {
# ฟัง localhost: 110;
# โปรโตคอล pop3;
# พร็อกซีบน
#}
#
# เซิร์ฟเวอร์ {
# ฟัง localhost: 143;
# โปรโตคอล imap;
# พร็อกซีบน
#}
#}

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

1. กระบวนการของผู้ปฏิบัติงาน

กระบวนการของผู้ปฏิบัติงานอ้างถึงจำนวนของคนงานที่จะวางไข่โดย Nginx เป็นวิธีปฏิบัติที่ดีที่สุดในการเรียกใช้กระบวนการของผู้ปฏิบัติงาน 1 คนต่อแกน CPU หากคุณวางค่ามากกว่าจำนวนแกน CPU ในเครื่อง / VPS ของคุณสิ่งนี้จะทำให้กระบวนการว่างในระบบ.

โดยค่าเริ่มต้นกระบวนการของผู้ปฏิบัติงานมีการตั้งค่าเป็น รถยนต์.

หากต้องการทราบจำนวนแกน CPU ในระบบของคุณให้เรียกใช้คำสั่ง:

$ grep processor / proc / cpuinfo | ห้องสุขา -l
1

ใน VPS ของเราเรามี 1 คอร์ดังนั้นจึงขอแนะนำให้ตั้งค่ากระบวนการของผู้ปฏิบัติงานเป็น 1

ในไฟล์ปรับแต่งที่แสดงด้านล่าง:

worker_processes 1;

ในกรณีที่มีทราฟฟิกเพิ่มขึ้นไปยังเว็บเซิร์ฟเวอร์ nginx ของคุณและต้องการเรียกใช้กระบวนการเพิ่มเติมแนะนำให้อัพเกรดเครื่องของคุณเป็นคอร์ที่มากขึ้นและปรับกระบวนการของผู้ปฏิบัติงานเป็นคอร์ CPU จำนวนใหม่ในระบบของคุณ.

2. การเชื่อมต่อของผู้ปฏิบัติงาน

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

จำนวนลูกค้าสูงสุด / วินาที = กระบวนการของผู้ปฏิบัติงาน * การเชื่อมต่อของผู้ปฏิบัติงาน

โดยค่าเริ่มต้นค่าของการเชื่อมต่อของผู้ปฏิบัติงานถูกตั้งค่าเป็น 768.

อย่างไรก็ตามควรสังเกตว่าเวลาส่วนใหญ่ของเบราว์เซอร์จะเปิดอย่างน้อย 2 การเชื่อมต่อต่อเซิร์ฟเวอร์ในเวลาเดียวกันดังนั้นจำนวนอาจถูกตัดครึ่ง.

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

$ ulimit -n
1024

ใน VPS ของเราหลักจะถูก จำกัด ที่ 1024 กระบวนการในแต่ละครั้งดังนั้นจึงขอแนะนำให้ตั้งค่าของการเชื่อมต่อผู้ปฏิบัติงาน (ภายในส่วนเหตุการณ์) ถึง 1024 ดังต่อไปนี้:

กิจกรรม {
worker_connections 1024;

}

จากการคำนวณของเราจำนวนลูกค้าสูงสุดที่สามารถให้บริการได้ต่อวินาทีคือ

การเชื่อมต่อของผู้ปฏิบัติงาน 1024 คน * กระบวนการของผู้ปฏิบัติงาน 1 คน = 1024 ไคลเอ็นต์ต่อวินาที

3. หลายยอมรับ

Multi accept กำหนดวิธีที่กระบวนการของผู้ปฏิบัติงานยอมรับการเชื่อมต่อใหม่.

โดยค่าเริ่มต้นกระบวนการของผู้ปฏิบัติงานจะถูกตั้งค่าเป็นปิดและยอมรับการเชื่อมต่อใหม่ทีละครั้ง.

หากเปิดใช้งานกระบวนการของผู้ปฏิบัติงานจะยอมรับการเชื่อมต่อใหม่ทั้งหมดในครั้งเดียว ค่า multi_accept (ภายในส่วนเหตุการณ์) ควรตั้งเป็นปิดดังแสดงด้านล่าง:

กิจกรรม {
worker_connections 1024;
multi_accept off;
}

4. การบีบอัด Gzip

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

  1. เปิดใช้งานเนื้อหา gzip เท่านั้นสำหรับเนื้อหาที่เหมาะสมเช่น CSS, ข้อความ, ไฟล์ JavaScript, e.t.c
  2. ตรวจสอบผลกระทบของการบีบอัดโดยการเปิดใช้งานและปิดใช้งานการบีบอัดสำหรับประเภทและขนาดเนื้อหาที่หลากหลาย
  3. อย่าเพิ่มระดับการบีบอัดเนื่องจากค่าใช้จ่ายนี้ต้องใช้ความพยายามของ CPU โดยไม่เพิ่มปริมาณงานที่เหมาะสม.

ตัวอย่างการกำหนดค่า gzip ที่แนะนำมีดังนี้: (ภายใน ส่วน http)

gzip บน
gzip_vary บน;
gzip_proxied ๆ ;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_http_version 1.1;
ข้อความ gzip_types / ข้อความธรรมดา / แอปพลิเคชัน css / แอปพลิเคชัน json / ข้อความ javascript / แอปพลิเคชัน xml / แอปพลิเคชัน xml / xml + rss text / javascript;

5. บัฟเฟอร์

บัฟเฟอร์มีบทบาทสำคัญในการเพิ่มประสิทธิภาพของ nginx ต่อไปนี้เป็นตัวแปรที่จำเป็นต้องปรับเพื่อให้ได้ประสิทธิภาพสูงสุด:

client_body_buffer_size – จัดการขนาดบัฟเฟอร์ของไคลเอ็นต์เช่นการกระทำ POST เช่น ส่งแบบฟอร์มที่ส่งไปยังเว็บเซิร์ฟเวอร์ Nginx ขอแนะนำให้ตั้งค่านี้เป็น 10K.

client_header_buffer_size – คล้ายกับ client_body_buffer_size แต่จัดการขนาดส่วนหัวของไคลเอ็นต์ ขอแนะนำให้ตั้งค่านี้เป็น 1K.

client_max_body_size – ขนาดคำขอไคลเอ็นต์สูงสุดที่อนุญาต หากค่าเกิน nginx จะสร้างข้อผิดพลาด 413 ครั้งหรือ Request Entity Too Large.

large_client_header_buffers – จำนวนและขนาดสูงสุดของบัฟเฟอร์สำหรับส่วนหัวไคลเอนต์ขนาดใหญ่.

การตั้งค่าที่แนะนำมีดังนี้ (ภายใน ส่วน http)

client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 4k;

ด้วยค่าที่อยู่เหนือ nginx จะทำงานได้อย่างดีที่สุด แต่สำหรับการปรับให้เหมาะสมยิ่งขึ้นคุณสามารถปรับแต่งค่าและทดสอบประสิทธิภาพได้.

6. หมดเวลา

หมดเวลาปรับปรุงประสิทธิภาพ nginx อย่างมาก การเชื่อมต่อแบบ keepalive ลด cpu และโอเวอร์เฮดของเครือข่ายที่จำเป็นสำหรับการเปิดและปิดการเชื่อมต่อ ต่อไปนี้เป็นตัวแปรที่ต้องปรับปรุงเพื่อประสิทธิภาพที่ดีที่สุด:
client_header_timeout & client_body_timeout – เวลาที่เซิร์ฟเวอร์ nginx จะรอให้ส่วนหัวของลูกค้าหรือเนื้อหาถูกส่งหลังจากการร้องขอ.

keepalive_timeout – ระยะเวลาที่การเชื่อมต่อแบบ keepalive ยังคงเปิดอยู่หลังจากที่ nginx ปิดการเชื่อมต่อไคลเอ็นต์.

send_timeout – หมดเวลาสำหรับการส่งคำตอบไปยังลูกค้า หากลูกค้าไม่สามารถรับการตอบสนองของเซิร์ฟเวอร์ภายในระยะเวลานี้ nginx จะยุติการเชื่อมต่อ.

ต่อไปนี้เป็นค่าที่แนะนำ: (ภายในส่วน http)

client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;

7. เข้าถึงบันทึก

การบันทึกเป็นสิ่งสำคัญมากสำหรับการจัดการแก้ไขปัญหาและตรวจสอบระบบ อย่างไรก็ตามการบันทึกและจัดเก็บข้อมูลจำนวนมากใช้ทรัพยากรของระบบมากใช้ประโยชน์จาก CPU / IO มากขึ้นดังนั้นจึงลดประสิทธิภาพของเซิร์ฟเวอร์ สำหรับการบันทึกการเข้าใช้งานจะบันทึกทุกคำขอ nginx ดังนั้นจึงใช้ทรัพยากร CPU จำนวนมากซึ่งจะลดประสิทธิภาพการทำงานของ nginx.

มีสองวิธีที่จะไปเกี่ยวกับเรื่องนี้.

  1. ปิดใช้งานการบันทึกการเข้าถึงทั้งหมด
    ปิดการเข้าถึง;
  2. หากจำเป็นต้องมีการบันทึกการเข้าถึงให้เปิดใช้งานการบัฟเฟอร์การเข้าถึง สิ่งนี้ทำให้ Nginx สามารถบัฟเฟอร์ชุดของรายการบันทึกและเขียนลงในไฟล์บันทึกพร้อมกันแทนการดำเนินการเขียนที่แตกต่างกันสำหรับแต่ละรายการบันทึกเดียว.
    access_log /var/log/nginx/access.log บัฟเฟอร์หลัก = 16k

คุณยังสามารถใช้โซลูชันโอเพ่นซอร์สสำหรับการบันทึกเช่น ELK stack และอื่น ๆ ซึ่งจะรวมศูนย์บันทึกทั้งหมดสำหรับระบบของคุณ.

ข้อสรุป

เมื่อคุณมีเว็บเซิร์ฟเวอร์ nginx ที่ได้รับการปรับปรุงแล้วขั้นตอนต่อไปคือการตรวจสอบเซิร์ฟเวอร์และปรับแต่งการตั้งค่าตามเวลาเนื่องจากปริมาณการรับส่งข้อมูลไปยังเซิร์ฟเวอร์ที่เพิ่มขึ้นหรือปัจจัยอื่น ๆ เข้ามา ดังนั้นค่าที่แนะนำนั้นไม่ได้ดีที่สุดสำหรับทุกสถานการณ์ แต่เฉพาะในระหว่างการพัฒนาและระหว่างการรับส่งข้อมูลต่ำหรือปานกลางถึงเว็บเซิร์ฟเวอร์ คุณสามารถเพิ่มค่าของ step-wise ในขณะที่ทำการทดสอบประสิทธิภาพเพื่อตรวจสอบการปรับปรุงใด ๆ.

หากคุณไม่เห็นการปรับปรุงใด ๆ โปรดปล่อยให้เป็นค่าเริ่มต้น ค่า tweaked โดยรวมของพารามิเตอร์ต่างๆช่วยปรับปรุงประสิทธิภาพ nginx อย่างมาก.

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

ลองใช้บริการ VPS 3 อันดับแรกเหล่านี้:

A2 โฮสติ้ง

ราคาเริ่มต้น:
$ 5.00


ความเชื่อถือได้
9.3


การตั้งราคา
9.0


เป็นมิตรกับผู้ใช้
9.3


สนับสนุน
9.3


คุณสมบัติ
9.3

อ่านความคิดเห็น

เยี่ยมชม A2 Hosting

ScalaHosting

ราคาเริ่มต้น:
$ 12.00


ความเชื่อถือได้
9.4


การตั้งราคา
9.5


เป็นมิตรกับผู้ใช้
9.5


สนับสนุน
9.5


คุณสมบัติ
9.4

อ่านความคิดเห็น

เยี่ยมชม ScalaHosting

Hostinger

ราคาเริ่มต้น:
$ 3.95


ความเชื่อถือได้
9.3


การตั้งราคา
9.3


เป็นมิตรกับผู้ใช้
9.4


สนับสนุน
9.4


คุณสมบัติ
9.2

อ่านความคิดเห็น

เยี่ยมชม Hostinger

บทความเชิงปฏิบัติที่เกี่ยวข้อง

  • วิธีการติดตั้ง WordPress ด้วย Nginx & Redis
    มือใหม่
  • วิธีการติดตั้ง WordPress ด้วย Nginx & redis บน CentOS VPS หรือ Dedicated Server
    สื่อกลาง
  • วิธีการทำให้เว็บเซิร์ฟเวอร์ Nginx แข็งขึ้นบน Ubuntu 18.04 VPS หรือเซิร์ฟเวอร์เฉพาะ
    ผู้เชี่ยวชาญ
  • วิธีการติดตั้งสแต็ค LEMP (Linux, Nginx, MySQL, PHP) บน CentOS 7 VPS หรือเซิร์ฟเวอร์เฉพาะ
    สื่อกลาง
  • วิธีกำหนดค่า Nginx และ Apache Together บน Ubuntu VPS หรือเซิร์ฟเวอร์เฉพาะ
    สื่อกลาง
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me