Apache反向代理Unix套接字

时间:2016-04-10 08:13:14

标签: ruby-on-rails apache sockets unix proxy

我正在尝试使用unix套接字将Apache 2.4.7中的ProxyPass设置为用于rails应用程序的puma服务器。我一直收到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

感谢您的任何帮助,如果您需要更多信息,请与我们联系。

3 个答案:

答案 0 :(得分:1)

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

  • 使用 apachectl -M 命令检查 Apache 是否已经加载了所需的模块(代理和 http_proxy)
  • 确保 www-data 用户(默认 apache 用户)可以访问套接字路径
  • 使用以下命令检查在 unix socket 上运行应用程序的正确性:
    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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

出现此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