SYSTEMD-SOCKET-PROXYD(8)

BEZEICHNUNG
systemd-socket-proxyd - Bidirektionaler Proxy zwischen lokalen Sockets und anderen (möglicherweise nichtlokalen) Sockets

ÜBERSICHT

systemd-socket-proxyd [OPTIONEN…] RECHNER:PORT

systemd-socket-proxyd [OPTIONEN…] UNIX-DOMAIN-SOCKET-PFAD

BESCHREIBUNG

systemd-socket-proxyd ist ein generischer, Socket-aktivierter weiterleitender Netzwerk-Socket-Proxy-Daemon für IPv4, IPv6 und UNIX-Datenstrom-Sockets. Er kann zum bidirektionalen Weiterleiten von Verkehr von einem lokalen Socket, bei dem auf Anfragen gewartet wird, an einen lokalen oder fernen Ziel-Socket verwandt werden.

Die Bereitstellung von Socket-Aktivierungsunterstützung für Dienste, die nativ keine Socket-Aktivierung unterstützen, ist ein Anwendungsfall dieses Werkzeugs. Im Auftrag des zu aktivierenden Dienstes erbt der Proxy das Socket von Systemd, akzeptiert jede Client-Verbindung, öffnet die Verbindung zu einem konfigurierten Server für jeden Client und leitet dann Daten bidirektional zwischen den beiden weiter.

Das Verhalten dieses Hilfswerkzeugs ist ähnlich socat(1). Der Hauptunterschied zu systemd-socket-proxyd besteht darin, dass die Socket-Aktivierung mit »Accept=no« unterstützt wird und dass ein ereignisgesteuertes Design verwandt wird, das besser mit der Anzahl der Verbindungen skaliert.

Beachten Sie, dass systemd-socket-proxyd keine Socket-Seitenkanalinformationen weiterleiten wird, d.h. es wird nicht SCM_RIGHTS, SCM_CREDENTIALS, SCM_SECURITY, SO_PEERCRED, SO_PEERPIDFD, SO_PEERSEC, SO_PEERGROUPS und ähnliche weiterleiten.

OPTIONEN

Die folgenden Optionen werden verstanden:

-h, --help
    Zeigt einen kurzen Hilfetext an und beendet das Programm.

--version
    Zeigt eine kurze Versionszeichenkette an und beendet das Programm.

--connections-max=, -c
    Setzt die maximale Anzahl an gleichzeitigen Verbindungen, standardmäßig 256. Falls die Begrenzung der gleichzeitigen Verbindungen erreicht ist, werden weitere Verbindungen abgelehnt.

    Hinzugefügt in Version 233.

--exit-idle-time=
    Setzt die Zeit vor dem Beenden, wenn es keine Verbindungen gibt, standardmäßig infinity. Akzeptiert einen Wert ohne Einheiten in Sekunden oder eine Zeitdauer wie »5min 20s«.

    Hinzugefügt in Version 246.

--proxy-protocol=
    Uses the PROXY protocol[1] to communicate with the server. This allows an appropriately configured server to know the real client IP address. Takes the version of the PROXY protocol[1] used, and only supports "v1" for now. Default is not to use a PROXY protocol.

    Hinzugefügt in Version 261.

EXIT-STATUS

Bei Erfolg wird 0 zurückgegeben, anderenfalls ein Fehlercode ungleich Null.

BEISPIELE

  Einfaches Beispiel

Zwei Dienste mit einer Abhängigkeit und keiner Namensraumisolation verwenden.

Beispiel 1. proxy-to-nginx.socket

    [Socket]
    ListenStream=80

    [Install]
    WantedBy=sockets.target

Beispiel 2. proxy-to-nginx.service

    [Unit]
    Requires=nginx.service
    After=nginx.service
    Requires=proxy-to-nginx.socket
    After=proxy-to-nginx.socket

    [Service]
    Type=notify
    ExecStart=/usr/lib/systemd/systemd-socket-proxyd /run/nginx/socket
    PrivateTmp=yes
    PrivateNetwork=yes

Beispiel 3. nginx.conf

    […]
    server {
        listen       unix:/run/nginx/socket;
        […]

Beispiel 4. Aktivierung des Proxys

    # systemctl enable --now proxy-to-nginx.socket
    $ curl http://localhost:80/

Falls nginx.service StopWhenUnneeded= gesetzt hat, dann erlaubt die Übergabe von --exit-idle-time= an systemd-socket-proxyd beiden Diensten, während Leerlaufperioden anzuhalten.

  Namensraum-Beispiel

Ähnlich wie oben, führt aber den Socket-Proxy und den Hauptdienst im gleichen privaten Namensraum aus, wobei angenommen wird, dass nginx.service auch PrivateTmp= und PrivateNetwork= gesetzt hat.

Beispiel 5. proxy-to-nginx.socket

    [Socket]
    ListenStream=80

    [Install]
    WantedBy=sockets.target

Beispiel 6. proxy-to-nginx.service

    [Unit]
    Requires=nginx.service
    After=nginx.service
    Requires=proxy-to-nginx.socket
    After=proxy-to-nginx.socket
    JoinsNamespaceOf=nginx.service

    [Service]
    Type=notify
    ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:8080
    PrivateTmp=yes
    PrivateNetwork=yes

Beispiel 7. nginx.conf

    […]
    server {
        listen       8080;
        […]

Beispiel 8. Aktivierung des Proxys

    # systemctl enable --now proxy-to-nginx.socket
    $ curl http://localhost:80/

  PROXY protocol example with nginx

systemd-socket-proxyd and nginx using the PROXY protocol

Beispiel 9. proxy-to-nginx.socket

    [Socket]
    ListenStream=80

    [Install]
    WantedBy=sockets.target

Beispiel 10. proxy-to-nginx.service

    [Unit]
    Requires=nginx.service
    After=nginx.service
    Requires=proxy-to-nginx.socket
    After=proxy-to-nginx.socket

    [Service]
    Type=notify
    ExecStart=/usr/lib/systemd/systemd-socket-proxyd --proxy-protocol=v1 /run/nginx/socket
    PrivateTmp=yes
    PrivateNetwork=yes

Beispiel 11. nginx.conf

    […]
    server {
        listen         unix:/run/nginx/socket proxy_protocol;
        real_ip_header proxy_protocol;
        […]

Beispiel 12. Aktivieren des Proxys

    # systemctl enable --now proxy-to-nginx.socket
    $ curl http://localhost:80/

SIEHE AUCH

systemd(1), systemd.socket(5), systemd.service(5), systemctl(1), socat(1), nginx(1), curl(1), PROXY protocol specification[1], nginx: Accepting the PROXY Protocol[2]

ANMERKUNGEN

1.  PROXY-Protokoll
    https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt

2.  nginx: Accepting the PROXY Protocol
    https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer (debian-l10n-german@lists.debian.org).