systemd-socket-proxyd 中文手册

译者:金步国


版权声明

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。


手册索引 · 指令索引systemd-241

名称

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=yesPrivateNetwork=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)