3

我是 NGINX 和 WebSocket 系统的新手,但根据我的项目要求,我需要检查一些复杂的事情才能完成。

我正在尝试使用 NGINX 创建一个示例,它使用相同的 Url(负载平衡器 url)处理我的 WebSocket(端口:1234)和 HTTP 请求(端口:80)。

我正在使用三台 NGINX 服务器,一台作为负载均衡器 (10.0.0.163),另外两台作为我的应用程序服务器,分别安装了我的真实 API,10.0.0.152 和 10.0.0.154。现在,我已经在我的应用服务器上配置了 WebSocket。

根据上述配置,我的所有请求都将通过 10.0.0.163(负载均衡器),它的代理设置会将请求(HTTP/WebSocket)传递给我的应用程序服务器(10.0.0.152/154)。

注意:每个应用服务器包含单独的 Nginx、php、websocket

这是 10.0.0.154 服务器的默认(位置:/etc/nginx/sites-available/)文件,它处理同一域上的 WebSocket 和 HTTP 请求。

server{
    listen 80;
        charset UTF-8;
        root /var/www;
        index index.html index.htm index.php
        server_name localhost 10.0.0.154 ;
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
    location / {
            try_files $uri $uri/ @proxy;    autoindex on;
    }
    location @proxy{
        proxy_pass http://wb1;
    }
    location =/ {
                proxy_pass http://wb;       
                proxy_http_version 1.1;
                proxy_buffers 8 16k;
                proxy_buffer_size 32k;
                proxy_set_header Upgrade $http_upgrade; 
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Referer                 $http_referer;
        proxy_redirect off;

        }

}

以下是位于 10.0.0.163 的负载均衡器的默认文件(位置:/etc/nginx/sites-available/)。

upstream wb{
    server 10.0.0.154;
    server 10.0.0.152;
}

server{
    listen 80;
        charset UTF-8;
        root /var/www;
        index index.html index.htm index.php
        server_name 10.0.0.163 ;

    location / {
            try_files $uri $uri/ @proxy;    autoindex on;
    }
    location @proxy{
        proxy_pass http://wb;
    }
    location =/ {
                proxy_pass http://wb;       
                proxy_http_version 1.1;
                proxy_buffers 8 16k;
                proxy_buffer_size 32k;
                proxy_set_header Upgrade $http_upgrade; 
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Referer                 $http_referer;
        proxy_redirect off;

        }

}

我发现,负载均衡器对 HTTP 请求正常工作,但它无法将我的 WebSocket 请求发送到我的应用程序服务器。

我不知道我在这里缺少什么..如果你们能帮助我,那将是非常好的

4

1 回答 1

1

我看到你的配置看起来很合适。我认为您应该检查您的负载平衡器和您的应用程序服务器配置或版本。可能是不兼容的问题。

于 2013-08-12T10:38:33.930 回答