1

標準の PHP/Apache プラットフォーム上に既存の Web アプリケーションがあります。今、私が望むのは、チャット機能を追加することです。それを Websocket でリアルタイムにしたいと考えています。そのために、nodejs で socket.io を少し調べました。したがって、大きな PHP アプリを実行する Apache に加えて、チャットを実行する socket.io を含む nodejs を使用します。

しかし、私が本当に理解していないのは、nodejs チャットのコードでユーザーをどのように認識するのでしょうか? たとえば、Apache と nodejs を同じポートで実行することはできません。つまり8080、たとえばポートでチャットを実行します。この場合、ユーザーの Cookie を失います。つまり、ユーザーにログインを求める必要があります。チャットを使用したい場合は、この nodejs を利用したポートをもう一度使用しますか? ばかげているように見えますが、どの方法で行けばよいのかわかりません。

もちろん、コード全体を nodejs に移植することはできません。理想的には、Apache と nodejs を共存させたいと考えています。または、チャットが Web アプリでどのように機能するかを完全に誤解しています。

ヒントをいただければ幸いです。

4

1 に答える 1

0

ポート 3001 で PHP を使用して Apache を実行し、ポート 3002 で Node アプリを実行し、nginx をリバース プロキシとして構成して、両方をポート 80 で使用できるようにすることができます。たとえば、PHP アプリをルート/ディレクトリに、Node アプリを次の/chatようなnginx構成のディレクトリ:

server {
    listen 80;
    server_name example.com;
    location /chat {
        proxy_pass http://localhost:3002;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
    location / {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

SSL を使用すると、少し複雑になりますが、それほど複雑ではありません。

server {
    listen 443;
    server_name example.com;
    add_header Strict-Transport-Security "max-age=3600";
    ssl on;
    ssl_certificate /.../chained2.pem;
    ssl_certificate_key /.../domain.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
    ssl_session_cache shared:SSL:50m;
    ssl_prefer_server_ciphers on;

    location /chat {
        proxy_pass http://localhost:3002;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }

    location / {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }

}

PHP アプリと Node アプリは、異なるサーバー上で実行することもできます。nginx 構成でそれらのアドレスを使用するだけです。

詳細については、この回答とそのコメントを参照してください。

于 2016-12-24T22:13:18.243 に答える