Apache代理传递到Unix域套接字

6

我需要将指定端口的所有流量转发到Apache中的Unix域套接字:

sites-enabled/000-default.conf文件中,我已经定义了一个虚拟主机:

<VirtualHost *:8091>
    ProxyRequests Off
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    ProxyPass / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
    ProxyPassReverse / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
</VirtualHost>

ports.conf文件中,我有以下内容:
Listen 80
Listen 8091

我同时启用了proxyproxy_http模块:

krzysiek:/etc/apache2$ a2enmod proxy
Module proxy already enabled
krzysiek:/etc/apache2$ a2enmod proxy_http
Module proxy already enabled

我正在使用Apache 2.4.7,官方文档指出:

在2.4.7及更高版本中,可以通过使用一个目标前缀unix:/path/lis.sock|来支持Unix域套接字。

当我重新加载Apache时,我遇到了错误:

krzysiek:/etc/apache2$ sudo service apache2 restart
* Restarting web server apache2                                [fail] 
* The apache2 configtest failed.
AH00526: Syntax error on line 64 of /etc/apache2/sites-enabled/000-default.conf:
ProxyPass URL must be absolute!

我尝试修改:

ProxyPass / unix:/var/(...)

致:

ProxyPass / unix:///var/(...)

然后Apache正确重新加载,但转发不起作用,错误日志显示:

[proxy:warn] [pid 22436] [client 10.0.4.19:47662] AH01144: No protocol handler was valid for the URL /. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

您能告诉我我做错了什么吗?或者如何正确地将端口流量转发到Apache上的Unix套接字?


你是如何解决这个问题的?我也遇到了同样的问题。 - zaffargachal
1
很不幸,我没有成功 :/ 我需要将Python ASGI Daphne服务器绑定到Unix Socket,以便能够通过Apache提供静态文件。我无法配置Apache将流量转发到UDS,因此我将Daphne绑定到内部端口并将流量转发到该端口(没有UDS)。但是,在这种配置中,我也通过Daphne提供静态文件(而不是通过Apache),这不是我想要的 :/ 也许一些Apache极客将来会找到解决方案... - Krzysiek
2
尝试使用a2enmod proxy_wstunnelunix:///...。我的配置和你一样,它可以正常工作。 - mi0
1个回答

0

可能有点晚了,但是以下的Apache配置对我有效:

    ProxyRequests off
    Define SOCKET_NAME /path/to/my.sock
    ProxyPass        / unix:${SOCKET_NAME}|uwsgi://%{HTTP_HOST}/
    ProxyPassReverse / unix:${SOCKET_NAME}|uwsgi://%{HTTP_HOST}/

使用加载了proxyproxy_uwsgi模块的配置。

重要提示:不要将您的套接字放在/tmp目录下(我认为systemd出于安全原因阻止了Apache进程直接访问它)。
此外,请注意文件权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接