Apache 反向代理 Unix 套接字

Posted

技术标签:

【中文标题】Apache 反向代理 Unix 套接字【英文标题】:Apache Reverse Proxy Unix Socket 【发布时间】:2016-07-31 08:38:06 【问题描述】:

我正在尝试在 Apache 2.4.7 中设置 ProxyPass,使用 unix 套接字连接到 puma 服务器以用于 Rails 应用程序。我不断收到 500 内部错误。当我检查 apache 日志时,我收到此消息:

没有对 URL / 有效的协议处理程序。如果您使用的是 DSO 版本的 mod_proxy,请确保代理子模块包含在使用 LoadModule 的配置中。

这是我在 apache 中的代理配置

ProxyPass / unix:///home/rails/rp/tmp/sockets/puma.sock|http://127.0.0.1/
ProxyPassReverse / unix:///home/rails/rp/tmp/sockets/puma.sock|http://127.0.0.1/

如果我像这样在常规 tcp 端口上设置代理通行证,它可以正常工作。

ProxyPass / http://127.0.0.1:9292
ProxyPassReverse / http://127.0.0.1:9292

感谢任何帮助,如果您需要更多信息,请告诉我。

【问题讨论】:

您解决了这个问题吗?我被困在同样的问题上 【参考方案1】:

一般来说,通过 unix 套接字检查 http 服务器应用程序的反向代理是有一定意义的:

检查 Apache 是否已经使用 apachectl -M 命令加载了所需的模块(代理和 http_proxy) 确保www-data用户(它是默认的apache用户)可以访问套接字路径 使用以下命令检查在 unix 套接字上运行的应用程序的正确性:curl --unix-socket /var/www/app/socket/path -XGET http:/someMethod 检查ProxyPreserveHost On 是否已存在于您的虚拟主机文件中,并正确设置套接字地址(如unix:/var/www/path/to/your/socket)和正确的管道标记路径(如|http://127.0.0.1/what/ever) 确保ProxyPassReverseProxyPass 设置正确

【讨论】:

【参考方案2】:

好的,我花了一段时间在我的一台旧服务器上找到解决方案。

当您遇到此 mod_proxy 错误时,这是​​因为 Apache 无法识别要在 unix 套接字后面使用的代理模块。

假设您显然已经拥有: a2enmod proxy a2enmod proxy_http service apache2 restart

很有可能您位于 /etc/apache2/mods-available/proxy_http.load 的 apache 配置文件是空的

将这些行添加到此文件中:

# Depends: proxy
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

那么 service apache2 restart

【讨论】:

【参考方案3】:

我不确定哪个代理处理程序应该处理套接字,因此您可以尝试全部加载它们,然后查看哪个代理处理程序为您完成这项工作:

https://httpd.apache.org/docs/trunk/mod/mod_proxy.html

请注意,您还可以使用 SetHandler 指定要处理连接的模块

【讨论】:

以上是关于Apache 反向代理 Unix 套接字的主要内容,如果未能解决你的问题,请参考以下文章

APACHE 反向代理中的 Web 套接字

squid正向代理反向代理

如何开启apache虚拟目录反向代理

apache与tomcat 反向代理

怎么配置反向代理 apache

宝塔 apache 反向代理配置wss服务