同じサーバー上のポート 80 上の Node.js と PHP

同じサーバー上のポート 80 上の Node.js と PHP

私の Linux サーバーのポート 8080 で node.js サイトが稼働しています。また、同じサーバーで、ポート 80 で PHP サイト (bugzilla) が稼働しています。現在の構成は次のとおりです。

両方のサイトを次のようにポート 80 で実行します。

それは可能ですか?

答え1

まず、マシン上の両方のサービスを無効にします。次に、ポートを通常とは異なるものに変更して再起動します。例:

  • PHPアプリケーション6821

  • NodeJSアプリケーション6822

必ず で開いてください127.0.0.1。ネットワーク インターフェイスで開かないでください。


nginx最もよく使用される としてインストールしますReverse Proxy。ディストリビューションに応じて、次のいずれかのコマンドでインストールできます。

Debian ベースのディストリビューションの場合:

$ sudo apt install nginx

Arch ベースのディストリビューションの場合:

$ sudo pacman -S nginx

nginx.conf完全にディストリビューションに依存しますが、このパッケージには独自のファイル階層がある可能性があります。そのため、メインの設定ファイルとして提供します。元の設定ファイルを任意の名前でコピーすることを忘れないでください。 nginx.conf.origin

$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.origin

次に、 を開き/etc/nginx/nginx.conf、既存の設定を削除して、その中に次の設定をコピーします。

user nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    keepalive_timeout  15;

    server {
        listen       80 default_server;
        server_name  example.com; 

        location /mynodejs {
            proxy_pass http://127.0.0.1:6822;
        }

        location /bugzilla {
            proxy_pass http://127.0.0.1:6821;
        }
    }
}

注意: この設定ファイルは私が自分の考えで書いたものですので、nginx を実行しようとするとエラーが発生する可能性が高いことをご承知おきください。その場合は、ここにコメントを書いてください。テストしてみます。

さて、nginx を再起動するだけです! 必要なものが得られます。

答え2

PHP アプリは変更されずにそのまま残すことができます。

Apacheをウェブサーバーとして使用する場合は、プロキシモジュールを有効にする必要があります。たとえばUbuntuの場合

a2enmod proxy
a2enmod proxy_http

ProxyPassそして、および の行を使用して仮想ホストを変更しますProxyPassReverse

<VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot "/var/www/www.example.com/htdocs"
        #nodejs app
        ProxyPass /mynodejs http://127.0.0.1:8080/
        ProxyPassReverse /mynodejs http://127.0.0.1:8080/
<Directory "/var/www/www.example.com/htdocs"> 
        Options -Indexes +FollowSymLinks
        AllowOverride All 
        Order allow,deny 
        Allow from all 
</Directory>
        ErrorLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/error_log" 
        CustomLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/access_log" combined 
</VirtualHost>

Apacheを再起動します/etc/init.d/apache2 restart

関連情報