我正在尝试使用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
感谢您的任何帮助,如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
一般来说,通过 unix 套接字检查 http 服务器应用程序的反向代理有一定的意义:
apachectl -M
命令检查 Apache 是否已经加载了所需的模块(代理和 http_proxy)www-data
用户(默认 apache 用户)可以访问套接字路径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
)ProxyPassReverse
和 ProxyPass
答案 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