2016-05-29 12 views
1

私はポート80でリッスンしているApache Webサーバーを持っています。Apacheの場合、Zendフレームワークに基づくPHP/MySQLシステムです。また、ポート3000でリッスンするノードサーバーもあります。Apache、Node、.htaccess

クライアントが要求を送信すると、常にポート80で要求が送信されるため、最初はApacheによって処理されます。

if content-type is "application/json" then 
    use apache web server 
else if content-type is "application/zend" then 
    use apache web server 
else 
    use node server 

ここでcontent-typeはリクエストヘッダーで送信されます。コンテンツタイプ "application/zend"は、このタイプの特定の要求に対して、ノードサーバーを使用したくないというカスタムコンテンツタイプです(何らかの理由でこれが必要です)。

私は

ProxyPreserveHost on 
ProxyPass/http://localhost:3000/ 
ProxyPassReverse/http://localhost:3000/ 

でのhttpd-vhosts.confを変更しようとしました。しかし、すべてが(ポート3000でリッスン)ノードサーバによって処理されるべきではないとして、それは十分ではない、もちろんです。したがって、いくつかのルールを追加する必要があります。しかし、私はどこで/どのように不明です。私も.htaccessファイルを変更しようとしましたが、どちらの方法もわかりません。

助けがあれば助かります。ありがとう!

+0

Apacheのバージョンは –

+0

です。こんにちは!バージョンはApache/2.4.18 –

答えて

1

これは(.confファイルに)動作するはずです:

RewriteEngine on 
RewriteCond %{HTTP:Content-type} !=application/json 
RewriteCond %{HTTP:Content-type} !=application/zend 
RewriteRule^http://%{HTTP_HOST}:3000%{REQUEST_URI} [P] 

が、これはパフォーマンスの低下を運ぶかもしれないことに注意してください、そして、あなたの要求のほとんどは、ノード上で終わるならば、我々は、おそらくより良いソリューションを検索する必要があります。

+0

ありがとうございます!ワーキング。私はちょうど最後の行をRewriteRule^http://%{HTTP_HOST}:3000%{REQUEST_URI} [P](%{REQUEST_URI}の前にスラッシュなし)に変更しなければなりませんでした。私は公演に関するあなたのコメントを考慮に入れます。 –

+0

実際、%{REQUEST_URI}にはすでにスラッシュ –