web-dev-qa-db-ja.com

Apacheサーバーでnodejsアプリケーションを実行する方法

Apacheサーバーのサブドメインを介してnodejsアプリケーションを実行したいと思います。 cpanelでプライマリドメインのサブドメインを作成しました。 3つ以上のサブドメインとすべてのサブドメインを持つ私のプロジェクトは、異なるnodejsアプリケーションを指しています。サブドメインは適切なフォルダーにリダイレクトしますが、ブラウザーでサブドメインを介してアプリケーションを実行すると、Apacheサーバーでノードアプリケーションが実行されません。プロジェクトのフォルダリストのみが表示されます。

以下のリンクを参考にしてください。

http://www.codingtricks.biz/run-nodejs-application-Apache/

Node.jsをApacheで実行していますか?

プロジェクトディレクトリ:

/ home/abc/public_html/node

私のプライマリドメインは:

https://www.example.com

cpanelでサブドメインを作成しました:

https://www.node.example.com

ブラウザでサブドメインにアクセスします:

node.example.com

アプリケーションをSoftLayerサーバーにデプロイしました。

以下はApache構成です:

ファイル:

/usr/local/Apache/conf/includes/abc_node.conf

構成:

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

   DocumentRoot /home/abc/public_html
   <Directory /home/abc/public_html/node>
      Options -Indexes +FollowSymLinks
      AllowOverride None
      Require all granted
   </Directory>

   ProxyRequests Off
   ProxyPreserveHost On
   ProxyVia Full
   <Proxy *>
      Require all granted
   </Proxy>

   <Location /node>
      ProxyPass http://132.159.25.21:8080
      ProxyPassReverse http://132.159.25.21:8080
   </Location>

   ErrorLog /home/abc/public_html/node/error.log

   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn

   CustomLog /home/abc/public_html/node/access.log combined

</VirtualHost>

コマンドの要約:

コマンド:

/ usr/local/Apache/bin/httpd -tD DUMP_VHOSTS

出力:

AH00548: NameVirtualHost has no effect and will be removed in the next release /usr/local/Apache/conf/httpd.conf:445
VirtualHost configuration:
127.0.0.1:80           wb01-development.example.com (/usr/local/Apache/conf/httpd.conf:504)
127.0.0.1:443          wb01-development.example.com (/usr/local/Apache/conf/httpd.conf:554)
132.159.25.21:443      is a NameVirtualHost
         default server example.com (/usr/local/Apache/conf/httpd.conf:368)
         port 443 namevhost example.com (/usr/local/Apache/conf/httpd.conf:368)
                 alias www.example.com
         port 443 namevhost wb01-development.example.com (/usr/local/Apache/conf/httpd.conf:554)
                 wild alias cpanel.*
                 wild alias whm.*
                 wild alias webmail.*
                 wild alias webdisk.*
                 wild alias cpcalendars.*
                 wild alias cpcontacts.*
132.159.25.21:80       is a NameVirtualHost
         default server 132.159.25.21 (/usr/local/Apache/conf/httpd.conf:274)
         port 80 namevhost 132.159.25.21 (/usr/local/Apache/conf/httpd.conf:274)
         port 80 namevhost example.com (/usr/local/Apache/conf/httpd.conf:297)
                 alias www.example.com
         port 80 namevhost node.example.com (/usr/local/Apache/conf/httpd.conf:446)
                 alias www.node.example.com
         port 80 namevhost wb01-development.example.com (/usr/local/Apache/conf/httpd.conf:504)
                 wild alias cpanel.*
                 wild alias whm.*
                 wild alias webmail.*
                 wild alias webdisk.*
                 wild alias cpcalendars.*
                 wild alias cpcontacts.*
         port 80 namevhost node.example.com (/usr/local/Apache/conf/includes/abc_node.conf:1)
                 alias www.node.example.com
*:*                    wb01-development.example.com (/usr/local/Apache/conf/httpd.conf:286)

コマンド

/ usr/local/Apache/bin/httpd -tD DUMP_MODULES

出力:

AH00548: NameVirtualHost has no effect and will be removed in the next release /usr/local/Apache/conf/httpd.conf:445
Loaded Modules:
    core_module (static)
    authn_file_module (static)
    authn_core_module (static)
    authz_Host_module (static)
    authz_groupfile_module (static)
    authz_user_module (static)
    authz_core_module (static)
    access_compat_module (static)
    auth_basic_module (static)
    socache_shmcb_module (static)
    socache_dbm_module (static)
    so_module (static)
    include_module (static)
    filter_module (static)
    deflate_module (static)
    http_module (static)
    mime_module (static)
    log_config_module (static)
    logio_module (static)
    env_module (static)
    expires_module (static)
    headers_module (static)
    unique_id_module (static)
    setenvif_module (static)
    version_module (static)
    proxy_module (static)
    proxy_connect_module (static)
    proxy_http_module (static)
    slotmem_shm_module (static)
    ssl_module (static)
    mpm_prefork_module (static)
    unixd_module (static)
    status_module (static)
    autoindex_module (static)
    asis_module (static)
    suexec_module (static)
    cgi_module (static)
    negotiation_module (static)
    dir_module (static)
    actions_module (static)
    userdir_module (static)
    alias_module (static)
    rewrite_module (static)
    bwlimited_module (shared)
    suphp_module (shared)
    security2_module (shared)

次のIPとポートを使用してノードjsアプリケーションを実行します

132.159.25.21:3030

nodejsアプリケーションでポートを次のように定義しました

var port = parseInt(process.env.PORT、3030)|| 8080;

このエラーを参照して:AH00548:NameVirtualHostは効果がなく、次のリリース/usr/local/Apache/conf/httpd.conf:445で削除される予定です。次のコードが記述されています。 NameVirtualHost 132.159.25.21:80

/usr/local/Apache/conf/httpd.confファイルの最後にmayvhostsファイルを配置しました。ファイルに「#編集しないでください。自動的に生成されます。変更が必要な場合は、ファイルを含めてください。」

この問題を解決するには、助けが必要でした。アプリケーションについてさらに知りたい場合はお知らせください。

6
Dipak chavda

構成は1ビットを除いて正しいように見えます。/nodeの場所のパスには、予期しない結果を招くことなく正しくリバースプロキシを行うために、ターゲットに一致するスラッシュが必要です。

わかりやすくするために、次のように定義します。

ProxyPass /node/ http://132.159.25.21:8080/
ProxyPassReverse /node/ http://132.159.25.21:8080/

ターゲットhttp://132.159.25.21:8080を使用したプロキシは正しくなく、常にhttp://132.159.25.21:8080/として定義する必要があるため、ソースは同じ方法でスラッシュと一致する必要があるため、/ node /が正しい方法です。

「NameVirtualHost」の警告について。そのディレクティブは2.2でのみ必要であるため、Apache HTTPDの2.4.Xバージョンでは不要になったことを示しています。2.4では、名前付き仮想ホストを「よりスマートに」検出できます。

補足:<Proxy *>は効果がないため、定義しても意味がありません。プロキシ*はフォワードプロキシに使用されますが、明らかにそれを望まず、ProxyRequestsをオフにしてそのような機能を無効にしています。だからそれも削除します。

---コメントによる拡張機能の回答:

ノードに到達するには、以下にアクセスする必要があります。

http://node.example.com/node/

または、それに移動する「デフォルト」リダイレクトを追加します。

RedirectMatch ^/$ /node/

-Indexesはサブディレクトリに対して定義されているため、node.example.comにアクセスしてインデックス(ファイルリスト)を取得しています。つまり、前のディレクトリではインデックスが有効になっているため、次のように定義します。

<Directory /home/abc/public_html>
    Options -Indexes +FollowSymLinks
    ....

Node /はディレクトリではなく、バックエンドの仮想パスであるため、この場合には適用されない/ home/abc/public_html/nodeを定義する代わりに、修正シェイクのためにディレクトリパスに含めないでください。

アクセス中にバックエンドにアクセスしたいだけの場合 http://node.example.com/ ProxyPass/node /の代わりにこれを使用してください:

ProxyPass / http://132.159.25.21:8080/
ProxyPassReverse / http://132.159.25.21:8080/
8
ezra-s