本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
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
也能支持基于套接字的启动,
并且这种基于事件驱动的机制,
在连接数很大的时候弹性更佳。
在没有名字空间的情况下, 按照依赖关系使用两个服务。
例 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
与前面的例子类似,不同之处在于
将套接字代理与主服务运行在同一个私有名字空间内,并且假定在
nginx.service
中已经设置了
PrivateTmp=yes
与
PrivateNetwork=yes
。
例 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