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
)
确保ProxyPassReverse
和ProxyPass
设置正确
【讨论】:
【参考方案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 套接字的主要内容,如果未能解决你的问题,请参考以下文章