[英]Apache Reverse Proxy Unix Socket
我正在嘗試使用 unix 套接字在 Apache 2.4.7 中設置 ProxyPass 到用於 rails 應用程序的 puma 服務器。 我不斷收到 500 內部錯誤。 當我檢查 apache 日志時,我收到此消息:
沒有對 URL / 有效的協議處理程序。 如果您使用的是 mod_proxy 的 DSO 版本,請確保使用 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
任何幫助表示贊賞,如果您需要更多信息,請告訴我。
我不確定哪個代理處理程序應該處理套接字,所以你可以嘗試加載它們,然后看看哪個為你做這項工作:
https://httpd.apache.org/docs/trunk/mod/mod_proxy.html
請注意,您還可以使用 SetHandler 指定要處理連接的模塊
通常,通過 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
都設置正確好的,我花了一段時間在我的一台舊服務器上找到解決方案。
當您遇到此 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.