Apache、PHP、Fedoraで実行されているNodejs、選択したドメインに応じてphpとnodejsの両方にルーティング

メビア

私はデジタルオーシャンドロップレットを使用しています(問題を解決するのに役立つ情報かもしれません)。

私の設定はこれです:

上記のアプリケーションはすべて、デフォルトの「インストール後」の状態です。

現在、PHPはポート80で実行されており、nodejsはポート3000で実行されています。したがって、次のように入力する必要があります。

  • mydomain.com PHP用
  • mydomain.com:3000 nodejsの場合

私がやりたいことはこれです:

入力するsomeDomainForPhp.com/と、phpのデフォルトの場所に移動します。/var/www/html/

入力するotherDomainforNode.com/と、ノードのデフォルトの場所に移動します。/root/

したがって、私が理解していることから、Apacheは、このタスクを実行するために、内部ポートの再ルーティングを行う必要があります。

私はそれを行う方法を説明するインターネット上の多くのガイドに従ってきましたが、それらは主題に関するいくつかの基本的な知識を持っている人々のためのものだと思います。私はこれに対して非常に新しく「グリーン」であり、それに苦労しています。

誰かが喜んで手伝ってくれるなら、私は以下の情報を使うことができます:

  • 編集するファイル
  • 彼らがいる場所
  • それらを編集する方法
  • 追加のモジュールをインストールする必要がある場合、それらの名前は何ですか

2015年8月3日編集

私はグーグルで次の方法を試しました:

<VirtualHost 109.74.199.47:80> # server ip address or *
    ServerAdmin [email protected] # any email address
    ServerName thatextramile.be # domain name
    ServerAlias www.thatextramile.be # any domain alias

    ProxyRequests off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location />
        ProxyPass http://localhost:3000/ 
        ProxyPassReverse http://localhost:3000/
    </Location>
</VirtualHost>

/etc/httpd/conf/httpd.conf一番下のこのファイルに入れました多くの人がこの方法は彼らのために働いたと報告しました、しかし私がそれを試みたならば、私は503 errorドメインにアクセスしている間に得ましただから私はこの503エラーをグーグルで検索しました、そして私は誰かが同様の問題を抱えているのを見つけました、そして彼は彼がLocation次の方法でタグを変更することによってそれを働かせたと主張しました

<Location /path/of/my/project> # for me it would be /root/
    ProxyPass http://localhost:3000/ 
    ProxyPassReverse http://localhost:3000/
</Location>

私がそれを試したとき、サーバーは仮想ホストディレクティブがまったくないように動作しました。ドメインにアクセスすることで、/var/www/html/index.phpApacheから通常のファイルが提供され、プロキシもポートも変更されませんでした。

また、ローカルホストは悪い方法だと読みましたが、そうあるべきですが127.0.0.1、これは何も変わりません。

デフォルトの設定は変更せず、httpdconfにvirtualhostディレクティブを追加しただけです。また、mod proxyなどの必要なすべてのモジュールが有効になっていることを確認し、fedora 20のドキュメントを検索してサーバーのステータスを確認しました。これらはデフォルトで含まれ、有効になっています。これは本当に奇妙に思えますが、一部の人にとっては上記の行を追加するだけで十分です。私にとっては、どれも機能しませんでした。503エラーに直面し、それを修正する方法がわからないか、プロキシをまったく使用していません。誰かがやって来て、困っている初心者の開発者を助けてくれることを願っています;)


2015年8月4日編集

調査を行っていたところchmod、phpとnodejsのルートの場所であるディレクトリに配置され設定に関連する問題が発生したことがわかりました。私にはあまり論理的ではないように見えましたが、とにかく試してみました。両方のアプリケーションに関連するすべてのディレクトリの「すべてを許可する」構成にchmodを変更しました(テスト目的で)。それはまったく役に立たなかった。

また、ポート3000へのプロキシルーティングのみが含まれている可能性があり、通常のphpを表示するためのルールを作成しなかった可能性があると誰かが主張したブログも読みました。チュートリアルでは、nodejs用に作成されたルールとは別に、次のものも含まれている必要があることが示されていました。

<VirtualHost 109.74.199.47:80> # server ip address or *
    ServerAdmin [email protected] # any email address
    ServerName thatextramile.be # domain name
    ServerAlias www.thatextramile.be # any domain alias
    DocumentRoot /var/www/html/
</VirtualHost>

したがって、最初のルールはnodejsのポート3000にルーティングすることであり、これはphpで機能します。問題は、このルールを実装したときに無限ループが発生し、サーバーがロードされないことです。したがって、nodejs用に準備されたドメインに入ると503エラーが発生し、php用にドメインにアクセスしようとすると502エラーが発生します。

読んだ後、私は問題がどこにあるのかを指摘できると思いますが、それでも正確な解決策に関するヘルプを使用することができます。

  • Linuxファイアウォールが80(この場合は3000)以外のポートをブロックしている可能性があり、ファイアウォールの問題にいくつかの例外を追加した後、解決される可能性があります
  • nodejsserver.jsスクリプトに欠陥がある可能性があります

これはテスト用のserver.jsファイルです。これは、nodeforeverモジュールを使用して無限に開始されます。

var express = require('express');
var app = express();

app.get('/', function (req, res) {
    res.send('Hello World!');
});

var server = app.listen(3000, function () {
    var host = server.address().address;
    var port = server.address().port;

    console.log('Example app listening at http://%s:%s', host, port);
});
user5191605

説明の最初のいくつかの言葉:

  1. <VirtualHost>ディレクティブを宣言する前に、を追加する必要がありますNameVirtualHost *代わりに、*参照しているドメイン/ IPを正確に定義できます。*もちろん動作しますが、安全性が低く、速度が遅いと考えられています。

  2. プロキシを渡すことができるようにするには、ディレクティブを定義する必要があり、定義に関する<Proxy>唯一の問題はAllow from allです。この構文はApache2.2用であり、 Apache 2.4を使用しているため、最新のドキュメントによると、代わりにこれを使用する必要がありますRequire all granted

  3. <Location>あなたの場合のタグは、最初に持っていたものと同じである必要がありますが、スラッシュは1つだけ<Location />です。その理由は、not追加の名前空間を介してアプリケーションにアクセスしているためです。ストレートドメイン名を入力してアプリケーションにアクセスしています。

  4. あなたがポートにアクセスPHPファイルにしたい場合80phpdomain.com、ポート上のサーバーをNode.jsの3000nodejsdomain.com、あなたがすべきnot2つの仮想ホストを作成します。入力した場合にnodejsdomain.comポート3000を開くものを1つだけ作成します。さらに多くのnode.jsサーバーまたは他のプラットフォームを使用する場合にのみ、2番目以降の仮想ホストが必要になります。あなたがそれを作成したという事実のために、あなたは無限ループに陥りました。

mainプロキシが仕事をしない理由理由は、デフォルトでオンにブロックされたポート3000ですSELinuxしたがって、最初にこのコマンドを実行しsemanage port -a -t http_port_t -p tcp 3000ます。sudo上記の構文の前にルートタイプとしてログインしていない場合)。

次に、仮想ホストディレクティブを使用します。

NameVirtualHost *
<VirtualHost *:80>
    ServerName nodejsdomain.com

    ProxyRequests off

    <Proxy *>
        Require all granted
    </Proxy>

    <Location />
        ProxyPass http://localhost:3000/
        ProxyPassReverse http://localhost:3000/
    </Location>

</VirtualHost>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ