web-dev-qa-db-fra.com

Obtenir une demande punkée via Nginx

Première partie de l'arrière-plan: nous avons un périphérique intégré qui télécharge de nombreux petits événements sur un serveur Web. Le codage chunté est utilisé pour poster ces informations. Chaque événement est envoyé comme un morceau séparé, de sorte que le serveur Web (nœud.js) peut réagir immédiatement aux événements. Tout cela fonctionne comme un charme.

Désactiver les serveurs et exécuter Netcat sur le serveur indique ce que l'appareil envoie:

Sudo nc -l 8080
POST /embedded_endpoint/ HTTP/1.1
Host: url.com
User-Agent: spot/33-dirty
Transfer-Encoding: chunked
Accept: text/x-events
Content-Type: text/x-events
Cache-Control: no-cache

120
{"some","json message"}
232
{"other","json event"}
232
{"and a lot more","up to 150 messages per second!"}
0

Maintenant, j'ai installé Nginx sur mon serveur WebServer (version 1.6.0). À la fin, je veux que cela gère SSL et je souhaite gérer la vitesse de la circulation Web normale.

Si j'active maintenant nginx avec ce serveur config:

server {
  listen 8080;

  location / {
    proxy_http_version 1.1;
    expires off;
    proxy_buffering off;
    chunked_transfer_encoding on;
    proxy_pass http://localhost:5000;
  }
}

Ensuite, je reçois ceci:

Sudo nc -l 8080
POST /embedded_endpoint/ HTTP/1.1
Host: localhost:5000
Connection: close
Content-Length: 2415
User-Agent: spot/33-dirty
Accept: text/x-events
Content-Type: text/x-events
Cache-Control: no-cache

{"some","json message"}
{"other","json event"}
{"and a lot more","up to 150 messages per second!"}

Le problème est que ceci est tamponné, les demandes sont maintenant envoyées toutes les 2 secondes. Tous les messages sont inclus et peuvent être manipulés. Mais il y a un retard maintenant ...

Puis-je instruire Nginx de faire avancer mes morceaux directement? Cela ne doit arriver que pour ce noeud final intégré. Je comprends qu'il n'y a pas beaucoup d'usage dans Nginx lorsque vous désactivez ceci pour tous les points finaux.

6
Sunib

Pour moi, le remède était ces deux réglages:

Dans le fichier: /etc/nginx/nginx.conf

Ajouter:

proxy_max_temp_file_size 0;
proxy_buffering off;

Entre les lignes client_max_body_size 128M; et server_names_hash_bucket_size 256;:

http {

client_max_body_size 128M;
proxy_max_temp_file_size 0;
proxy_buffering off;
server_names_hash_bucket_size 256;
0
algenib