Nginx vs Apache como proxy inverso, ¿cuál elegir?

36

este tipo de pregunta tal vez se ha hecho aquí, pero no pude encontrar ninguna que realmente coincida con mi pregunta. Escuché que el rendimiento de nginx es bastante impresionante, pero Apache tiene más documentos, comunidad (lea: experto) para obtener ayuda

Ahora lo que quiero saber, cómo ambos servidores web se comparan en términos de rendimiento, facilidad de configuración, nivel de personalización, etc. ¿COMO REVERSE PROXY server en un entorno vps?

Todavía estoy pesando entre los dos para una aplicación web ruby ​​(no ROR) servida con thin (uno del servidor web ruby).
La respuesta específica será muy apreciada. La respuesta general de no tocar la parte de rubí está bien. Todavía soy novato en la administración del servidor web.

mhd
fuente
tnx a martin y webdestroya responde, ahora me estoy inclinando hacia nginx
mhd
¿No tendría más sentido optar por un proxy inverso específicamente diseñado como el barniz?
ptman

Respuestas:

31

Quería poner esto en un comentario ya que estoy de acuerdo con el punto más importante de la respuesta de webdestroyas, pero se hizo demasiado largo.

Estás en un entorno VPS, esto significa que lo más probable es que tengas poca RAM. Solo por esta razón, querrá Nginx ya que su huella de memoria es más pequeña que Apaches.

Además, no estoy de acuerdo con algunos de los argumentos mencionados.

Facilidad de configuración:
Nginx no es más difícil que Apache. Es diferente. Si está acostumbrado a Apache, el cambio siempre será más difícil, esto no significa que el estilo de configuración en sí sea más difícil. Migré completamente de Apache a Nginx hace más de un año y hoy me costaría configurar un servidor Apache, mientras que Nginx es extremadamente fácil de configurar.

Para Ruby:
Nginx tiene Passenger, sin embargo, generalmente lo veo descrito como el método inferior para conectarse a Ruby. No soy un programador de Ruby, así que no puedo verificar esto, pero a menudo veo a Unicorn y Thin mencionados como mejores alternativas.

En conclusión:
Nginx fue hecho para ser un proxy inverso. Inicialmente, todo lo que hizo fue servir archivos estáticos y revertir proxy a un servidor back-end a través de HTTP / 1.0. Desde entonces, se ha agregado fastcgi, equilibrio de carga y varias otras características, pero su propósito de diseño inicial era servir archivos estáticos y proxy inverso. Y lo hace muy bien.

Apache, por el contrario, es un servidor web de propósito general. No tengo dudas de que puede revertir el proxy perfectamente bien, pero no fue diseñado para tener una huella de memoria mínima y, como resultado, requiere más recursos que Nginx, lo que significa que mi argumento inicial del entorno VPS entra en juego.

Martin Fjordvald
fuente
+1 para la aclaración.
John Gardeniers
Me atrevería a recomendarlo como su único servidor web. vea mis comentarios serverfault.com/questions/133481/… <- aquí. Lo estoy usando como el único servidor web en mi VPS, y he incorporado a los otros usuarios con FastCGI para sus aplicaciones PHP / CGI.
Jason
Jason Lo he estado usando como mi único servidor web durante más de un año y maneja millones de páginas al día. Estoy totalmente de acuerdo con tu recomendación! :)
Martin Fjordvald
8

Rendimiento:
NGinX. Este servidor es conocido por ser uno de los mejores servidores web y es utilizado por muchas compañías diferentes (Notable, MediaTemple)

Facilidad de configuración:
Apache. La configuración de Apache es realmente simple y realmente poderosa. Nginx es poderoso, pero puede ser muy difícil de entender, ya que parece más un lenguaje de programación que un archivo de configuración.

Nivel de personalización:
Apache. Apache tiene toneladas de modificaciones y otros complementos escritos para ello. Si bien Nginx aún tiene complementos para ello, creo que Apache tiene muchos más que Nginx.

Para Ruby:
Sé que Nginx se puede usar como un poderoso equilibrador de carga con Mongrel / webrick. Sin embargo, Apache tiene Phusion / Passenger, lo que hace que la integración sea más agradable.

Ganador del proxy inverso:
NGinX

Mitch Dempsey
fuente
2
Estoy interesado, no discutiendo. ¿Por qué Nginx es un ganador para el proxy inverso? El resto de su respuesta realmente no hace que una se destaque de la otra. En todo caso, tiende a favorecer a Apache.
John Gardeniers
1
Bueno, porque en su mayor parte, desea un proxy inverso debido a la alta carga. Lo que significaría que el rendimiento es probablemente el mayor problema, en cuyo caso Nginx fue el ganador, por eso lo elegí. Como desarrollador, me encanta Apache, pero desde el punto de "cómo puedo obtener el máximo rendimiento de este servidor web", iría con Nginx
Mitch Dempsey
8

Nginx está basado en eventos, mientras que apache está basado en procesos. Bajo alta carga, esto hace toda la diferencia en el mundo ... Apache tiene que bifurcar o iniciar un nuevo hilo para cada conexión, mientras que nginx no. Esta diferencia se muestra principalmente en el uso de la memoria, pero también en el tiempo de respuesta del usuario y otras métricas de rendimiento. Nginx puede manejar decenas de miles de conexiones HTTP keepalive simultáneas en hardware moderno. Apache usará 1-2 MB de pila para cada conexión, por lo que al hacer los cálculos, verá que solo puede manejar unos cientos o quizás miles de conexiones simultáneamente sin comenzar a intercambiar.

Usamos nginx frente a Apache e IIS en nuestro entorno como un proxy de equilibrio de carga y almacenamiento en caché, y no podríamos estar más contentos. Usamos dos cajas nginx pequeñas en lugar de un par de dispositivos F5 arrendados muy costosos y nuestros sitios son mucho más rápidos tanto en tiempo de respuesta como en tiempos de respuesta medidos.

rmalayter
fuente
1

Estaba en el mismo dilema que tú hace unas dos semanas.

Para darle una respuesta realmente breve: desde mi investigación, nginx es realmente rápido y amigable con los recursos, pero solo fue concebido para revertir archivos estáticos proxy. El resto son soluciones integrales que debe configurar o guiar a su manera.

AFAIK nginx no tiene archivos htaccess, por lo que debe orientarse si depende de esa función.

AFAIK todo lo que necesita funciona y he visto tutoriales.

Iré con nginx con mis pruebas y configuración de perfiles. Tengo una aplicación típica de LAMP.

He leído que hay personas que invierten el proxy y sirven archivos estáticos desde nginx y pasan todo lo demás, como PHP, a una instancia de Apache en ejecución. Reclaman una buena compensación. No tengo datos de rendimiento al respecto, pero es posible que desee saber.

deploymonkey
fuente
2
Deshabilitar las anulaciones de htaccess en apache por razones de rendimiento es bastante común, no sería muy útil admitir dicha característica en un servidor diseñado para un alto rendimiento.
theotherrecibir
Gracias por agregar esa declaración. El OP no es un administrador profesional, por lo que debemos ser claros.
deploymonkey
1

He tenido serios problemas con el mod_proxy de Apache en una variedad de plataformas en diferentes entornos en los últimos años. De vez en cuando, simplemente dejará de funcionar y la única solución parece ser reiniciar el servidor Apache.

Personalmente, no preguntaría "nginx vs Apache", sino "nginx vs lighttpd", ¡y esa es una llamada mucho más difícil!

Mes.
fuente
Argumento válido, pero la última vez que lo verifiqué, lighttpd todavía tenía errores pendientes y era conocido por las pérdidas de memoria. Se desaconsejó el despliegue de producción por parte de los administradores. ¿Ha cambiado esto?
deploymonkey
Tiene advertencias, ciertamente (especialmente cuando se sirven archivos muy grandes), pero es significativamente más estable que Apache como proxy: no he tenido problemas reales en varias implementaciones en los últimos seis meses
lunes
He eliminado lighttpd de la lista de candidatos por alguna razón olvidada :)
mhd