簡體   English   中英

Apache 代理傳遞到 unix 域套接字

[英]Apache proxy pass to unix domain socket

我需要將所有流量從指定端口轉發到 Apache 中的 Unix 域套接字:

sites-enabled/000-default.conf我定義了一個 VirtualHost:

<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 mods:

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 重新加載正確但轉發不起作用,error.log 說:

[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 套接字?

可能有點晚了,但以下 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 進程直接訪問它)。
另外,請注意文件權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM