2010-04-16 3 views
6

Je prévois de déplacer tout mon contenu statique sur un CDN donc sur mon serveur il ne me reste plus que du contenu dynamique. J'ai maintenant Nginx mis en place en tant que proxy inverse à Apache. La requête statique qui est arrivée directement à Nginx sans avoir à aller à Apache.Est-ce qu'un Nginx comme proxy inverse pour Apache aide sur le contenu dynamique seulement

Dans ce cas, Nginx a traité une grande partie de la demande et je peux clairement voir la nécessité de Nginx.

Maintenant que j'ai déplacé tout le contenu statique vers un autre domaine, est-il toujours nécessaire d'avoir nginx devant Apache. Parce que maintenant toutes les requêtes sont par défaut des requêtes dynamiques et vont toutes à Apache.

Y a-t-il d'autres avantages à ce que Nginx et Apache s'exécutent uniquement pour du contenu dynamique?

Mon contenu dynamique est PHP/MySQL

Edit:

Pour être clair: J'ai maintenant Nginx comme proxy inverse. Il fournit un contenu statique et dynamique. Mais je déplace mes fichiers statiques vers un CDN. Ai-je besoin de Nginx sur mon domaine?

+0

Comment est-ce lié à AppEngine? –

+0

Par «contenu dynamique», voulez-vous dire un contenu différent par utilisateur ou seulement du contenu généré via PHP? Si la même page est utilisée pour plusieurs utilisateurs, Nginx peut la mettre en cache pendant quelques secondes, ce qui sera très utile en cas de charge importante. –

+0

Non, les pages sont toujours différentes. Pas besoin de Nginx je suppose. –

Répondre

2

Non, vous n'avez plus besoin de nginx.

+0

Pouvez-vous me donner une explication pourquoi ce n'est plus nécessaire. Cela n'aide-t-il plus Apache? –

+2

Je suis un peu déconcerté à votre question en premier lieu.Vous avez ajouté nginx dans le seul but de diffuser du contenu statique. Vous ne servez plus de contenu statique, mais vous vous demandez si vous avez toujours besoin de nginx? Il ne sert plus à rien, il ne fait qu'ajouter des frais généraux. – goat

+1

Je pensais que cela avait peut-être aussi aidé le contenu dynamique. –

0

nginx devant est la meilleure solution dans le cas où vous utilisez Apache 1.3:

nginx peut servir facilement des milliers de conections, mais Apache ne peut pas

+0

Pouvez-vous donner un petit détail sur ce que vous voulez dire. Parce que je ne fournis que du contenu dynamique à travers Apache. Et j'utilise Apache 2 –

3

Ce que je l'ai fait pour un site Web est:

  • mis en place nginx comme proxy inverse devant Apache
  • configure si:
    • Les demandes aux pages PHP (c.-à-d. contenu dynamique) sont envoyés à Apache
    • Les demandes aux fichiers statiques (CSS, JS, ...) sont directement desservies par nginx.

sans avoir à mettre en place deux domaines: tout est sur le même domaine.


Fondamentalement, ce que je l'ai fait est:

  • servent les images de nginx, sans compression gzip, avec la mise en cache
  • servent js/css (par exemple des fichiers texte) à partir nginx, avec la compression gzip , avec la mise en cache
  • servent d'autres extensions (pdf, exeutables, ...) Sous forme nginx, sans compression, sans mise en cache
  • passer les autres demandes d'Apache


Voici comment le fichier de configuration de mon nginx ressemble:

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; 
    } 
} 


Maintenant, pourquoi une telle chose?

Eh bien, nginx est censé:

  • Besoin moins de mémoire
  • plus rapide
  • capable de gérer plus de connexions

Donc, je suppose que cela pourrait aider sur un site Web avec un peu de trafic, pour réduire la charge qui est mise sur Apache.

+0

Ok, peut-être que ma question n'était pas si claire. Mais c'est la configuration que j'ai maintenant. C'est expliqué dans mon premier paragraphe. Mais maintenant je déplace mes fichiers statiques vers un autre domaine. De cette façon, les ressources que j'utilise diminuent encore plus. Mais ce que je voulais savoir, c'est si j'ai encore besoin de Nginx. –

2

Vous pouvez également utiliser nginx pour décharger le traitement SSL des instances apache. Par exemple, nous avons une pile configurée avec un pool nginx-> haproxy-> de serveurs apache. nginx et haproxy cohabitent sur un cluster de pulsations et alimentent les requêtes dans un pool de boîtes d'apaches sur le backend. Nous installons tous les certificats SSL sur l'interface nginx.

14

Oui, vous avez absolument besoin de nginx devant Apache. Apache utilise 1 thread ou processus par connexion. Chacun de ces threads occupe de la mémoire. Si vous avez quelques centaines de personnes qui visitent votre site Web et que vous avez activé la fonction de suivi, chacun de ces navigateurs conservera un processus apache ou occupera la mémoire occupé de votre serveur.

Vous pouvez contourner ce problème en désactivant keepalive sur votre serveur Apache, mais cela ralentit les performances de votre site Web car les navigateurs ne peuvent pas réutiliser les connexions. Donc, à la place, vous utilisez nginx comme proxy inverse avec keepalive activé. Il peut maintenir des milliers de connexions avec une empreinte de mémoire minuscule (environ 8 Mo). Comme nginx est local pour votre serveur Apache, chaque requête n'occupe qu'un enfant ou un thread Apache pendant quelques microsecondes. Cela signifie que vous pouvez servir des milliers de personnes avec seulement une toute petite poignée de processus Apache.

De plus, la configuration de nginx est beaucoup plus flexible que celle d'apache et en la disposant sur le frontal, elle vous donne beaucoup de flexibilité.

+1

C'est clairement la meilleure réponse d'un point de vue technique. Vous ne voulez pas que Apache manipule vos connexions client à l'aide de keep-alives. Bien sûr, vous pouvez désactiver keep-alives, alors tous vos utilisateurs vont se plaindre que votre site est lent (en particulier les utilisateurs lointains). – diq

+0

Très bonne réponse, mais n'oublions pas tous les autres goodies que nginx peut faire. Un très pertinent à cette question serait la mise en cache. La mise en cache du contenu dynamique aurait davantage de sens (si possible). Donc oui, nginx aiderait ... beaucoup. –

Questions connexes