nginx não verifica nome_do_servidor e porta no proxy do websocket

1

Eu tenho três blocos de servidores (hosts virtuais) para http e um para websocket na configuração do nginx (nginx 1.6.0, ubuntu 14.04).

server {
    listen 80;
    listen [::]:80;

    server_name h3400.domain.com;

    location / {
        proxy_pass http://localhost:3400/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
    }
}

# this one for websocket on ws://h3400.domain.com:3000/
server {
    listen 3000;
    listen [::]:3000;

    server_name h3400.domain.com;

    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;
            proxy_cache_bypass $http_upgrade;
    }
}

server {
    listen 80;
    listen [::]:80;

    server_name h3500.domain.com;

    location / {
        proxy_pass http://localhost:3500/;
        proxy_http_version 1.1;            
        proxy_set_header Host $host;
    }
}


server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name domain.com;

    ///other default nginx server block settings///
}

Agora, no console do desenvolvedor do navegador (mais recente, ff e chrome), escrevo:

var ws = new WebSocket('ws://domain.com:3000', 'Site');<br>
ws.readyState;

como resultado, obtenho:

> 1

Sequências de conexão que testei:

ws://domain.com:3000
ws://h3400.domain.com:3000
ws://h3500.domain.com:3000

E todas as strings de conexão fornecem um resultado: 1. Significa conexão bem-sucedida ao backend do websocket.

Ele ainda gera conexão com a porta 3001 (vejo nos logs do backend websocket) e não verifica server_name ou port, mas foi configurado como server_name h3400.domain.com; e no início de cada bloco de servidor.

    
por fend25 31.08.2014 / 00:07

0 respostas