簡體   English   中英

Apache 反向代理 Unix 套接字

[英]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 用戶)
  • 使用以下命令檢查在 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都設置正確

好的,我花了一段時間在我的一台舊服務器上找到解決方案。

當您遇到此 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM