Apacheプロキシ:有効なプロトコルハンドラはありませんでした


190

サブディレクトリを別のサーバーにプロキシしようとしています。私のhttpd.conf:

RewriteEngine On
ProxyPreserveHost On
RewriteRule .*subdir/ https://anotherserver/subdir/ [P]

問題は、Apacheが常にこれをログに記録することです。

AH01144: No protocol handler was valid for the URL /subdir/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer: http://localhost/

インターネットを検索した後、私はこれらのモジュールをアクティブにしました:

LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so

(私はそれらのすべてが必要ではないことを知っていますが、私はそれらを欠落していないことを確認するためにそれらをアクティブ化しました)

ただし、このエラーは引き続き表示され、クライアントはHTTP 500を取得します。

どうすれば修正できますか?


プロキシ要求にはHTTPSハンドラが必要なようです。代わりにHTTPを試してください...
Deadooshka 2014年

9
私はあなたが必要mod_sslSSLProxyEngineしていると思いますProxyPass
Deadooshka 2014年

@Deadooshkaはい、これは機能しています。これを回答として投稿すれば、私はそれを受け入れることができます
das_j

回答:


418

これは、mod_proxy_http有効にしていない場合に発生します

sudo a2enmod proxy_http

httpsベースのロードバランサーを機能させるには、以下を有効にする必要がありました。

sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http

23
私のユースケースでは、「sudo a2enmod proxy_wstunnel」も実行する必要がありました。
JimJty、2015

8
私にとってはそうだったLoadModule ssl_module modules/mod_ssl.so。私も使用しなければなりませんでしたSSLProxyEngine on
クロエ

1
私も有効にする必要がありましたmod_slotmem_shm
SiggyF 2017年

2
私はWAMPで、上記のモジュールをメニューからインストールし、LoadModule slotmem_shm_module modules/mod_slotmem_shm.sohttpd.confでコメントを
外す必要がありました

1
私は必要でしたsudo a2enmod proxy_connect、それはCONNECTを使用してhttpsをトンネルすることです
Raul Nohea Goodness

22

Apache2.4 + php5-fpmインストールを機能させるには、次のApacheモジュールをアクティブ化する必要がありました。

sudo a2enmod proxy
sudo a2enmod proxy_fcgi

の必要はありません。proxy_httpこれにより、すべての.phpファイルがphp5-fpmに直接送信されます。

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost"
</FilesMatch>

はい、fcgiにはこれは当てはまりますが、HTTPプロキシがありました。:)
das_j 2015年

10

私の場合、proxy_ajpモジュールが必要でした。

a2enmod proxy proxy_http proxy_ajp 

8

これは私のApache / 2.4.18(Ubuntu)セットアップで私に起こっていました。私の場合、私が見たエラーは:

... AH01144: No protocol handler was valid for the URL /~socket.io/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

これに関連する構成は次のとおりです。

  ProxyPass /~socket.io/ ws://127.0.0.1:8090/~socket.io/
  ProxyPassReverse /~socket.io/ ws://127.0.0.1:8090/~socket.io/

No protocol handler was valid for the URL /~socket.io/」は、Apacheが「ws://127.0.0.1:8090/~socket.io/」に送信されるリクエストを処理できなかったことを意味しました

私がいたproxy_httpロードされた、だけでなく、必要に応じてproxy_wstunnel。それが有効になると、すべてが良かった。


6

将来の参照のために明確にするために、上記のいくつかの回答で示唆されているように、a2enmodはDebian / Ubuntu用です。Red Hatはこれを使用してApacheモジュールを有効にしません。代わりに、httpd.confのLoadModuleステートメントを使用します。

詳細:https : //serverfault.com/questions/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

解決策/正解はOPのコメントにあります。

ProxyPassを使用したmod_sslおよびSSLProxyEngineが必要だと思います– Deadooshka '29年5月29日11:35

@Deadooshkaはい、これは機能しています。これを回答として投稿すれば、私はそれを受け入れることができます– das_j May 29 '14 at 12:04


4

異なる理由で同じエラーメッセージが表示されたため、ここに回答を投稿しています。

このエラーメッセージは、たとえば、プロトコルAのソースからプロトコルBのターゲットにリクエストをプロキシするためにApache httpdを使用している場合に発生する可能性があります。

これが私の状況の例です:

AH01144:URL / sockjs-node / info(スキーム 'ws')に対して有効なプロトコルハンドラーはありませんでした。

上記の場合、何が起こっていたかは単に次のとおりです。パス/ sockjs-nodeに基づいてノードプロキシにwebsocketリクエストをプロキシするmodプロキシを有効にしました。

問題は、ノードがパス/ sockjs-nodeをwebsocketリクエストに排他的に使用しないことです。また、WebSocketに関する情報を配信するRESTエントリポイントをホストするためにこのパスを使用します。

この方法で、アプリケーションがhttp:// localhost:7001 / sockjs-node / infoを開こうとすると、Apache httpdはHTTPプロトコルからWebscoketエンドポイント呼び出しに残りの呼び出しをルーティングしようとします。ノードはこれを受け入れませんでした。

これにより、上記の例外が発生します。

したがって、適切なモジュールを有効にしても、誤った転送を行おうとすると、ターゲットサーバーで使用しようとしたプロトコルが無効であることを通知するapache httpdで終了することに注意してください。


おそらくproxy_wstunnelでした。受け入れられた回答の最初のコメントを参照してください。
Lerk


0

私にとって、上記のすべての回答はxamppで有効になっていますが、まだ機能しません。以下のモジュールを有効にすると、仮想ホストが再び機能するようになりました

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.