nginx不检查websocket代理上的server_name和端口

我有三个服务器块(虚拟主机)的http和一个websocket在nginxconfiguration(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/// } 

现在,在浏览器开发者控制台(最新的ff和chrome)我写:

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

结果我得到:

 > 1 

我testing的连接string:

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

所有的连接string给出了一个结果:1.这意味着成功连接到websocket后端。

它仍然会抛出连接到3001端口(我在websocket后端的日志中看到它),并且不检查server_name或端口,但它已被configuration为server_name h3400.domain.com; 并在每个服务器块的开始。