ポート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をWebサーバーとして使用する場合は、プロキシモジュールを有効にする必要があります。 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

関連情報