Nginx vs Apache เป็น reverse proxy ซึ่งเป็นตัวเลือกหนึ่ง


36

อาจมีคำถามประเภทนี้ที่นี่ แต่ฉันไม่พบสิ่งใดที่ตรงกับคำถามของฉัน ได้ยินว่าประสิทธิภาพของ nginx ค่อนข้างน่าประทับใจ แต่ Apache มีเอกสารเพิ่มเติมชุมชน (อ่าน: ผู้เชี่ยวชาญ) เพื่อรับความช่วยเหลือ

ตอนนี้สิ่งที่ฉันต้องการทราบว่าเว็บเซิร์ฟเวอร์ทั้งสองเปรียบเทียบในแง่ของประสิทธิภาพความง่ายในการกำหนดค่าระดับการปรับแต่ง ฯลฯ ย้อนกลับเป็นเซิร์ฟเวอร์ PROXY ในสภาพแวดล้อม vps หรือไม่?

ฉันยังคงชั่งน้ำหนักระหว่างสองรายการสำหรับเว็บแอป ruby ​​(ไม่ใช่ ROR) ที่แสดงพร้อมกับเว็บเซิร์ฟเวอร์ (หนึ่งใน ruby)
คำตอบเฉพาะจะได้รับการชื่นชมมาก คำตอบทั่วไปที่ไม่แตะต้องส่วนทับทิมก็โอเค ฉันยังคงไม่มีเสียงในการบริหารเว็บเซิร์ฟเวอร์


tnx to martin และ webdestroya ตอบตอนนี้ฉันกำลังโน้มตัวไปยัง nginx
mhd

การใช้พร็อกซีย้อนกลับที่ออกแบบมาเป็นพิเศษอย่างวานิชนั้นจะไม่เหมาะสมหรือไม่
ptman

คำตอบ:


31

ฉันต้องการที่จะใส่ลงไปในความคิดเห็นตั้งแต่ฉันเห็นด้วยกับจุดที่สำคัญที่สุดของคำตอบ webdestroyas แต่มันก็ยาวเกินไป

คุณอยู่ในสภาพแวดล้อม VPS ซึ่งหมายความว่าคุณมีแนวโน้มที่ RAM จะต่ำ ด้วยเหตุผลนี้เพียงอย่างเดียวคุณจะต้องการ Nginx เนื่องจากขนาดหน่วยความจำของมันเล็กกว่า Apaches

นอกจากนี้ฉันไม่เห็นด้วยกับข้อโต้แย้งที่กล่าวถึง

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

สำหรับ Ruby:
Nginx มีผู้โดยสาร แต่ฉันมักจะเห็นว่าเป็นวิธีที่ด้อยกว่าในการเชื่อมต่อกับ Ruby ฉันไม่ใช่โปรแกรมเมอร์ Ruby ดังนั้นฉันจึงไม่สามารถตรวจสอบได้ แต่ฉันมักจะเห็น Unicorn และ Thin พูดถึงว่าเป็นทางเลือกที่ดีกว่า

ในบทสรุป:
Nginx ถูกสร้างขึ้นเพื่อเป็น reverse proxy ตอนแรกสิ่งที่มันทำคือการให้บริการไฟล์แบบคงที่และย้อนกลับ proxy ไปยังเซิร์ฟเวอร์ด้านหลังผ่าน HTTP / 1.0 ตั้งแต่นั้นเป็นต้นมา fastcgi, load balancing และคุณสมบัติอื่น ๆ ได้ถูกเพิ่มเข้ามา แต่มันมีจุดประสงค์ในการออกแบบเบื้องต้นคือการให้บริการไฟล์คงที่และ reverse proxy และมันก็ทำได้ดีมาก

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


+1 สำหรับการชี้แจง
John Gardeniers

ฉันจะไปไกลถึงแนะนำอีกครั้งว่าเป็นเว็บเซิร์ฟเวอร์ของคุณ ดูความคิดเห็นของฉัน serverfault.com/questions/133481/… <- ที่นี่ ฉันใช้มันเป็นเว็บเซิร์ฟเวอร์เดียวใน VPS ของฉันและฉันได้รับผู้ใช้รายอื่นบนกระดานด้วย FastCGI สำหรับแอพ PHP / CGI
Jason

เจสันฉันใช้มันเป็นเว็บเซิร์ฟเวอร์เดียวของฉันมานานกว่าหนึ่งปีแล้วและมันสามารถจัดการเพจได้นับล้านเพจต่อวัน ฉันเห็นด้วยอย่างเต็มที่กับคำแนะนำของคุณ! :)
Martin Fjordvald

8

ประสิทธิภาพการทำงาน:
NGinX เซิร์ฟเวอร์นี้รู้จักกันว่าเป็นหนึ่งในเว็บเซิร์ฟเวอร์ที่มีประสิทธิภาพดีที่สุดและมีการใช้งานโดย บริษัท ต่างๆมากมาย (Notable, MediaTemple)

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

ระดับของการปรับแต่ง:
Apache Apache มีตัวดัดแปลงมากมายและปลั๊กอินอื่น ๆ ที่เขียนขึ้นสำหรับมัน ในขณะที่ Nginx ยังคงมีปลั๊กอินที่สร้างขึ้นมาฉันคิดว่า Apache มีหลายอย่างมากกว่า Nginx

สำหรับ Ruby:
ฉันรู้ว่า Nginx สามารถใช้เป็น load balancer ที่ทรงพลังด้วย Mongrel / webrick อย่างไรก็ตาม Apache มี Phusion / Passenger ซึ่งทำให้การผสานรวมดีกว่า

ผู้ชนะ Reverse Proxy:
NGinX


2
ฉันสนใจไม่เถียง ทำไม Nginx ถึงเป็นผู้ชนะสำหรับ reverse proxy? คำตอบที่เหลือของคุณไม่ได้ทำให้คนอื่นโดดเด่นกว่าคนอื่น หากมีสิ่งใดที่ทำให้อาปาเช่โปรดปราน
John Gardeniers

1
เพราะส่วนใหญ่คุณต้องการ reverse proxy เนื่องจากมีโหลดสูง ซึ่งหมายความว่าประสิทธิภาพอาจเป็นปัญหาที่ใหญ่ที่สุดซึ่งในกรณีนี้ Nginx เป็นผู้ชนะซึ่งเป็นสาเหตุที่ฉันเลือก ในฐานะนักพัฒนาฉันรัก apache แต่จากจุด "ฉันจะได้รับประสิทธิภาพสูงสุดจากเว็บเซิร์ฟเวอร์นี้ได้อย่างไร" ฉันจะไปกับ Nginx
Mitch Dempsey

8

Nginx เป็นไปตามเหตุการณ์ในขณะที่ apache ใช้กระบวนการ ภายใต้ภาระสูงสิ่งนี้สร้างความแตกต่างในโลก ... Apache ต้องแยกหรือเริ่มเธรดใหม่สำหรับแต่ละการเชื่อมต่อในขณะที่ nginx ไม่ ความแตกต่างนี้แสดงให้เห็นส่วนใหญ่ในการใช้หน่วยความจำ แต่ยังอยู่ในเวลาตอบสนองของผู้ใช้และตัวชี้วัดประสิทธิภาพอื่น ๆ Nginx สามารถจัดการการเชื่อมต่อ HTTP keepalive หลายหมื่นพร้อมกันบนฮาร์ดแวร์ที่ทันสมัย Apache จะใช้สแต็ก 1-2 MB สำหรับการเชื่อมต่อแต่ละครั้งดังนั้นการทำคณิตศาสตร์ที่คุณเห็นว่าคุณสามารถจัดการการเชื่อมต่อสองสามร้อยหรือพันครั้งพร้อมกันโดยไม่ต้องเริ่มต้นสลับ

เราใช้ nginx ต่อหน้า Apache และ IIS ในสภาพแวดล้อมของเราเป็นโหลดบาลานซ์และแคชพร็อกซีและไม่สามารถมีความสุขมากขึ้น เราใช้กล่อง nginx ขนาดเล็กสองกล่องแทนอุปกรณ์ F5 ที่เช่าราคาแพงมากและเว็บไซต์ของเรานั้นเร็วกว่าทั้งในแง่ความรู้สึกและเวลาตอบสนองที่วัดได้


1

ฉันอยู่ในภาวะที่กลืนไม่เข้าคายไม่ออกเช่นเดียวกับคุณประมาณสองสัปดาห์ที่ผ่านมา

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

AFAIK nginx ไม่มีไฟล์ htaccess ดังนั้นคุณต้องหาทางแก้ไขถ้าขึ้นอยู่กับคุณสมบัตินั้น

AFAIK ทุกอย่างจำเป็นต้องใช้งานได้และฉันได้เห็นแบบฝึกหัด

ฉันจะไปกับ nginx พร้อมการทดสอบและการตั้งค่าการทำโปรไฟล์ ฉันมีแอปพลิเคชั่นหลอดไฟทั่วไป

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


2
การปิดใช้งานการแทนที่ htaccess บน apache ด้วยเหตุผลด้านประสิทธิภาพเป็นเรื่องธรรมดาการสนับสนุนคุณสมบัติดังกล่าวในเซิร์ฟเวอร์ที่ออกแบบมาเพื่อประสิทธิภาพสูงนั้นไม่สมเหตุสมผล
theotherreceive

ขอบคุณที่เพิ่มคำสั่งนั้น OP ไม่ใช่ผู้ดูแลระบบมืออาชีพดังนั้นเราจำเป็นต้องมีความชัดเจน
deploymonkey

1

ฉันมีปัญหาร้ายแรงกับ mod_proxy ของ Apache บนแพลตฟอร์มที่หลากหลายในสภาพแวดล้อมที่แตกต่างกันในช่วงสองสามปีที่ผ่านมา บางครั้งมันก็จะหยุดทำงานและวิธีแก้ปัญหาเดียวที่จะรีสตาร์ทเซิร์ฟเวอร์ Apache

โดยส่วนตัวฉันจะไม่ถาม“ nginx vs Apache” แต่“ nginx vs lighttpd” - และนั่นเป็นการเรียกที่ยากขึ้น!


อาร์กิวเมนต์ที่ถูกต้อง แต่ครั้งล่าสุดที่ฉันตรวจสอบ lighttpd ยังคงมีข้อบกพร่องที่โดดเด่นมานานและได้รับการยอมรับใหม่สำหรับการรั่วไหลของหน่วยความจำ แนะนำสำหรับการปรับใช้การผลิตโดยผู้ดูแลระบบ สิ่งนี้มีการเปลี่ยนแปลงหรือไม่?
deploymonkey

แต่ก็มีคำเตือนอย่างแน่นอน (โดยเฉพาะอย่างยิ่งที่ให้บริการไฟล์ขนาดใหญ่มาก) แต่ก็มีเสถียรภาพมากขึ้นกว่า Apache เป็นพร็อกซี่ - ฉันไม่ได้มีปัญหาจริงในหลายการใช้งานในช่วงหกเดือน
โม

ผมได้เขียนออก lighttpd จากรายชื่อผู้สมัครด้วยเหตุผลบางอย่างลืม :)
mhd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.