web-dev-qa-db-ja.com

Apache + Node.js + mod_proxy。 1つのドメインを:3000に、別のドメインを:80にルーティングする方法

問題:異なるドメインの同じサーバーでノードアプリケーションとphpアプリケーションをホストする必要があります。

example.comは通常どおりポート80を使用する必要がありますが、node-example.comはポート3000にルーティングする必要があります。

ポート80から3000へのすべてのトラフィックのルーティングは、mod_proxyを使用して正常に機能します。

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName  node-example.com
    ServerAlias www.node-example.com

    ProxyRequests off

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

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

</VirtualHost>

ただし、これにより、example.comとnode-example.comの両方がlocalhost:3000を指し、Node-appが実行されます。

Example.comがポート80を指すようにする方法はありますか?

Example.com/old-adminがポート80を指すことも問題ありません。

26
olke

2つの<VirtualHost *:80>タグを作成するだけです

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName www.node-example.com

    ProxyRequests off

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

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

</VirtualHost>
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName  node-example.com    

    ProxyRequests off

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

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

</VirtualHost>

それはそのように動作するはずです;)

または、localhost:80アプリがノードではない場合、そのターゲットの<Proxy *>および<Location />タグを削除し、DocumentRoot /var/www/node-example.com-index.htmlへの静的パスに置き換えることができます

34
drinchev

2つのドメインに対して2つの異なる仮想ホストconfファイルを作成することをお勧めします。これにより、スケーリングが異なる場合に別のサーバーに移動するだけでなく、それらを個別に構成できます。

デフォルトのインストール場所のApache2の場合、

/etc/Apache2/sites-available/www.example1.com.confにファイルを作成します

<VirtualHost *:80>
        ServerName  www.example1.com
        ServerAdmin [email protected]

        <Directory /home/example1/api/admin/docs>
                Options -Indexes +FollowSymLinks
                AllowOverride All
                Require all granted
                DirectoryIndex index.html
        </Directory>

        <Directory /home/example1/api/mobile/docs>
                Options -Indexes +FollowSymLinks
                AllowOverride All
                Require all granted
                DirectoryIndex index.html
        </Directory>

        ProxyRequests Off
        ProxyPreserveHost On

        ProxyPass /api/         "http://localhost:30007/"
        ProxyPassReverse /      "http://localhost:30007/"

        ErrorLog ${Apache_LOG_DIR}/example1/example1.log
        CustomLog ${Apache_LOG_DIR}/example1/example1.log combined

</VirtualHost>

別のファイルを作成するwww.example2.com.conf in sites-availableそして、example1をexample2に置き換えて上記の構成をコピーします。

サブドメインの場合、ファイル名と内部構成のwwwをサブドメインに置き換えます(例:api)。

Confファイルを作成したら、コマンドで有効にする必要があります

a2ensite www.example1.com.conf

そして、コマンドでApache2をリロードします

Sudo systemctl reload Apache2

ディレクトリがあることを確認してくださいexample1およびexample2 Apacheをリロードする前に作成されたApache_LOG_DIRに作成されます。

それでおしまい。ドメインレジストラーまたはCDNのサーバーIPアドレスを使用して、ドメインのAレコードを構成します。使用しているものは何でも使用できます。

1
Amruta-Pani