Ich möchte nginx verwenden, um einen gesamten Bereich (9000-9999) an denselben Port an einer anderen IP-Adresse zu übertragen. Kann Nginx automatisch an tausend Ports binden? Kann ich dies tun, ohne 4000 Zeilen Nginx-Konfiguration zu schreiben?
Sie können dies mit der integrierten Variablen server_port tun :
proxy_pass http://backend-host-name:$server_port;
Dadurch würde jeder Port, auf dem die Anforderung eingegangen ist, an denselben Back-End-Port weitergeleitet.
Sie benötigen also keine 1000 proxy_pass-Anweisungen. Möglicherweise haben Sie jedoch ein Problem mit der Listen- Direktive. Es werden keine Ports akzeptiert, daher benötigen Sie 1000 Zeilen des Formulars:
listen 9000;
listen 9001;
listen 9002;
Diese Liste kann einfach mit einer Tabelle erstellt werden. Sie müssen wahrscheinlich auch die Anzahl der von nginx zugelassenen Dateihandles anpassen, um diese Anzahl von Sockets zu verarbeiten. Nginx kann dies, die Grenzen können auf der Betriebssystemebene liegen. Sehen Sie hier und hier .
Ich werde jedoch sagen, dass dies ein problematisches Design zu sein scheint. Warum brauchen Sie 1000 Ports? Wäre es nicht sinnvoller, Hostnamen oder einen Teil der URL zur Unterscheidung von Anforderungen zu verwenden? Es wäre weitaus skalierbarer - es werden keine 2000 Sockets als Basis benötigt.
Folgendes habe ich stattdessen getan:
Auf diese Weise können Sie einfach eine Verbindung zu http://port9034.example.com herstellen .
quelle
Seit NGINX Version 1.15.10
listen
akzeptiert die Direktive Portbereiche .Aus der Dokumentation :
Also mit
sollte den Trick machen.
Es ist wichtig zu beachten, dass die Anzahl der Worker-Verbindungen entsprechend angepasst werden muss, da sonst NGINX einen Fehler ausgibt:
quelle