PHP站点和NodeJS Websocket应用程序在同一个Nginx服务器/配置后面

Posted

技术标签:

【中文标题】PHP站点和NodeJS Websocket应用程序在同一个Nginx服务器/配置后面【英文标题】:PHP Site and NodeJS Websocket Application behind the same Nginx server/config 【发布时间】:2019-02-20 19:53:41 【问题描述】:

我有一个运行 nginx 并为 php 网站提供服务的开发服务器。 下面是正常工作的 nginx 配置。

cat /etc/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events 
        worker_connections 768;
        # multi_accept on;


http 

        client_max_body_size 100M;

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;


        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;


        gzip on;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

这非常适合为 PHP 站点提供服务;但是,我也希望 Nginx 运行基于 Node 的 websockets 服务器。

我需要对此 Nginx 配置进行哪些更改才能接收 websockets 流量?

【问题讨论】:

【参考方案1】:

我在以下位置创建了一个新文件:

vi /etc/nginx/sites-enabled/somesite.com

把它放进去:

map $http_upgrade $connection_upgrade 
    default upgrade;
    '' close;


upstream websocket 
    server localhost:3000;


server 
    listen       8080;
    server_name  somesite.com;

    access_log  /var/log/nginx/websocket.access.log;

    location / 
        proxy_pass http://websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    


这似乎行得通。

【讨论】:

以上是关于PHP站点和NodeJS Websocket应用程序在同一个Nginx服务器/配置后面的主要内容,如果未能解决你的问题,请参考以下文章

java http可以websocket不行

如何在安全站点上使用 nodejs ws 模块

php websocket转发到nodejs

php websocket连接报错怎么解决

通过 PHP 连接到 socket.io(nodejs)

Go-websocket