Maison > Opération et maintenance > Nginx > le corps du texte

Comment configurer le port de transfert de socket de Nginx

PHPz
Libérer: 2023-05-24 11:37:06
avant
2556 Les gens l'ont consulté

Scénarios courants de Nginx pour le transfert des ports socket : les applications d'apprentissage en ligne ajoutent une fonction de salle de discussion en plus des fonctions régulières. Le backend sélectionne swoole comme fournisseur de services en même temps, si le frontend ne souhaite pas se connecter directement au service. ip:port, nginx doit être utilisé pour le transfert.

Dans des circonstances normales, nous pouvons établir directement un lien de socket sur la page utilisateur, mais une telle opération exposera le port et entraînera certains risques de sécurité. L'utilisation de nginx pour le transfert peut masquer le port. Un problème supplémentaire est que certains paramètres d'en-tête doivent également être transmis au fournisseur de services de socket pendant le processus de transfert. D'autres n'ont besoin que de nginx pour gérer la conversion du protocole standard vers websocket.

Parmi eux, "upgrade" est un en-tête saut par saut et ne peut pas être transmis du client au serveur proxy via le proxy de transfert, le client peut utiliser la méthode de connexion pour éviter ce problème. Cependant, cela ne fonctionne pas avec les proxys inverses puisque le client n'a connaissance d'aucun serveur proxy et nécessite une gestion spéciale sur le serveur proxy. Dans le même temps, l'en-tête saut par saut contenant « mise à niveau » et « connexion » ne peut pas être transmis, vous devez donc apporter ces deux paramètres lors de la conversion en websocket : Par exemple :

location /chat/ {
  proxy_pass http://backend;
  proxy_http_version 1.1;
  proxy_set_header upgrade $http_upgrade;
  proxy_set_header connection "upgrade";
}
Copier après la connexion

Avancé : transférer la « connexion » champ d'en-tête vers le serveur proxy La valeur dépend de la valeur du champ "upgrade" de l'en-tête de la requête client. Par exemple :

http {
  map $http_upgrade $connection_upgrade {
    default upgrade;
    ''   close;
  }

  server {
    ...

    location /chat/ {
      proxy_pass http://backend;
      proxy_http_version 1.1;
      proxy_set_header upgrade $http_upgrade;
      proxy_set_header connection $connection_upgrade;
    }
  }
Copier après la connexion

Remarque : http://backend dans l'exemple est un groupe de serveurs à charge équilibrée. S'il n'y a qu'un seul serveur, il peut être écrit sous la forme proxy_pass http://127.0.0.1:9501 ; ce. De plus, par défaut, les liens qui ne fournissent aucune donnée dans les 60 secondes seront fermés, ce qui peut être étendu à l'aide de la directive proxy_read_timeout. Le serveur proxy peut également être configuré pour envoyer périodiquement des trames ping afin de réinitialiser le délai d'attente et de vérifier si le lien est disponible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal