[英]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
我同時啟用了proxy
和proxy_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}/
加載了模塊proxy
和proxy_uwsgi
。
重要的是不要將您的套接字放在/tmp
中(出於安全原因,我認為 systemd 會阻止 apache 進程直接訪問它)。
另外,請注意文件權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.