我正在构建一个设置,其中主机运行一堆 Docker 容器以测试不同的代码分支,并且我想访问容器中正在运行的网络服务器。
所有容器都在 host
上运行.每个容器通过主机上的 unix 套接字为 Web 应用程序提供服务,例如/var/sockets/<socket_name>
.
我想要的是 host
上的 apache根据 url 代理到容器,以便当我 GET https://<host>.com/<socket_name>/my_url
, apache 代理到 <socket_name>
请求:GET https://<host>.com/my_url
.也就是说,它识别 url 中的套接字名称,重写 url 并将其发送到该套接字。
这可能吗?我仍在阅读文档,但似乎找不到任何提示
最佳答案
基于网络上的各种文档,这个想法是包含 mod_proxy
和 mod_rewrite
分两步处理,即对URL进行处理,提取socket名称,去掉那部分重写,根据新的(缩短的)URL和socket名称进行代理。
这是它的样子:
RewriteEngine On
RewriteRule /(.*)/(.*) http://%{HTTP_HOST}/$2 [P]
ProxyPass / unix:/var/sockets/$1.sock|http://%{HTTP_HOST}/
ProxyPassReverse / unix:/var/sockets/$1.sock|http://%{HTTP_HOST}/
我的提案基于
(.*)
应提取感兴趣的两个参数的表达式。然后我们重写 URL,并通过 P
我们表示将结果传递给代理的标志。稍后我们指定两个相同的 ProxyPass
和 ProxyPassReverse
并指定 Unix 套接字路径,管道 |
分隔符和主机基地址。我希望这可以奏效,或者至少给你一些我们应该寻找什么的草图。
关于Apache:代理到 URL 中命名的 unix 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652073/