Comment configurer NGINX pour l'équilibrage de charge de base
NGINX est couramment utilisé comme serveur Web, mais il fait également un excellent travail en tant que proxy inverse et équilibreur de charge – un périphérique réseau conçu pour gérer la majeure partie de votre trafic et acheminer les demandes vers plusieurs serveurs Web différents.
Fonctionnement de l'équilibrage de charge NGINX
Le principe de base d'un équilibreur de charge est qu'il se situe entre l'utilisateur et un ensemble de serveurs, et les demandes de proxy pour eux. Habituellement, cela se fait avec deux serveurs ou plus, afin que le trafic puisse être réparti plus facilement entre eux.
La plupart de la configuration se produit dans la façon dont NGINX sélectionne le serveur vers lequel router. La valeur par défaut est round-robin, qui enverra les demandes à chaque serveur dans l'ordre, garantissant une répartition de charge égale.
Cependant, ce n'est pas toujours aussi simple. De nombreuses applications Web nécessitent une certaine forme de persistance de session, ce qui signifie que l'utilisateur doit accéder au même serveur pendant toute sa session. Par exemple, un panier peut être stocké localement sur un serveur d'applications et si l'utilisateur change de serveur en cours de session, l'application peut se briser. Bien sûr, bon nombre de ces scénarios peuvent être corrigés avec une meilleure infrastructure d'application et des banques de données centralisées, mais la persistance de session est requise par de nombreuses personnes.
Dans NGINX, l'ensemble des serveurs vers lesquels vous routez est appelé en amontet est configuré comme une liste énumérée d'adresses:
upstream backend { server backend1.example.com weight=5; server backend2.example.com; }
Ces amonts ont beaucoup d'options; ici, nous avons défini un poids, qui donnera la priorité à ce serveur plus souvent (particulièrement utile si vous avez des tailles différentes). Vous pouvez également définir les connexions maximales et divers délais d'expiration. Si vous utilisez NGINX Plus, vous pouvez également configurer des contrôles d’intégrité afin que les connexions ne soient pas acheminées vers des serveurs malsains.
La forme la plus élémentaire de persistance de session utilise un hachage IP. NGINX utilisera l'IP pour identifier les utilisateurs et s'assurera ensuite que ces utilisateurs ne changent pas de serveur en cours de session:
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; }
Le hachage IP est requis pour les applications basées sur des sockets et tout ce qui nécessite de la persistance. Si vous ne souhaitez pas utiliser l'adresse IP, vous pouvez personnaliser ce hachage:
upstream backend { hash $scheme$request_uri consistent; server backend1.example.com; server backend2.example.com; }
Si vous n'avez besoin d'aucune sorte de persistance de session, vous pouvez faire un peu plus intelligemment la sélection du round robin en sélectionnant le serveur qui a le moins de connexions:
upstream backend { least_conn; server backend1.example.com; server backend2.example.com; }
Ou, en fonction de celui qui répond actuellement le plus rapidement:
upstream backend { least_time (header | last_byte); server backend1.example.com; server backend2.example.com; }
NGINX Plus a quelques autres formes de persistance de session, mais le hachage IP fonctionnera pour la plupart des applications.
Procuration au backend
Une fois que vous avez configuré votre backend, vous pouvez lui envoyer des demandes à partir de vos blocs de localisation, en utilisant proxy_pass
avec un URI au backend.
server { listen 80; server_name example.com; location / { proxy_pass http://backend; } }
Bien sûr, si vous utilisez HTTPS, vous devrez envoyer la demande avec HTTPS:
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/ssl/certs/server.crt; ssl_certificate_key /etc/ssl/certs/server.key; ssl_client_certificate /etc/ssl/certs/ca.crt; location /{ proxy_pass https://backend; } }