当前位置: 首页 > 文档资料 > systemd 中文手册 >

systemd-socket-proxyd 中文手册

优质
小牛编辑
135浏览
2023-12-01

名称

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)