2010-04-16 19 views
6

Tengo la intención de mover todo mi contenido estático a un CDN así que en mi servidor sólo tengo contenido dinámico izquierda. Ahora tengo Nginx configurado como proxy inverso para Apache. La solicitud estática que entró directamente entregada por Nginx sin tener que ir a Apache.¿Un Nginx como proxy inverso en busca de ayuda Apache en contenido dinámico solamente

En este caso Nginx maneja una gran parte de la solicitud y puedo ver claramente la necesidad de Nginx.

Ahora que me movía todo el contenido estático a otro dominio, hay todavía una necesidad de tener nginx frente a Apache. Porque ahora todas las solicitudes son solicitudes dinámicas predeterminadas y todas van a Apache.

¿Hay otros beneficios de tener Nginx y Apache corriendo por sólo el contenido dinámico.

Mi contenido dinámico es PHP/MySQL

Editar:

Para que quede claro: ahora tengo Nginx como proxy inverso. Ofrece contenido estático y dinámico. Pero estoy moviendo mis archivos estáticos a un CDN. ¿Entonces todavía necesito Nginx en mi dominio?

+0

¿Cómo se relaciona esto con App Engine? –

+0

¿Por contenido dinámico se entiende contenido diferente por usuario o solo contenido que se genera a través de PHP? Si se utiliza la misma página para múltiples usuarios, puede tener Nginx en la memoria caché durante unos segundos, lo que ayudará mucho cuando se trate de cargas pesadas. –

+0

No, las páginas son siempre diferentes. No es necesario para Nginx, supongo. –

Respuesta

2

No, ya no necesita nginx.

+0

¿Puede darme alguna explicación de por qué esto ya no es necesario? Ya no ayuda a Apache de ninguna manera. –

+2

Estoy un poco desconcertado por su pregunta, en primer lugar.Agregaste nginx con el único propósito de servir contenido estático. Ya no sirve contenido estático, pero se pregunta si todavía necesita nginx. Ahora no sirve para nada, solo agrega gastos generales. – goat

+1

Pensé que tal vez ayudaba también con el contenido dinámico. –

0

nginx delante es la mejor solución en caso de que utilice Apache 1.3:

nginx puede servir fácilmente miles de conexiones, pero Apache no puede

+0

¿Puede dar un pequeño detalle sobre lo que quiere decir? Porque solo entrego contenido dinámico a través de Apache. Y uso Apache 2 –

3

lo que he hecho por un sitio web es:

  • estableció nginx como proxy inverso delante de tanta Apache
  • configurarlo:
    • Solicitudes a las páginas PHP (es decir contenido dinámico) se envían a Apache
    • Las solicitudes a los archivos estáticos (CSS, JS, ...) están servidas directamente por nginx.

esto sin tener que configurar dos dominios: todo está en el mismo dominio.


Básicamente, lo que he hecho es:

  • servir las imágenes por nginx, sin compresión gzip, con el caché
  • sirven js/css (es decir, archivos de texto) de nginx, con la compresión gzip , con el caché
  • sirven algunas otras extensiones (pdf, exeutables, ...) Forma nginx, sin compresión, sin almacenamiento en caché
  • pasar las otras peticiones de Apache


Así es como se ve el archivo de configuración de mi nginx como:

server { 
    listen 80; 
    server_name MY_DOMAIN_NAME; 

    access_log /var/log/nginx/MY_DOMAIN_NAME.access.log; 

    gzip on; 
    gzip_comp_level 2; 
    gzip_proxied any; 
    gzip_types text/plain text/html text/css text/xml application/xml application/xml+rss application/xml+atom text/javascript application/x-javascript application/javascript; 

    location ~* ^.+\.(jpg|jpeg|gif|png|ico)$ { 
     root /home/www/MY_DOMAIN_NAME; 
     #access_log off; 
     gzip off; 
     expires 1d; 
    } 
    location ~* ^.+\.(css|js)$ { 
     root /home/www/MY_DOMAIN_NAME; 
     #access_log off; 
     expires 1d; 
    } 
    location ~* ^.+\.(pdf|gz|bz2|exe|rar|zip|7z)$ { 
     root /home/www/MY_DOMAIN_NAME; 
     gzip off; 
    } 


    location/{ 
     proxy_pass http://MY_DOMAIN_NAME:8080; 
     proxy_redirect  off; 

     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_max_temp_file_size 0; 

     client_max_body_size  10m; 
     client_body_buffer_size 128k; 

     proxy_connect_timeout  90; 
     proxy_send_timeout   90; 
     proxy_read_timeout   90; 

     proxy_buffer_size   4k; 
     proxy_buffers    4 32k; 
     proxy_busy_buffers_size 64k; 
     proxy_temp_file_write_size 64k; 
    } 
} 


Ahora, ¿por qué tal una cosa?

Bueno, nginx se supone que:

  • necesita menos memoria
  • ser más rápido
  • ser capaz de manejar más conexiones

Por lo tanto, supongo que podría ayudar en un sitio web con un poco de tráfico, para reducir la carga que se pone en Apache.

+0

Ok, tal vez mi pregunta no era tan clara. Pero esta es la configuración que tengo ahora. Se explica en mi primer párrafo. Pero ahora estoy moviendo mis archivos estáticos a otro dominio. De esta forma, los recursos que uso disminuyen aún más. Pero lo que quería saber es si aún necesito Nginx. –

2

También puede usar nginx para descargar el procesamiento de SSL de las instancias de apache.

Por ejemplo, tenemos una pila configurada con nginx-> haproxy-> conjunto de servidores apache. nginx y haproxy viven juntos en un clúster de heartbeat y alimentan las solicitudes en un grupo de cuadros de apache en el back-end. Instalamos todos los certificados SSL en la interfaz nginx.

14

Sí, absolutamente necesitas nginx en frente de Apache. Apache usa 1 hilo o proceso por conexión. Cada uno de estos hilos ocupa memoria. Si tiene unos cientos de personas visitando su sitio web y tiene habilitado keepalive, cada uno de estos navegadores mantendrá un proceso de apache o hilo ocupando la memoria en su servidor.

Puede solucionar esto desactivando keepalive en su servidor apache, pero esto ralentiza el rendimiento de su sitio web porque los navegadores no pueden volver a utilizar las conexiones.

En su lugar, utiliza nginx como proxy inverso con keepalive habilitado. Puede mantener miles de conexiones con una huella de memoria pequeña (alrededor de 8 megas). Debido a que nginx es local para su servidor apache, cada solicitud solo ocupa un elemento secundario o subproceso de apache durante unos microsegundos. Eso significa que puede atender a miles de personas con solo un pequeño puñado de procesos de apache.

También la configuración de nginx es mucho más flexible que apache y tenerla en la parte frontal le da mucha flexibilidad.

+1

Esta es claramente la mejor respuesta desde una perspectiva técnica. No quiere que Apache prefiera manejar las conexiones de su cliente usando Keep-Alives. Claro, puedes desactivar keep-alives, entonces todos tus usuarios se quejarán de que tu sitio es lento (especialmente usuarios lejanos). – diq

+0

Muy buena respuesta, pero no olvidemos todas las otras cosas que nginx puede hacer. Una muy relevante para esta pregunta sería el almacenamiento en caché. El almacenamiento en caché de contenido dinámico tendría más sentido (cuando sea posible). Así que sí, nginx ayudaría ... mucho. –

Cuestiones relacionadas