systemd-socket-proxyd 中文手册
名称
systemd-socket-proxyd — 在两个套接字之间执行双向代理
大纲
systemd-socket-proxyd
[OPTIONS
...] HOST
:PORT
systemd-socket-proxyd
[OPTIONS
...] UNIX-DOMAIN-SOCKET-PATH
描述
systemd-socket-proxyd是一个基于套接字启动的通用套接字转发守护进程,适用于 IPv4, IPv6, UNIX 三种不同的套接字。它可以在一个本地监听套接字与另一个套接字(本地或远程)之间双向转发流量。
此工具的一个用途是为原本不支持基于套接字启动机制的服务提供基于套接字启动的能力。为了达到这个目的,此工具从 systemd 继承套接字,接受客户端连接,并在客户端与服务端之间充当连接代理,双向转发流量。
该工具的行为与socat(1) 类似。不同之处在于即使在 "Accept=no
" 的情况下,systemd-socket-proxyd也能支持基于套接字的启动,并且这种基于事件驱动的机制,在连接数很大的时候弹性更佳。
选项
能够识别的命令行选项如下:
-h
,--help
显示简短的帮助信息并退出。
--version
显示简短的版本信息并退出。
--connections-max=
,-c
设置最大并发连接数,默认值是 256 。超出限制的连接将会被拒绝。
退出状态
返回值为 0 表示成功,非零返回值表示失败代码。
例子
简单例子
在没有名字空间的情况下,按照依赖关系使用两个服务。
例 1. proxy-to-nginx.socket
[Socket] ListenStream=80 [Install] WantedBy=sockets.target
例 2. proxy-to-nginx.service
[Unit] Requires=nginx.service After=nginx.service Requires=proxy-to-nginx.socket After=proxy-to-nginx.socket [Service] ExecStart=/usr/lib/systemd/systemd-socket-proxyd /run/nginx/socket PrivateTmp=yes PrivateNetwork=yes
例 3. nginx.conf
[…] server {listen unix:/run/nginx/socket;[…]
例 4. 开启代理
# systemctl enable --now proxy-to-nginx.socket $ curl http://localhost:80/
名字空间中的例子
与前面的例子类似,不同之处在于将套接字代理与主服务运行在同一个私有名字空间内,并且假定在nginx.service
中已经设置了PrivateTmp=yes
与PrivateNetwork=yes
。
例 5. proxy-to-nginx.socket
[Socket] ListenStream=80 [Install] WantedBy=sockets.target
例 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] ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:8080 PrivateTmp=yes PrivateNetwork=yes
例 7. nginx.conf
[…] server {listen 8080;[…]
例 8. 开启代理
# systemctl enable --now proxy-to-nginx.socket $ curl http://localhost:80/
参见
systemd(1),systemd.socket(5),systemd.service(5),systemctl(1),socat(1),nginx(1),curl(1)